]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/gui/ListScreen.java
9655563bcab7f6c838938ffb6c047c6290e0e6a2
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / gui / ListScreen.java
1 package com.irtimaled.bbor.client.gui;
2
3 import com.irtimaled.bbor.Versions;
4 import com.irtimaled.bbor.client.interop.ClientInterop;
5 import net.minecraft.client.gui.Element;
6 import net.minecraft.client.gui.screen.Screen;
7 import net.minecraft.client.resource.language.I18n;
8 import net.minecraft.client.util.math.MatrixStack;
9 import net.minecraft.text.LiteralText;
10
11 public abstract class ListScreen extends Screen {
12     private final Screen lastScreen;
13     private static final String version = Versions.build;
14
15     private AbstractButton doneButton;
16     private ControlList controlList;
17     private SearchField searchField;
18
19     ListScreen(Screen lastScreen) {
20         super(new LiteralText("Bounding Box Outline Reloaded"));
21         this.lastScreen = lastScreen;
22     }
23
24     ListScreen() {
25         this(null);
26     }
27
28     protected void onDoneClicked() {
29         ClientInterop.displayScreen(lastScreen);
30     }
31
32     @Override
33     protected void init() {
34         this.controlList = this.buildList(48, this.height - 28);
35         this.searchField = new SearchField(this.textRenderer, this.width / 2 - 100, 22, 200, 20, this.controlList);
36         this.doneButton = new AbstractButton(this.width / 2 - 100, this.height - 24, 200, I18n.translate("gui.done")) {
37             @Override
38             public void onPressed() {
39                 onDoneClicked();
40             }
41         };
42
43         this.children.add(this.searchField);
44         this.children.add(this.controlList);
45         this.children.add(this.doneButton);
46     }
47
48     protected abstract ControlList buildList(int top, int bottom);
49
50     @Override
51     public void render(MatrixStack matrixStack, int mouseX, int mouseY, float unknown) {
52         render(matrixStack, mouseX, mouseY);
53     }
54
55     protected void render(MatrixStack matrixStack, int mouseX, int mouseY) {
56         this.controlList.render(matrixStack, mouseX, mouseY);
57
58         this.drawCenteredString(matrixStack, this.textRenderer, this.title.asString(), this.width / 2, 8, 16777215);
59         this.searchField.render(matrixStack, mouseX, mouseY);
60         this.doneButton.render(matrixStack, mouseX, mouseY);
61
62         int left = this.width - this.textRenderer.getWidth(version) - 2;
63         int top = this.height - 10;
64         this.drawStringWithShadow(matrixStack, this.textRenderer, version, left, top, -10658467);
65     }
66
67     @Override
68     public void tick() {
69         this.searchField.tick();
70     }
71
72     @Override
73     public boolean keyPressed(int key, int scanCode, int modifiers) {
74         return super.keyPressed(key, scanCode, modifiers) || this.searchField.keyPressed(key, scanCode, modifiers);
75     }
76
77     @Override
78     public boolean charTyped(char character, int modifiers) {
79         return this.searchField.charTyped(character, modifiers);
80     }
81
82     @Override
83     public boolean mouseScrolled(double mouseX, double mouseY, double scrollAmount) {
84         return this.controlList.mouseScrolled(mouseX, mouseY, scrollAmount);
85     }
86
87     @Override
88     public void removed() {
89         this.controlList.close();
90     }
91
92     protected void setCanExit(boolean canExit) {
93         this.doneButton.active = canExit;
94     }
95
96     @Override
97     public boolean mouseClicked(double mouseX, double mouseY, int button) {
98         for (Element control : this.children()) {
99             if (control.mouseClicked(mouseX, mouseY, button)) {
100                 Element focused = getFocused();
101                 if (focused instanceof IFocusableControl && focused != control) {
102                     ((IFocusableControl) focused).clearFocus();
103                 }
104                 this.setFocused(control);
105                 if (button == 0) this.setDragging(true);
106                 return true;
107             }
108         }
109         return false;
110     }
111 }