Skip to content

Commit 300d39b

Browse files
committed
feat: now using FTB Library color selector
1 parent bd245f5 commit 300d39b

File tree

5 files changed

+112
-43
lines changed

5 files changed

+112
-43
lines changed

common/src/main/java/dev/ftb/mods/ftbchunks/client/FTBChunksClient.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
import dev.ftb.mods.ftbchunks.FTBChunks;
1919
import dev.ftb.mods.ftbchunks.FTBChunksWorldConfig;
2020
import dev.ftb.mods.ftbchunks.api.FTBChunksAPI;
21-
import dev.ftb.mods.ftbchunks.api.client.FTBChunksClientAPI;
2221
import dev.ftb.mods.ftbchunks.api.client.event.MapIconEvent;
2322
import dev.ftb.mods.ftbchunks.api.client.icon.MapIcon;
2423
import dev.ftb.mods.ftbchunks.api.client.icon.MapType;
2524
import dev.ftb.mods.ftbchunks.api.client.icon.WaypointIcon;
2625
import dev.ftb.mods.ftbchunks.api.client.waypoint.Waypoint;
26+
import dev.ftb.mods.ftbchunks.client.gui.AddWaypointOverlay;
2727
import dev.ftb.mods.ftbchunks.client.gui.ChunkScreen;
2828
import dev.ftb.mods.ftbchunks.client.gui.LargeMapScreen;
2929
import dev.ftb.mods.ftbchunks.client.gui.WaypointEditorScreen;
@@ -32,6 +32,7 @@
3232
import dev.ftb.mods.ftbchunks.client.mapicon.*;
3333
import dev.ftb.mods.ftbchunks.net.PartialPackets;
3434
import dev.ftb.mods.ftbchunks.net.SendGeneralDataPacket.GeneralChunkData;
35+
import dev.ftb.mods.ftblibrary.config.ColorConfig;
3536
import dev.ftb.mods.ftblibrary.config.StringConfig;
3637
import dev.ftb.mods.ftblibrary.config.ui.EditConfigFromStringScreen;
3738
import dev.ftb.mods.ftblibrary.config.ui.EditStringConfigOverlay;
@@ -381,7 +382,7 @@ private EventResult addQuickWaypoint() {
381382
if (player == null) return EventResult.pass();
382383

383384
return MapManager.getInstance().map(manager -> {
384-
BaseScreen screen = new WaypointAddScreen(name, manager, player);
385+
BaseScreen screen = new WaypointAddScreen(name, player);
385386
screen.openGuiLater();
386387
// later needed to prevent keypress being passed into gui
387388
return EventResult.interruptTrue();
@@ -1169,13 +1170,11 @@ public static Waypoint addWaypoint(Player player, String name, BlockPos position
11691170

11701171
private static class WaypointAddScreen extends BaseScreen {
11711172
private final StringConfig name;
1172-
private final MapManager manager;
11731173
private final Player player;
11741174

1175-
public WaypointAddScreen(StringConfig name, MapManager manager, Player player) {
1175+
public WaypointAddScreen(StringConfig name, Player player) {
11761176
super();
11771177
this.name = name;
1178-
this.manager = manager;
11791178
this.player = player;
11801179
this.setHeight(35);
11811180
}
@@ -1186,16 +1185,22 @@ public void drawBackground(GuiGraphics graphics, Theme theme, int x, int y, int
11861185

11871186
@Override
11881187
public void addWidgets() {
1189-
EditStringConfigOverlay<String> overlay = new EditStringConfigOverlay<>(this, name, set -> {
1188+
ColorConfig col = new ColorConfig();
1189+
col.setValue(Color4I.hsb(MathUtils.RAND.nextFloat(), 1F, 1F));
1190+
AddWaypointOverlay overlay = new AddWaypointOverlay(this, name, col, set -> {
11901191
if (set && !name.getValue().isEmpty()) {
1191-
Waypoint wp = addWaypoint(player, name.getValue(), player.blockPosition(), Color4I.hsb(MathUtils.RAND.nextFloat(), 1F, 1F).rgba());
1192+
Waypoint wp = addWaypoint(player, name.getValue(), player.blockPosition(), col.getValue().rgba());
11921193
Minecraft.getInstance().player.displayClientMessage(
11931194
Component.translatable("ftbchunks.waypoint_added",
11941195
Component.literal(wp.getName()).withStyle(ChatFormatting.YELLOW)
11951196
), true);
11961197
}
1197-
closeGui();
1198-
}, Component.translatable("key.ftbchunks.add_waypoint"));
1198+
}) {
1199+
@Override
1200+
public void onClosed() {
1201+
closeGui();
1202+
}
1203+
};
11991204
overlay.setWidth(this.width);
12001205
pushModalPanel(overlay);
12011206
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package dev.ftb.mods.ftbchunks.client.gui;
2+
3+
import dev.ftb.mods.ftblibrary.config.ColorConfig;
4+
import dev.ftb.mods.ftblibrary.config.ConfigCallback;
5+
import dev.ftb.mods.ftblibrary.config.ConfigFromString;
6+
import dev.ftb.mods.ftblibrary.config.ui.EditStringConfigOverlay;
7+
import dev.ftb.mods.ftblibrary.icon.Color4I;
8+
import dev.ftb.mods.ftblibrary.icon.Icon;
9+
import dev.ftb.mods.ftblibrary.ui.*;
10+
import net.minecraft.client.gui.GuiGraphics;
11+
import net.minecraft.network.chat.Component;
12+
13+
public class AddWaypointOverlay extends EditStringConfigOverlay<String> {
14+
private final ColorButton colorButton;
15+
16+
public AddWaypointOverlay(Panel panel, ConfigFromString<String> config, ColorConfig colorConfig, ConfigCallback callback) {
17+
super(panel, config, callback, Component.translatable("ftbchunks.gui.add_waypoint"));
18+
19+
colorButton = new ColorButton(colorConfig.getValue(), (btn, mb) -> {
20+
ColorSelectorPanel.popupAtMouse(getGui(), colorConfig, accepted -> {
21+
if (accepted) {
22+
btn.setIcon(colorConfig.getValue());
23+
} else {
24+
colorConfig.setValue(((ColorButton) btn).getIcon());
25+
}
26+
});
27+
});
28+
}
29+
30+
@Override
31+
public void addWidgets() {
32+
super.addWidgets();
33+
add(colorButton);
34+
}
35+
36+
@Override
37+
public void alignWidgets() {
38+
super.alignWidgets();
39+
colorButton.setPosAndSize(width - 11, 1, 10, 10);
40+
}
41+
42+
private class ColorButton extends SimpleButton {
43+
public ColorButton(Icon icon, Callback c) {
44+
super(AddWaypointOverlay.this, Component.empty(), icon, c);
45+
}
46+
47+
Color4I getIcon() {
48+
return icon instanceof Color4I c ? c : Color4I.empty();
49+
}
50+
51+
@Override
52+
public void draw(GuiGraphics graphics, Theme theme, int x, int y, int w, int h) {
53+
icon.draw(graphics, x, y, w, h);
54+
Color4I shade = getIcon().addBrightness(-0.15f);
55+
GuiHelper.drawHollowRect(graphics, x, y, w, h, shade, false);
56+
}
57+
}
58+
}

common/src/main/java/dev/ftb/mods/ftbchunks/client/gui/LargeMapScreen.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import dev.ftb.mods.ftbchunks.client.map.*;
99
import dev.ftb.mods.ftbchunks.net.TeleportFromMapPacket;
1010
import dev.ftb.mods.ftbchunks.util.HeightUtils;
11+
import dev.ftb.mods.ftblibrary.config.ColorConfig;
1112
import dev.ftb.mods.ftblibrary.config.StringConfig;
12-
import dev.ftb.mods.ftblibrary.config.ui.EditStringConfigOverlay;
1313
import dev.ftb.mods.ftblibrary.icon.Color4I;
1414
import dev.ftb.mods.ftblibrary.icon.Icon;
1515
import dev.ftb.mods.ftblibrary.icon.Icons;
@@ -223,15 +223,17 @@ public boolean mousePressed(MouseButton button) {
223223
list.add(new ContextMenuItem(Component.translatable("ftbchunks.gui.add_waypoint"), Icons.ADD, btn -> {
224224
StringConfig name = new StringConfig();
225225
name.setValue("");
226-
var overlay = new EditStringConfigOverlay<>(getGui(), name, accepted -> {
227-
if (accepted) {
228-
WaypointImpl waypoint = new WaypointImpl(WaypointType.DEFAULT, dimension, pos)
229-
.setName(name.getValue())
230-
.setColor(Color4I.hsb(MathUtils.RAND.nextFloat(), 1F, 1F).rgba());
231-
dimension.getWaypointManager().add(waypoint);
232-
refreshWidgets();
233-
}
234-
}, Component.translatable("ftbchunks.gui.add_waypoint")).atMousePosition();
226+
ColorConfig col = new ColorConfig();
227+
col.setValue(Color4I.hsb(MathUtils.RAND.nextFloat(), 1F, 1F));
228+
var overlay = new AddWaypointOverlay(getGui(), name, col, accepted -> {
229+
if (accepted) {
230+
WaypointImpl waypoint = new WaypointImpl(WaypointType.DEFAULT, dimension, pos)
231+
.setName(name.getValue())
232+
.setColor(col.getValue().rgba());
233+
dimension.getWaypointManager().add(waypoint);
234+
refreshWidgets();
235+
}
236+
}).atMousePosition();
235237
overlay.setWidth(150);
236238
overlay.setX(Math.min(overlay.getX(), getScreen().getGuiScaledWidth() - 155));
237239
getGui().pushModalPanel(overlay);
@@ -481,4 +483,5 @@ public boolean isEnabled() {
481483
return shouldDraw();
482484
}
483485
}
486+
484487
}

common/src/main/java/dev/ftb/mods/ftbchunks/client/gui/WaypointEditorScreen.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import dev.ftb.mods.ftbchunks.client.map.MapManager;
55
import dev.ftb.mods.ftbchunks.client.map.WaypointImpl;
66
import dev.ftb.mods.ftbchunks.net.TeleportFromMapPacket;
7+
import dev.ftb.mods.ftblibrary.config.ColorConfig;
78
import dev.ftb.mods.ftblibrary.config.StringConfig;
89
import dev.ftb.mods.ftblibrary.icon.Color4I;
910
import dev.ftb.mods.ftblibrary.icon.Icon;
@@ -136,7 +137,7 @@ public void alignWidgets() {
136137

137138
@Override
138139
public Theme getTheme() {
139-
return THEME;
140+
return super.getTheme();
140141
}
141142

142143
@Override
@@ -296,18 +297,18 @@ public boolean mousePressed(MouseButton button) {
296297
}));
297298
if (wp.getType().canChangeColor()) {
298299
list.add(new ContextMenuItem(Component.translatable("ftbchunks.gui.change_color"), Icons.COLOR_RGB, btn -> {
299-
int r = (wp.getColor() >> 16) & 0xFF;
300-
int g = (wp.getColor() >> 8) & 0xFF;
301-
int b = wp.getColor() & 0xFF;
302-
float[] hsb = Color.RGBtoHSB(r, g, b, new float[3]);
303-
float add = isShiftKeyDown() ? -1F/12F : 1F/12F;
304-
Color4I col = Color4I.hsb(hsb[0] + add, hsb[1], hsb[2]);
305-
wp.setColor(col.rgba());
306-
wp.refreshIcon();
307-
if (widgets.get(1) instanceof TextField tf) {
308-
tf.setColor(Color4I.rgb(wp.getColor()));
309-
}
310-
}).setCloseMenu(false));
300+
ColorConfig col = new ColorConfig();
301+
col.setValue(Color4I.rgb(wp.getColor()));
302+
ColorSelectorPanel.popupAtMouse(btn.getGui(), col, accepted -> {
303+
if (accepted) {
304+
wp.setColor(col.getValue().rgba());
305+
wp.refreshIcon();
306+
if (widgets.get(1) instanceof TextField tf) {
307+
tf.setColor(Color4I.rgb(wp.getColor()));
308+
}
309+
}
310+
});
311+
}));
311312
}
312313
if (Minecraft.getInstance().player.hasPermissions(2)) { // permissions are checked again on server!
313314
list.add(new ContextMenuItem(Component.translatable("ftbchunks.gui.teleport"), PEARL_ICON, btn -> {

common/src/main/java/dev/ftb/mods/ftbchunks/client/mapicon/WaypointMapIcon.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
import dev.ftb.mods.ftbchunks.api.client.icon.WaypointIcon;
66
import dev.ftb.mods.ftbchunks.client.gui.LargeMapScreen;
77
import dev.ftb.mods.ftbchunks.client.map.WaypointImpl;
8+
import dev.ftb.mods.ftblibrary.config.ColorConfig;
89
import dev.ftb.mods.ftblibrary.config.StringConfig;
910
import dev.ftb.mods.ftblibrary.icon.Color4I;
1011
import dev.ftb.mods.ftblibrary.icon.Icon;
1112
import dev.ftb.mods.ftblibrary.icon.Icons;
1213
import dev.ftb.mods.ftblibrary.icon.ImageIcon;
1314
import dev.ftb.mods.ftblibrary.math.MathUtils;
1415
import dev.ftb.mods.ftblibrary.ui.BaseScreen;
16+
import dev.ftb.mods.ftblibrary.ui.ColorSelectorPanel;
1517
import dev.ftb.mods.ftblibrary.ui.ContextMenuItem;
1618
import dev.ftb.mods.ftblibrary.ui.Widget;
1719
import dev.ftb.mods.ftblibrary.ui.input.Key;
@@ -109,17 +111,17 @@ private void openWPContextMenu(LargeMapScreen screen) {
109111

110112
if (waypoint.getType().canChangeColor()) {
111113
contextMenu.add(new ContextMenuItem(Component.translatable("ftbchunks.gui.change_color"), Icons.COLOR_RGB, btn -> {
112-
int r = (waypoint.getColor() >> 16) & 0xFF;
113-
int g = (waypoint.getColor() >> 8) & 0xFF;
114-
int b = waypoint.getColor() & 0xFF;
115-
float[] hsb = Color.RGBtoHSB(r, g, b, new float[3]);
116-
float add = Widget.isShiftKeyDown() ? -1F/12F : 1F/12F;
117-
Color4I col = Color4I.hsb(hsb[0] + add, hsb[1], hsb[2]);
118-
waypoint.setColor(col.rgba());
119-
icon = Color4I.empty();
120-
outsideIcon = Color4I.empty();
121-
checkIcon();
122-
}).setCloseMenu(false));
114+
ColorConfig col = new ColorConfig();
115+
col.setValue(Color4I.rgb(waypoint.getColor()));
116+
ColorSelectorPanel.popupAtMouse(btn.getGui(), col, accepted -> {
117+
if (accepted) {
118+
waypoint.setColor(col.getValue().rgba());
119+
icon = Color4I.empty();
120+
outsideIcon = Color4I.empty();
121+
checkIcon();
122+
}
123+
});
124+
}));
123125
}
124126

125127
contextMenu.add(new ContextMenuItem(Component.translatable("ftbchunks.label." + (waypoint.isHidden() ? "show" : "hide")), Icons.BEACON, b -> {

0 commit comments

Comments
 (0)