Skip to content

Commit a6fa9e8

Browse files
committed
working scope switcher
1 parent 0c53532 commit a6fa9e8

5 files changed

Lines changed: 55 additions & 52 deletions

File tree

src/main/java/dev/dfonline/codeclient/dev/menu/customchest/CustomChestField.java

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package dev.dfonline.codeclient.dev.menu.customchest;
22

3-
import dev.dfonline.codeclient.CodeClient;
43
import dev.dfonline.codeclient.hypercube.item.*;
54
import net.minecraft.client.font.TextRenderer;
65
import net.minecraft.client.gui.DrawContext;
76
import net.minecraft.client.gui.Drawable;
87
import net.minecraft.client.gui.navigation.GuiNavigationPath;
98
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
109
import net.minecraft.client.gui.screen.narration.NarrationPart;
11-
import net.minecraft.client.gui.widget.CheckboxWidget;
1210
import net.minecraft.client.gui.widget.ClickableWidget;
11+
import net.minecraft.client.gui.widget.CyclingButtonWidget;
1312
import net.minecraft.client.gui.widget.TextFieldWidget;
13+
import net.minecraft.text.Style;
1414
import net.minecraft.text.Text;
1515
import org.jetbrains.annotations.Nullable;
1616

@@ -27,9 +27,11 @@ public CustomChestField(TextRenderer textRender, int x, int y, int width, int he
2727
var widgets = new ArrayList<Drawable>();
2828
if(item instanceof NamedItem named) {
2929
int textboxWidth = width;
30-
if(item instanceof Variable) {
30+
if(item instanceof Variable var) {
3131
textboxWidth = textboxWidth - height;
32-
widgets.add(new CheckboxWidget(x+textboxWidth,y,height,height,Text.literal(""),false));
32+
var scopeWidget = new CyclingButtonWidget.Builder<Scope>(scope -> Text.literal(scope.getShortName()).setStyle(Style.EMPTY.withColor(scope.color))).values(Scope.unsaved, Scope.saved, Scope.local, Scope.line).omitKeyText().build(x+textboxWidth,y,height,height,Text.literal(""));
33+
scopeWidget.setValue(var.getScope());
34+
widgets.add(scopeWidget);
3335
}
3436
var text = new TextFieldWidget(textRender,x,y,textboxWidth,height,Text.literal(""));
3537
text.setMaxLength(10000);
@@ -66,8 +68,10 @@ private void updateItem() {
6668
if(widgets.get(0) instanceof TextFieldWidget text) {
6769
named.setName(text.getText());
6870
}
69-
if(named instanceof Variable variable) {
70-
CodeClient.LOGGER.info(variable.getScope().longName); // Problem for later
71+
if(named instanceof Variable var) {
72+
if(widgets.get(1) instanceof CyclingButtonWidget<?> cycle) {
73+
var.setScope((Scope) cycle.getValue());
74+
}
7175
}
7276
}
7377
if(item instanceof Vector vec) {
@@ -114,26 +118,17 @@ protected void renderButton(DrawContext context, int mouseX, int mouseY, float d
114118

115119
@Override
116120
public boolean mouseClicked(double mouseX, double mouseY, int button) {
117-
this.onClick(mouseX,mouseY);
118-
return true;
119-
// return super.mouseClicked(mouseX, mouseY, button);
120-
}
121-
122-
123-
124-
125-
@Override
126-
public void onClick(double mouseX, double mouseY) {
127121
for (var widget: widgets) {
128122
if(widget instanceof ClickableWidget clickable) {
129123
if(clickable.isMouseOver(mouseX,mouseY)) {
130124
clickable.setFocused(true);
131-
clickable.onClick(mouseX, mouseY);
125+
clickable.mouseClicked(mouseX, mouseY, button);
132126
}
133127
else clickable.setFocused(false);
134128
}
135129
}
136130
updateItem();
131+
return true;
137132
}
138133

139134
@Override
@@ -161,7 +156,6 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou
161156
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
162157
for (var widget: widgets) {
163158
if(widget instanceof ClickableWidget click && click.isFocused()) {
164-
updateItem();
165159
return click.keyPressed(keyCode,scanCode,modifiers);
166160
}
167161
}

src/main/java/dev/dfonline/codeclient/dev/menu/customchest/CustomChestMenu.java

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,13 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou
161161
@Override
162162
public boolean mouseClicked(double mouseX, double mouseY, int button) {
163163
List<Slot> subList = this.getScreenHandler().slots.subList((int) scroll, Math.min((int) scroll + Size.SLOTS,27));
164-
for (Widget widget : widgets.values()) {
165-
if (widget instanceof ClickableWidget clickable) {
164+
for (var entry : widgets.entrySet()) {
165+
if (entry.getValue() instanceof ClickableWidget clickable) {
166166
clickable.setFocused(clickable.isMouseOver(mouseX - this.x, mouseY - this.y));
167-
clickable.mouseClicked(mouseX - this.x,mouseY - this.y,button);
167+
if(clickable.mouseClicked(mouseX - this.x,mouseY - this.y,button)) {
168+
updateItem(entry.getKey());
169+
return true;
170+
}
168171
}
169172
}
170173
for (int i = 0; i < subList.size(); i++) {
@@ -218,50 +221,58 @@ private void updateItem(int scrollRelativeSlot) {
218221

219222
@Override
220223
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
221-
int prev = (int) scroll;
222-
if(keyCode == GLFW.GLFW_KEY_PAGE_DOWN) {
223-
scroll = Math.min(27 - Size.WIDGETS, scroll + Size.WIDGETS);
224-
update(prev);
225-
}
226-
if(keyCode == GLFW.GLFW_KEY_PAGE_UP) {
227-
scroll = Math.max(0, scroll - Size.WIDGETS);
228-
update(prev);
229-
}
230224
if(keyCode == GLFW.GLFW_KEY_ESCAPE) {
231225
for (int i = 0; i < widgets.size(); i++) {
232226
Widget widget = widgets.get(i);
233227
if (widget instanceof ClickableWidget clickable) {
234228
if (clickable.isFocused()) {
235229
clickable.setFocused(false);
236230
updateItem(i);
237-
return true;
231+
return false;
238232
}
239233
}
240234
}
241235
}
242-
for (int i = 0; i < widgets.size(); i++) {
243-
Widget widget = widgets.get(i);
244-
if (widget instanceof ClickableWidget clickable) {
245-
if (clickable.isFocused()) {
246-
clickable.keyPressed(keyCode, scanCode, modifiers);
247-
updateItem(i);
248-
return true;
236+
if(keyCode <= GLFW.GLFW_KEY_DOWN || keyCode >= GLFW.GLFW_KEY_PAGE_DOWN) {
237+
for (int i = 0; i < widgets.size(); i++) {
238+
Widget widget = widgets.get(i);
239+
if (widget instanceof ClickableWidget clickable) {
240+
if (clickable.isFocused()) {
241+
clickable.keyPressed(keyCode, scanCode, modifiers);
242+
updateItem(i);
243+
return true;
244+
}
249245
}
250246
}
251247
}
252-
if(keyCode == GLFW.GLFW_KEY_END) {
253-
scroll = 27 - Size.WIDGETS;
248+
boolean up = keyCode == GLFW.GLFW_KEY_UP || CodeClient.MC.options.forwardKey.matchesKey(keyCode,scanCode);
249+
boolean down = keyCode == GLFW.GLFW_KEY_DOWN || CodeClient.MC.options.backKey.matchesKey(keyCode,scanCode);
250+
boolean pageUp = keyCode == GLFW.GLFW_KEY_PAGE_DOWN || (up && hasShiftDown());
251+
boolean pageDown = keyCode == GLFW.GLFW_KEY_PAGE_UP || (down && hasShiftDown());
252+
boolean start = keyCode == GLFW.GLFW_KEY_HOME || (up && hasAltDown() && !pageUp);
253+
boolean end = keyCode == GLFW.GLFW_KEY_END || (down && hasAltDown() && !pageDown);
254+
int prev = (int) scroll;
255+
if(pageDown) {
256+
scroll = Math.min(27 - Size.WIDGETS, scroll + Size.WIDGETS);
257+
update(prev);
258+
}
259+
if(pageUp) {
260+
scroll = Math.max(0, scroll - Size.WIDGETS);
254261
update(prev);
255262
}
256-
if(keyCode == GLFW.GLFW_KEY_HOME) {
263+
if(start) {
257264
scroll = 0;
258265
update(prev);
259266
}
260-
if(keyCode == GLFW.GLFW_KEY_UP || CodeClient.MC.options.forwardKey.matchesKey(keyCode,scanCode)) {
267+
if(end) {
268+
scroll = 27 - Size.WIDGETS;
269+
update(prev);
270+
}
271+
if(up) {
261272
scroll = Math.max(0,scroll - 1);
262273
update(prev);
263274
}
264-
if(keyCode == GLFW.GLFW_KEY_DOWN || CodeClient.MC.options.backKey.matchesKey(keyCode,scanCode)) {
275+
if(down) {
265276
scroll = Math.min(27 - Size.WIDGETS, scroll + 1);
266277
update(prev);
267278
}

src/main/java/dev/dfonline/codeclient/dev/menu/customchest/NumberFieldWidget.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,7 @@ public double getNumber() {
3333

3434
@Override
3535
public void write(String text) {
36-
super.write(text.replaceAll(regex,"")); // This uses {0,100} instead of * because java.
37-
try {
38-
number = Double.parseDouble(text);
39-
}
40-
catch (Exception ignored) {}
41-
// this.setText(this.getText().replaceAll(regex,""));
36+
super.write(text.replaceAll(regex,""));
4237
}
4338

4439
@Override

src/main/java/dev/dfonline/codeclient/dev/overlay/ChestPeeker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public static List<Text> getOverlayText() {
145145
text.append(Text.literal(type.name.toUpperCase()).fillStyle(Style.EMPTY.withColor(type.color)).append(" "));
146146
if (type == Type.var) {
147147
Scope scope = Scope.valueOf(data.get("scope").getAsString());
148-
text.append(scope == Scope.line & Config.getConfig().UseIForLineScope ? "I" : scope.shortName ).fillStyle(Style.EMPTY.withColor(scope.color)).append(" ");
148+
text.append(scope.getShortName()).fillStyle(Style.EMPTY.withColor(scope.color)).append(" ");
149149
}
150150
if (type == Type.num || type == Type.txt || type == Type.comp || type == Type.var || type == Type.g_val || type == Type.pn_el) {
151151
text.append(item.getName());

src/main/java/dev/dfonline/codeclient/hypercube/item/Scope.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package dev.dfonline.codeclient.hypercube.item;
22

3-
import net.minecraft.text.Text;
3+
import dev.dfonline.codeclient.config.Config;
44
import net.minecraft.text.TextColor;
5-
import net.minecraft.util.Colors;
65
import net.minecraft.util.Formatting;
76

87
public enum Scope {
@@ -19,4 +18,8 @@ public enum Scope {
1918
this.longName = longName;
2019
this.shortName = shortName;
2120
}
21+
22+
public String getShortName() {
23+
return this == Scope.line & Config.getConfig().UseIForLineScope ? "I" : shortName;
24+
}
2225
}

0 commit comments

Comments
 (0)