Skip to content

Commit cd40132

Browse files
committed
Fix some issues with button positioning and editor
1 parent d20d69b commit cd40132

File tree

9 files changed

+257
-173
lines changed

9 files changed

+257
-173
lines changed

common/src/main/java/dev/terminalmc/clientsort/client/gui/ControlButtonManager.java

Lines changed: 202 additions & 131 deletions
Large diffs are not rendered by default.

common/src/main/java/dev/terminalmc/clientsort/client/gui/screen/edit/ContainerPositionEditScreen.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222

2323
import java.util.LinkedList;
2424

25+
/**
26+
* An implementation of {@link PositionEditScreen} for editing container
27+
* buttons.
28+
*/
2529
public class ContainerPositionEditScreen extends PositionEditScreen {
2630
public ContainerPositionEditScreen(Screen underlay, ControlButton button) {
2731
super(underlay, button);

common/src/main/java/dev/terminalmc/clientsort/client/gui/screen/edit/GroupSelectorScreen.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,22 @@ public GroupSelectorScreen(Screen underlay, Screen lastScreen) {
4444
this.font = Minecraft.getInstance().font;
4545
this.underlay = underlay;
4646
this.lastScreen = lastScreen;
47-
48-
resetButtons();
49-
}
50-
51-
private void resetButtons() {
52-
buttons.clear();
53-
buttons.addAll(ControlButtonManager.getContainerButtons());
54-
buttons.addAll(ControlButtonManager.getPlayerButtons());
5547
}
5648

5749
@Override
5850
public void init() {
51+
super.init();
5952
underlay.init(Minecraft.getInstance(), width, height);
60-
resetButtons();
53+
reloadButtons();
6154
rebuildGui();
6255
}
6356

57+
private void reloadButtons() {
58+
buttons.clear();
59+
buttons.addAll(ControlButtonManager.getContainerButtons());
60+
buttons.addAll(ControlButtonManager.getPlayerButtons());
61+
}
62+
6463
private void rebuildGui() {
6564
clearWidgets();
6665

common/src/main/java/dev/terminalmc/clientsort/client/gui/screen/edit/PlayerPositionEditScreen.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222

2323
import java.util.LinkedList;
2424

25+
/**
26+
* An implementation of {@link PositionEditScreen} for editing player inventory
27+
* buttons.
28+
*/
2529
public class PlayerPositionEditScreen extends PositionEditScreen {
2630
public PlayerPositionEditScreen(Screen underlay, ControlButton button) {
2731
super(underlay, button);

common/src/main/java/dev/terminalmc/clientsort/client/gui/screen/edit/PositionEditScreen.java

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -66,33 +66,34 @@ public PositionEditScreen(Screen underlay, ControlButton button, Screen lastScre
6666
@Override
6767
public void init() {
6868
super.init();
69-
70-
if (Minecraft.getInstance().screen != this) {
71-
Minecraft.getInstance().setScreen(this);
72-
}
73-
7469
underlay.init(Minecraft.getInstance(), width, height);
75-
76-
reloadButtons();
70+
71+
if (!reloadButtons()) {
72+
clearWidgets();
73+
return;
74+
}
75+
7776
setSelected(buttons.getFirst());
78-
7977
rebuildGui();
8078
}
8179

8280
/**
8381
* Reloads the list of editable buttons.
8482
*/
85-
private void reloadButtons() {
83+
private boolean reloadButtons() {
8684
buttons.clear();
8785
buttons.addAll(getButtons());
8886

8987
// Should never happen, but worth catching anyway
9088
if (buttons.size() != 3) {
9189
ClientSort.LOG.error("Failed to reload buttons on PositionEditScreen: "
92-
+ "Button list is too small or does not contain provided button");
90+
+ "Button list is too small (size: {}) or does not contain provided button",
91+
buttons.size());
9392
onClose();
9493
Minecraft.getInstance().setScreen(underlay);
94+
return false;
9595
}
96+
return true;
9697
}
9798

9899
/**
@@ -260,7 +261,6 @@ private void rebuildGui() {
260261
@Override
261262
public void render(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTick) {
262263
underlay.render(graphics, mouseX, mouseY, partialTick);
263-
264264
super.render(graphics, mouseX, mouseY, partialTick);
265265

266266
// Render trace lines
@@ -386,7 +386,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
386386
return true;
387387
} else {
388388
for (ControlButton cb : buttons) {
389-
if (isMouseOver(cb, mouseX, mouseY)) {
389+
if (cb.isMouseOver(mouseX, mouseY)) {
390390
cb.mouseClicked(mouseX, mouseY, mouseButton);
391391
setSelected(cb);
392392
dragging = true;
@@ -433,17 +433,6 @@ public void setSelected(@NotNull ControlButton widget) {
433433
if (statusButton != null) statusButton.setValue(selected.active);
434434
}
435435

436-
/**
437-
* A status-agnostic alternative to {@link AbstractWidget#isMouseOver}.
438-
* @return {@code true} if the mouse position overlaps {@code widget}.
439-
*/
440-
public boolean isMouseOver(AbstractWidget widget, double mouseX, double mouseY) {
441-
return mouseX >= (double)widget.getX() &&
442-
mouseY >= (double)widget.getY() &&
443-
mouseX < (double)(widget.getX() + widget.getWidth())
444-
&& mouseY < (double)(widget.getY() + widget.getHeight());
445-
}
446-
447436
/**
448437
* If {@code before} does not match the current offset of {@code button},
449438
* moves all other widgets to match how {@code button} was moved.

common/src/main/java/dev/terminalmc/clientsort/client/gui/widget/ControlButton.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package dev.terminalmc.clientsort.client.gui.widget;
1919

2020
import com.mojang.blaze3d.platform.InputConstants;
21+
import dev.terminalmc.clientsort.client.ClientSort;
2122
import dev.terminalmc.clientsort.client.config.Vec2i;
2223
import dev.terminalmc.clientsort.client.gui.screen.edit.ContainerPositionEditScreen;
2324
import dev.terminalmc.clientsort.client.gui.screen.edit.PlayerPositionEditScreen;
@@ -86,17 +87,30 @@ protected ControlButton(
8687

8788
@Override
8889
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
89-
if (mouseButton == InputConstants.MOUSE_BUTTON_RIGHT) {
90-
openEditScreen();
91-
return true;
92-
} else if (Minecraft.getInstance().screen instanceof PositionEditScreen) {
93-
return true;
94-
} else {
95-
return super.mouseClicked(mouseX, mouseY, mouseButton);
90+
if (isMouseOver(mouseX, mouseY)) {
91+
if (mouseButton == InputConstants.MOUSE_BUTTON_RIGHT) {
92+
openEditScreen();
93+
return true;
94+
} else if (Minecraft.getInstance().screen instanceof PositionEditScreen) {
95+
return true;
96+
}
9697
}
98+
return super.mouseClicked(mouseX, mouseY, mouseButton);
99+
}
100+
101+
/**
102+
* Checks mouse position irrespective of widget status or visibility.
103+
*/
104+
@Override
105+
public boolean isMouseOver(double mouseX, double mouseY) {
106+
return mouseX >= (double)getX()
107+
&& mouseY >= (double)getY()
108+
&& mouseX < (double)(getX() + width)
109+
&& mouseY < (double)(getY() + height);
97110
}
98111

99112
public void openEditScreen() {
113+
ClientSort.LOG.warn("openEditScreen for button with isPlayerInv {}", isPlayerInv);
100114
Minecraft.getInstance().setScreen(isPlayerInv
101115
? new PlayerPositionEditScreen(screen, this)
102116
: new ContainerPositionEditScreen(screen, this)
@@ -123,9 +137,7 @@ public void renderWidget(@NotNull GuiGraphics graphics, int mouseX, int mouseY,
123137
setY(newY);
124138

125139
ResourceLocation texture = sprites.get(isActive(), isHoveredOrFocused());
126-
if (isActive() || Minecraft.getInstance().screen instanceof PositionEditScreen) {
127-
graphics.blitSprite(texture, getX(), getY(), 0, width, height);
128-
}
140+
graphics.blitSprite(texture, getX(), getY(), 0, width, height);
129141
}
130142

131143
@Override

common/src/main/java/dev/terminalmc/clientsort/client/gui/widget/SortButton.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
public class SortButton extends ControlButton {
3636
private static final WidgetSprites SPRITES = new WidgetSprites(
3737
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/sort"),
38+
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/sort_disabled"),
3839
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/sort_highlighted")
3940
);
4041

common/src/main/java/dev/terminalmc/clientsort/client/gui/widget/StackFillButton.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@
3131
public class StackFillButton extends ControlButton {
3232
private static final WidgetSprites SPRITES_UP = new WidgetSprites(
3333
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/stack_fill_up"),
34+
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/stack_fill_up_disabled"),
3435
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/stack_fill_up_highlighted")
3536
);
3637
private static final WidgetSprites SPRITES_DOWN = new WidgetSprites(
3738
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/stack_fill_down"),
39+
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/stack_fill_down_disabled"),
3840
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/stack_fill_down_highlighted")
3941
);
4042

common/src/main/java/dev/terminalmc/clientsort/client/gui/widget/TransferButton.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@
3131
public class TransferButton extends ControlButton {
3232
private static final WidgetSprites SPRITES_UP = new WidgetSprites(
3333
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/transfer_up"),
34+
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/transfer_up_disabled"),
3435
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/transfer_up_highlighted")
3536
);
3637
private static final WidgetSprites SPRITES_DOWN = new WidgetSprites(
3738
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/transfer_down"),
39+
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/transfer_down_disabled"),
3840
ResourceLocation.fromNamespaceAndPath(ClientSort.MOD_ID, "widget/transfer_down_highlighted")
3941
);
4042

0 commit comments

Comments
 (0)