Skip to content

Commit 578441f

Browse files
Bedrock UI Test
1 parent f49269c commit 578441f

File tree

55 files changed

+1531
-3
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1531
-3
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package me.juancarloscp52.bedrockify.client.gui;
2+
3+
import me.juancarloscp52.bedrockify.client.gui.bedrockMenus.BedrockifyIconButtonTextures;
4+
import me.juancarloscp52.bedrockify.client.gui.bedrockMenus.GuiUtils;
5+
import me.juancarloscp52.bedrockify.client.gui.bedrockMenus.widgets.*;
6+
import me.juancarloscp52.bedrockify.client.gui.bedrockMenus.widgets.entryList.BedrockifyEntry;
7+
import me.juancarloscp52.bedrockify.client.gui.bedrockMenus.widgets.entryList.BedrockifyEntryListWidget;
8+
import net.minecraft.client.gui.DrawContext;
9+
import net.minecraft.client.gui.screen.Screen;
10+
import net.minecraft.client.render.RenderLayer;
11+
import net.minecraft.text.Text;
12+
import net.minecraft.util.Identifier;
13+
import net.minecraft.util.math.ColorHelper;
14+
15+
public class Test extends Screen {
16+
17+
BedrockifyEntryListWidget test;
18+
BedrockifyEntryListWidget test2;
19+
BedrockifyIconButtonTextures video = new BedrockifyIconButtonTextures(Identifier.of("bedrockify", "icons/video"), Identifier.of("bedrockify", "icons/video_highlighted"));
20+
BedrockifyIconButtonTextures back = new BedrockifyIconButtonTextures(Identifier.of("bedrockify", "widgets/back_button"), Identifier.of("bedrockify", "widgets/back_button_highlighted"), 4, 7);
21+
22+
23+
int header = 23;
24+
int sidebarWidth = (int) (this.width*0.4f);
25+
Screen previous;
26+
public Test(Text title, Screen previous) {
27+
super(title);
28+
}
29+
30+
@Override
31+
protected void init() {
32+
this.addDrawableChild(new BedrockifyIconButtonWidget.Builder(Text.literal("Back"), button -> client.setScreen(previous), back).dimensions(4,4,12,14).build());
33+
sidebarWidth = (int) (this.width*0.4f);
34+
test = this.addDrawableChild(new BedrockifyEntryListWidget(client, sidebarWidth, this.height-header, header, 30, 0));
35+
test.setX(0);
36+
test.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Video"), button -> System.out.println("PRESSED")).icon(video).position(220, 10).width(test.getRowWidth()).build()));
37+
test.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button 1"), button -> System.out.println("PRESSED")).position(220, 10).icon(video).width(test.getRowWidth()).build()));
38+
test.children().add(new BedrockifyEntry(new BedrockifyTextWidget(Text.literal("Category Separator Centered"))));
39+
test.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button 2"), button -> System.out.println("PRESSED")).position(220, 10).width(test.getRowWidth()).build()));
40+
test.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button 3"), button -> System.out.println("PRESSED")).position(220, 10).width(test.getRowWidth()).build()));
41+
test.children().add(new BedrockifyEntry(new BedrockifyTextWidget(Text.literal("Category Separator top"), GuiUtils.VerticalLocation.TOP)));
42+
test.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button 69"), button -> System.out.println("PRESSED")).position(220, 10).width(test.getRowWidth()).build()));
43+
test.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button 69"), button -> System.out.println("PRESSED")).position(220, 10).width(test.getRowWidth()).build()));
44+
test.children().add(new BedrockifyEntry(new BedrockifyTextWidget(Text.literal("Category Separator bottom"), GuiUtils.VerticalLocation.BOTTOM)));
45+
test.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button 69"), button -> System.out.println("PRESSED")).position(220, 10).width(test.getRowWidth()).build()));
46+
test.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button 69"), button -> System.out.println("PRESSED")).position(220, 10).width(test.getRowWidth()).build()));
47+
test.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button 69"), button -> System.out.println("PRESSED")).position(220, 10).width(test.getRowWidth()).build()));
48+
49+
test2 = this.addDrawableChild(new BedrockifyEntryListWidget(client, this.width-sidebarWidth-4, this.height-header, header, 30, 0));
50+
var text = new BedrockifyTextFieldWidget(this.textRenderer,100,Text.literal("Example Text Field"), Text.literal(""));
51+
text.setPlaceholder(Text.literal("Escribe aqui..."));
52+
test2.setX(sidebarWidth+4);
53+
test2.children().add(new BedrockifyEntry(new BedrockifyToggleWidget.Builder(Text.literal("Toggle Option 1"), button -> System.out.println("PRESSED")).position(5, 16).build(),20));
54+
test2.children().add(new BedrockifyEntry(new BedrockifyToggleWidget.Builder(Text.literal("Toggle Option 2"), button -> System.out.println("PRESSED")).position(5, 16).build(), 20));
55+
test2.children().add(new BedrockifyEntry(new BedrockifySliderWidget(0,0,test2.getRowWidth(), Text.literal("Slider Option: "),0.5d),35));
56+
test2.children().add(new BedrockifyEntry(text));
57+
test2.children().add(new BedrockifyEntry(new BedrockifyColorFieldWidget(this.textRenderer,100,50,100,Text.literal("Example Color Field"), false, ColorHelper.getArgb(0,0,255))));
58+
test2.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button"), button -> System.out.println("PRESSED")).position(220, 10).width(test2.getRowWidth()).build()));
59+
test2.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button"), button -> System.out.println("PRESSED")).position(220, 10).width(test2.getRowWidth()).build()));
60+
test2.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button"), button -> System.out.println("PRESSED")).position(220, 10).width(test2.getRowWidth()).build()));
61+
test2.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button"), button -> System.out.println("PRESSED")).position(220, 10).title(Text.literal("TITLE TEST:")).width(test2.getRowWidth()).build()));
62+
test2.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button"), button -> System.out.println("PRESSED")).position(220, 10).width(test2.getRowWidth()).build()));
63+
test2.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button"), button -> System.out.println("PRESSED")).position(220, 10).width(test2.getRowWidth()).build(),50));
64+
test2.children().add(new BedrockifyEntry(new BedrockifyButtonWidget.Builder(Text.literal("Button"), button -> System.out.println("PRESSED")).position(220, 10).width(test2.getRowWidth()).build()));
65+
66+
67+
68+
}
69+
70+
@Override
71+
public void renderBackground(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
72+
super.renderBackground(context, mouseX, mouseY, deltaTicks);
73+
context.drawGuiTexture(RenderLayer::getGuiTextured, Identifier.of("bedrockify", "header"), 0, 0, this.width, header);
74+
context.drawGuiTexture(RenderLayer::getGuiTextured, Identifier.of("bedrockify", "separator"), sidebarWidth, header-1, 4, this.height-header+1);
75+
context.drawText(textRenderer, this.title, 18, 7, ColorHelper.getArgb(76, 76, 76), false);
76+
}
77+
}
78+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package me.juancarloscp52.bedrockify.client.gui.bedrockMenus;
2+
3+
import net.minecraft.util.Identifier;
4+
5+
public record BedrockifyButtonTextures(Identifier enabled, Identifier enabledFocused, Identifier pressed, Identifier pressedFocused, Identifier disabled) {
6+
7+
public BedrockifyButtonTextures(Identifier enabled, Identifier enabledFocused, Identifier disabled){
8+
this(enabled, enabledFocused, enabled, enabled, disabled);
9+
}
10+
11+
public Identifier get(boolean enabled, boolean focused, boolean pressed) {
12+
if (enabled) {
13+
if(pressed){
14+
return focused ? this.pressedFocused : this.pressed;
15+
}else {
16+
return focused ? this.enabledFocused : this.enabled;
17+
}
18+
} else {
19+
return this.disabled;
20+
}
21+
}
22+
23+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package me.juancarloscp52.bedrockify.client.gui.bedrockMenus;
2+
3+
import net.minecraft.util.Identifier;
4+
5+
public record BedrockifyIconButtonTextures(Identifier icon, Identifier highlightedIcon, int width, int height) {
6+
7+
public BedrockifyIconButtonTextures(Identifier icon, Identifier highlightedIcon){
8+
this(icon, highlightedIcon, 15,12);
9+
}
10+
11+
public Identifier get(boolean focused) {
12+
return focused ? this.highlightedIcon : this.icon;
13+
}
14+
15+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package me.juancarloscp52.bedrockify.client.gui.bedrockMenus;
2+
3+
import net.minecraft.client.font.TextRenderer;
4+
import net.minecraft.client.gui.DrawContext;
5+
import net.minecraft.text.Text;
6+
import net.minecraft.util.Util;
7+
import net.minecraft.util.math.MathHelper;
8+
9+
public class GuiUtils {
10+
11+
public static void drawScrollableText(
12+
DrawContext context, TextRenderer textRenderer, Text text, int startX, int startY, int endX, int endY, int color, VerticalLocation verticalLocation
13+
) {
14+
int textWidth = textRenderer.getWidth(text);
15+
16+
int centeredYOrigin = switch (verticalLocation) {
17+
case TOP -> startY + 2;
18+
case BOTTOM -> endY - 9 - 1;
19+
case CENTERED -> (startY + endY - 9) / 2 + 1;
20+
};
21+
22+
int textBoxWidth = endX - startX;
23+
if (textWidth > textBoxWidth) {
24+
int remainingText = textWidth - textBoxWidth;
25+
double time = Util.getMeasuringTimeMs() / 1000.0;
26+
double maxRemaining = Math.max(remainingText * 0.5, 3.0);
27+
double movementDelta = Math.sin((Math.PI / 2) * Math.cos((Math.PI * 2) * time / maxRemaining)) / 2.0 + 0.5;
28+
double positionX = MathHelper.lerp(movementDelta, 0.0, remainingText);
29+
context.enableScissor(startX, startY, endX, endY);
30+
context.drawText(textRenderer, text, startX - (int) positionX, centeredYOrigin, color, false);
31+
context.disableScissor();
32+
} else {
33+
context.drawText(textRenderer, text, startX, centeredYOrigin, color, false);
34+
}
35+
}
36+
37+
public enum VerticalLocation {
38+
TOP, CENTERED, BOTTOM
39+
}
40+
41+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package me.juancarloscp52.bedrockify.client.gui.bedrockMenus.builder;
2+
3+
import me.juancarloscp52.bedrockify.client.gui.bedrockMenus.widgets.entryList.BedrockifyEntry;
4+
import net.minecraft.text.Text;
5+
6+
import java.util.function.Consumer;
7+
import java.util.function.Supplier;
8+
9+
public class BedrockifyWidgetBuilder<TValue, TWidget extends BedrockifyEntry>{
10+
11+
private Text title;
12+
private Supplier<TValue> defaultValue;
13+
private Consumer<TValue> applyValue;
14+
private TValue value;
15+
16+
17+
18+
}
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
package me.juancarloscp52.bedrockify.client.gui.bedrockMenus.widgets;
2+
3+
import me.juancarloscp52.bedrockify.client.gui.bedrockMenus.BedrockifyButtonTextures;
4+
import me.juancarloscp52.bedrockify.client.gui.bedrockMenus.BedrockifyIconButtonTextures;
5+
import me.juancarloscp52.bedrockify.client.gui.bedrockMenus.GuiUtils;
6+
import net.fabricmc.api.EnvType;
7+
import net.fabricmc.api.Environment;
8+
import net.minecraft.client.font.TextRenderer;
9+
import net.minecraft.client.gui.DrawContext;
10+
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
11+
import net.minecraft.client.gui.tooltip.Tooltip;
12+
import net.minecraft.client.render.RenderLayer;
13+
import net.minecraft.text.MutableText;
14+
import net.minecraft.text.Text;
15+
import net.minecraft.util.Identifier;
16+
import net.minecraft.util.math.ColorHelper;
17+
import org.jetbrains.annotations.Nullable;
18+
19+
import java.util.function.Consumer;
20+
import java.util.function.Supplier;
21+
22+
public class BedrockifyButtonWidget extends BedrockifyPressableWidget {
23+
24+
public static final int DEFAULT_WIDTH_SMALL = 120;
25+
public static final int DEFAULT_WIDTH = 150;
26+
public static final int DEFAULT_HEIGHT = 30;
27+
public static final int TEXT_MARGIN = 11;
28+
public static final int TEXT_MARGIN_WITH_ICON = 37;
29+
protected static final BedrockifyButtonWidget.NarrationSupplier DEFAULT_NARRATION_SUPPLIER = Supplier::get;
30+
protected final Consumer<BedrockifyButtonWidget> onPress;
31+
protected final BedrockifyButtonWidget.NarrationSupplier narrationSupplier;
32+
@Nullable
33+
private BedrockifyIconButtonTextures icon = null; // ICON TEXT MARGIN 37 from x origin
34+
35+
protected BedrockifyButtonWidget(int x, int y, int width, int height, Text message, @Nullable Text title, @Nullable BedrockifyIconButtonTextures icon, Consumer<BedrockifyButtonWidget> onPress, BedrockifyButtonWidget.NarrationSupplier narrationSupplier) {
36+
super(x, y, width, height, message, title, new BedrockifyButtonTextures(
37+
Identifier.of("bedrockify", "widgets/button"),
38+
Identifier.of("bedrockify", "widgets/button_highlighted"),
39+
Identifier.of("bedrockify", "widgets/button_pressed"),
40+
Identifier.of("bedrockify", "widgets/button_highlighted_pressed"),
41+
Identifier.of("bedrockify", "widgets/button_disabled")
42+
));
43+
this.icon = icon;
44+
this.onPress = onPress;
45+
this.narrationSupplier = narrationSupplier;
46+
}
47+
48+
public static BedrockifyButtonWidget.Builder builder(Text message, Consumer<BedrockifyButtonWidget> onPress) {
49+
return new BedrockifyButtonWidget.Builder(message, onPress);
50+
}
51+
52+
@Override
53+
protected MutableText getNarrationMessage() {
54+
return this.narrationSupplier.createNarrationMessage(super::getNarrationMessage);
55+
}
56+
57+
@Override
58+
public void appendClickableNarrations(NarrationMessageBuilder builder) {
59+
this.appendDefaultNarrations(builder);
60+
}
61+
62+
@Override
63+
protected void renderWidget(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
64+
super.renderWidget(context, mouseX, mouseY, deltaTicks);
65+
if (icon != null) {
66+
context.drawGuiTexture(
67+
RenderLayer::getGuiTextured,
68+
icon.get(this.isHovered() && this.active),
69+
this.getX() + 8,
70+
this.getButtonY() + ((this.getButtonHeight() - icon.height()) / 2),
71+
15,
72+
12,
73+
ColorHelper.getWhite(this.alpha)
74+
);
75+
}
76+
}
77+
78+
@Override
79+
public void drawMessage(DrawContext context, TextRenderer textRenderer, int color) {
80+
int xMargin = icon == null ? TEXT_MARGIN : TEXT_MARGIN_WITH_ICON;
81+
GuiUtils.drawScrollableText(context, textRenderer, this.getMessage(), this.getX() + xMargin, this.getButtonY(), this.getX() + this.getWidth() - 5, this.getButtonY() + this.getButtonHeight(), color, GuiUtils.VerticalLocation.CENTERED);
82+
}
83+
84+
@Override
85+
public void onPress() {
86+
this.onPress.accept(this);
87+
}
88+
89+
@Environment(EnvType.CLIENT)
90+
public interface NarrationSupplier {
91+
MutableText createNarrationMessage(Supplier<MutableText> textSupplier);
92+
}
93+
94+
@Environment(EnvType.CLIENT)
95+
public static class Builder {
96+
private final Text message;
97+
@Nullable
98+
private Text title;
99+
private final Consumer<BedrockifyButtonWidget> onPress;
100+
@Nullable
101+
private Tooltip tooltip;
102+
private int x;
103+
private int y;
104+
private int width = DEFAULT_WIDTH;
105+
private int height = DEFAULT_HEIGHT;
106+
private BedrockifyButtonWidget.NarrationSupplier narrationSupplier = BedrockifyButtonWidget.DEFAULT_NARRATION_SUPPLIER;
107+
@Nullable
108+
private BedrockifyIconButtonTextures icon = null;
109+
110+
public Builder(Text message, Consumer<BedrockifyButtonWidget> onPress) {
111+
this.message = message;
112+
this.onPress = onPress;
113+
}
114+
115+
public BedrockifyButtonWidget.Builder position(int x, int y) {
116+
this.x = x;
117+
this.y = y;
118+
return this;
119+
}
120+
121+
public BedrockifyButtonWidget.Builder width(int width) {
122+
this.width = width;
123+
return this;
124+
}
125+
126+
public BedrockifyButtonWidget.Builder size(int width, int height) {
127+
this.width = width;
128+
this.height = height;
129+
return this;
130+
}
131+
132+
public BedrockifyButtonWidget.Builder dimensions(int x, int y, int width, int height) {
133+
return this.position(x, y).size(width, height);
134+
}
135+
136+
public BedrockifyButtonWidget.Builder tooltip(@Nullable Tooltip tooltip) {
137+
this.tooltip = tooltip;
138+
return this;
139+
}
140+
141+
public BedrockifyButtonWidget.Builder title(@Nullable Text title) {
142+
this.title = title;
143+
return this;
144+
}
145+
146+
public BedrockifyButtonWidget.Builder narrationSupplier(BedrockifyButtonWidget.NarrationSupplier narrationSupplier) {
147+
this.narrationSupplier = narrationSupplier;
148+
return this;
149+
}
150+
151+
public BedrockifyButtonWidget.Builder icon(@Nullable BedrockifyIconButtonTextures icon) {
152+
this.icon = icon;
153+
return this;
154+
}
155+
156+
public BedrockifyButtonWidget build() {
157+
BedrockifyButtonWidget BedrockifyButtonWidget = new BedrockifyButtonWidget(this.x, this.y, this.width, this.height, this.message, this.title, icon, this.onPress, this.narrationSupplier);
158+
BedrockifyButtonWidget.setTooltip(this.tooltip);
159+
return BedrockifyButtonWidget;
160+
}
161+
}
162+
}

0 commit comments

Comments
 (0)