tidying up UI and UX.
Add screen dock modes (left/right/top/bottom), better X/Y offset control, replaced tab size with "max tabs"
This commit is contained in:
@@ -23,6 +23,7 @@ public class BagTabsClient {
|
||||
NeoForge.EVENT_BUS.addListener(BagTabsClient::clickTabs);
|
||||
NeoForge.EVENT_BUS.addListener(BagTabsClient::dragTabs);
|
||||
NeoForge.EVENT_BUS.addListener(BagTabsClient::releaseTabs);
|
||||
NeoForge.EVENT_BUS.addListener(BagTabsClient::initScreens);
|
||||
}
|
||||
|
||||
private static void registerScreens(RegisterMenuScreensEvent event) {
|
||||
@@ -51,6 +52,10 @@ public class BagTabsClient {
|
||||
BagTabOverlay.mouseDragged(event);
|
||||
}
|
||||
|
||||
private static void initScreens(ScreenEvent.Init.Post event) {
|
||||
BagTabOverlay.screenInit(event);
|
||||
}
|
||||
|
||||
private static final class BagItemColor {
|
||||
private static final int DEFAULT_TINT = 0x9E7B4F;
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -52,6 +52,17 @@ public final class DockConfigManager {
|
||||
save();
|
||||
}
|
||||
|
||||
public static void setEffectiveOffsets(String screenKey, int xOffset, int yOffset) {
|
||||
SessionSettings settings = getSessionSettings();
|
||||
if (settings.screenOverrides.containsKey(screenKey)) {
|
||||
DockSettings override = settings.screenOverrides.get(screenKey);
|
||||
settings.screenOverrides.put(screenKey, override.withXOffset(xOffset).withYOffset(yOffset));
|
||||
} else {
|
||||
settings.globalDefault = settings.globalDefault.withXOffset(xOffset).withYOffset(yOffset);
|
||||
}
|
||||
save();
|
||||
}
|
||||
|
||||
public static void clearOverride(String screenKey) {
|
||||
SessionSettings settings = getSessionSettings();
|
||||
settings.screenOverrides.remove(screenKey);
|
||||
@@ -149,19 +160,29 @@ public final class DockConfigManager {
|
||||
TOP,
|
||||
LEFT,
|
||||
RIGHT,
|
||||
FLOATING;
|
||||
SCREEN_BOTTOM,
|
||||
SCREEN_TOP,
|
||||
SCREEN_LEFT,
|
||||
SCREEN_RIGHT,
|
||||
FLOATING_HORIZONTAL,
|
||||
FLOATING_VERTICAL;
|
||||
|
||||
public DockSide next() {
|
||||
DockSide[] values = values();
|
||||
return values[(ordinal() + 1) % values.length];
|
||||
}
|
||||
|
||||
public DockSide previous() {
|
||||
DockSide[] values = values();
|
||||
return values[(ordinal() - 1 + values.length) % values.length];
|
||||
}
|
||||
}
|
||||
|
||||
public static final class DockSettings {
|
||||
private DockSide dockSide = DockSide.BOTTOM;
|
||||
private int xOffset = 0;
|
||||
private int yOffset = 0;
|
||||
private int scalePercent = 100;
|
||||
private int maxTabs = 8;
|
||||
|
||||
public DockSide dockSide() {
|
||||
return dockSide;
|
||||
@@ -175,8 +196,8 @@ public final class DockConfigManager {
|
||||
return yOffset;
|
||||
}
|
||||
|
||||
public int scalePercent() {
|
||||
return scalePercent;
|
||||
public int maxTabs() {
|
||||
return maxTabs;
|
||||
}
|
||||
|
||||
public DockSettings withDockSide(DockSide nextDockSide) {
|
||||
@@ -197,9 +218,9 @@ public final class DockConfigManager {
|
||||
return copy;
|
||||
}
|
||||
|
||||
public DockSettings withScalePercent(int nextScalePercent) {
|
||||
public DockSettings withMaxTabs(int nextMaxTabs) {
|
||||
DockSettings copy = copy();
|
||||
copy.scalePercent = Math.max(75, Math.min(150, nextScalePercent));
|
||||
copy.maxTabs = Math.max(1, Math.min(20, nextMaxTabs));
|
||||
return copy;
|
||||
}
|
||||
|
||||
@@ -208,9 +229,17 @@ public final class DockConfigManager {
|
||||
copy.dockSide = this.dockSide;
|
||||
copy.xOffset = this.xOffset;
|
||||
copy.yOffset = this.yOffset;
|
||||
copy.scalePercent = this.scalePercent;
|
||||
copy.maxTabs = this.maxTabs;
|
||||
return copy;
|
||||
}
|
||||
|
||||
private DockSettings normalize() {
|
||||
if (dockSide == null) {
|
||||
dockSide = DockSide.FLOATING_HORIZONTAL;
|
||||
}
|
||||
maxTabs = Math.max(1, Math.min(20, maxTabs));
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class SessionSettings {
|
||||
@@ -223,8 +252,11 @@ public final class DockConfigManager {
|
||||
if (globalDefault == null) {
|
||||
globalDefault = new DockSettings();
|
||||
}
|
||||
globalDefault = globalDefault.normalize();
|
||||
if (screenOverrides == null) {
|
||||
screenOverrides = new HashMap<>();
|
||||
} else {
|
||||
screenOverrides.replaceAll((key, value) -> value == null ? new DockSettings() : value.normalize());
|
||||
}
|
||||
if (rememberedPages == null) {
|
||||
rememberedPages = new HashMap<>();
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.trunksbomb.bagtabs.BagTabs;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.components.Button;
|
||||
import net.minecraft.client.gui.components.Tooltip;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
@@ -19,8 +20,8 @@ public class DockConfigScreen extends Screen {
|
||||
private Button xPlusButton;
|
||||
private Button yMinusButton;
|
||||
private Button yPlusButton;
|
||||
private Button scaleMinusButton;
|
||||
private Button scalePlusButton;
|
||||
private Button maxTabsMinusButton;
|
||||
private Button maxTabsPlusButton;
|
||||
private Button resetButton;
|
||||
|
||||
public DockConfigScreen(Screen parent) {
|
||||
@@ -49,19 +50,19 @@ public class DockConfigScreen extends Screen {
|
||||
syncLabels();
|
||||
}).bounds(centerX - 90, top + 26, 180, 20).build());
|
||||
|
||||
this.xMinusButton = this.addRenderableWidget(Button.builder(Component.literal("-"), button -> adjustX(-4))
|
||||
this.xMinusButton = this.addRenderableWidget(Button.builder(Component.literal("-"), button -> adjustX(-getOffsetStep()))
|
||||
.bounds(centerX - 90, top + 56, 20, 20).build());
|
||||
this.xPlusButton = this.addRenderableWidget(Button.builder(Component.literal("+"), button -> adjustX(4))
|
||||
this.xPlusButton = this.addRenderableWidget(Button.builder(Component.literal("+"), button -> adjustX(getOffsetStep()))
|
||||
.bounds(centerX + 70, top + 56, 20, 20).build());
|
||||
|
||||
this.yMinusButton = this.addRenderableWidget(Button.builder(Component.literal("-"), button -> adjustY(-4))
|
||||
this.yMinusButton = this.addRenderableWidget(Button.builder(Component.literal("-"), button -> adjustY(-getOffsetStep()))
|
||||
.bounds(centerX - 90, top + 82, 20, 20).build());
|
||||
this.yPlusButton = this.addRenderableWidget(Button.builder(Component.literal("+"), button -> adjustY(4))
|
||||
this.yPlusButton = this.addRenderableWidget(Button.builder(Component.literal("+"), button -> adjustY(getOffsetStep()))
|
||||
.bounds(centerX + 70, top + 82, 20, 20).build());
|
||||
|
||||
this.scaleMinusButton = this.addRenderableWidget(Button.builder(Component.literal("-"), button -> adjustScale(-5))
|
||||
this.maxTabsMinusButton = this.addRenderableWidget(Button.builder(Component.literal("-"), button -> adjustMaxTabs(-1))
|
||||
.bounds(centerX - 90, top + 108, 20, 20).build());
|
||||
this.scalePlusButton = this.addRenderableWidget(Button.builder(Component.literal("+"), button -> adjustScale(5))
|
||||
this.maxTabsPlusButton = this.addRenderableWidget(Button.builder(Component.literal("+"), button -> adjustMaxTabs(1))
|
||||
.bounds(centerX + 70, top + 108, 20, 20).build());
|
||||
|
||||
this.resetButton = this.addRenderableWidget(Button.builder(BagTabs.translation("dock.reset"), button -> {
|
||||
@@ -75,6 +76,11 @@ public class DockConfigScreen extends Screen {
|
||||
.bounds(centerX - 90, top + 164, 180, 20).build());
|
||||
|
||||
syncLabels();
|
||||
Tooltip offsetTooltip = Tooltip.create(BagTabs.translation("dock.offset_steps"));
|
||||
this.xMinusButton.setTooltip(offsetTooltip);
|
||||
this.xPlusButton.setTooltip(offsetTooltip);
|
||||
this.yMinusButton.setTooltip(offsetTooltip);
|
||||
this.yPlusButton.setTooltip(offsetTooltip);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -87,7 +93,7 @@ public class DockConfigScreen extends Screen {
|
||||
guiGraphics.drawCenteredString(this.font, this.title, centerX, top - 18, 0xFFFFFF);
|
||||
guiGraphics.drawCenteredString(this.font, Component.literal("X Offset: " + this.dockSettings.xOffset()), centerX, top + 62, 0xFFFFFF);
|
||||
guiGraphics.drawCenteredString(this.font, Component.literal("Y Offset: " + this.dockSettings.yOffset()), centerX, top + 88, 0xFFFFFF);
|
||||
guiGraphics.drawCenteredString(this.font, Component.literal("Tab Size: " + this.dockSettings.scalePercent() + "%"), centerX, top + 114, 0xFFFFFF);
|
||||
guiGraphics.drawCenteredString(this.font, Component.literal("Max Tabs: " + this.dockSettings.maxTabs()), centerX, top + 114, 0xFFFFFF);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -96,6 +102,17 @@ public class DockConfigScreen extends Screen {
|
||||
Minecraft.getInstance().setScreen(this.parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(double mouseX, double mouseY, int button) {
|
||||
if (button == 1 && this.sideButton != null && this.sideButton.isMouseOver(mouseX, mouseY)) {
|
||||
this.dockSettings = this.dockSettings.withDockSide(this.dockSettings.dockSide().previous());
|
||||
saveCurrent();
|
||||
syncLabels();
|
||||
return true;
|
||||
}
|
||||
return super.mouseClicked(mouseX, mouseY, button);
|
||||
}
|
||||
|
||||
private void adjustX(int delta) {
|
||||
this.dockSettings = this.dockSettings.withXOffset(this.dockSettings.xOffset() + delta);
|
||||
saveCurrent();
|
||||
@@ -108,12 +125,27 @@ public class DockConfigScreen extends Screen {
|
||||
syncLabels();
|
||||
}
|
||||
|
||||
private void adjustScale(int delta) {
|
||||
this.dockSettings = this.dockSettings.withScalePercent(this.dockSettings.scalePercent() + delta);
|
||||
private void adjustMaxTabs(int delta) {
|
||||
this.dockSettings = this.dockSettings.withMaxTabs(this.dockSettings.maxTabs() + delta);
|
||||
saveCurrent();
|
||||
syncLabels();
|
||||
}
|
||||
|
||||
private int getOffsetStep() {
|
||||
boolean shift = hasShiftDown();
|
||||
boolean control = hasControlDown();
|
||||
if (shift && control) {
|
||||
return 100;
|
||||
}
|
||||
if (control) {
|
||||
return 25;
|
||||
}
|
||||
if (shift) {
|
||||
return 5;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
private void syncLabels() {
|
||||
this.targetButton.setMessage(this.editOverride
|
||||
? BagTabs.translation("dock.target.override")
|
||||
|
||||
@@ -15,13 +15,19 @@
|
||||
"bagtabs.dock.target.override": "Editing: This Screen Override",
|
||||
"bagtabs.dock.x_offset": "X Offset",
|
||||
"bagtabs.dock.y_offset": "Y Offset",
|
||||
"bagtabs.dock.scale": "Tab Size",
|
||||
"bagtabs.dock.max_tabs": "Max Tabs",
|
||||
"bagtabs.dock.open": "Open dock settings",
|
||||
"bagtabs.dock.lock": "Lock tab interactions",
|
||||
"bagtabs.dock.unlock": "Unlock tab interactions",
|
||||
"bagtabs.dock.offset_steps": "Click: 1, Shift: 5, Ctrl: 25, Ctrl+Shift: 100",
|
||||
"bagtabs.dock.side.bottom": "Dock: Bottom",
|
||||
"bagtabs.dock.side.top": "Dock: Top",
|
||||
"bagtabs.dock.side.left": "Dock: Left",
|
||||
"bagtabs.dock.side.right": "Dock: Right",
|
||||
"bagtabs.dock.side.floating": "Dock: Floating"
|
||||
"bagtabs.dock.side.screen_bottom": "Dock: Screen Bottom",
|
||||
"bagtabs.dock.side.screen_top": "Dock: Screen Top",
|
||||
"bagtabs.dock.side.screen_left": "Dock: Screen Left",
|
||||
"bagtabs.dock.side.screen_right": "Dock: Screen Right",
|
||||
"bagtabs.dock.side.floating_horizontal": "Dock: Floating Horizontal",
|
||||
"bagtabs.dock.side.floating_vertical": "Dock: Floating Vertical"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user