2
2
3
3
import dev .ftb .mods .ftblibrary .config .ConfigCallback ;
4
4
import dev .ftb .mods .ftblibrary .icon .Color4I ;
5
- import dev .ftb .mods .ftblibrary .ui .GuiHelper ;
6
- import dev .ftb .mods .ftblibrary .ui .Panel ;
7
- import dev .ftb .mods .ftblibrary .ui .SimpleTextButton ;
8
- import dev .ftb .mods .ftblibrary .ui .Theme ;
5
+ import dev .ftb .mods .ftblibrary .ui .*;
9
6
import dev .ftb .mods .ftblibrary .ui .input .Key ;
10
7
import dev .ftb .mods .ftblibrary .ui .input .MouseButton ;
11
8
import dev .ftb .mods .ftblibrary .ui .misc .AbstractButtonListScreen ;
23
20
24
21
import java .util .ArrayList ;
25
22
import java .util .List ;
23
+ import java .util .Objects ;
24
+ import java .util .function .Function ;
26
25
27
26
public class SelectQuestObjectScreen <T extends QuestObjectBase > extends AbstractButtonListScreen {
28
27
private final ConfigQuestObject <T > config ;
29
28
private final ConfigCallback callback ;
29
+ private Function <T ,Component > formatter = ConfigQuestObject ::formatEntry ;
30
30
31
31
public SelectQuestObjectScreen (ConfigQuestObject <T > config , ConfigCallback callback ) {
32
32
setTitle (Component .translatable ("ftbquests.gui.select_quest_object" ));
@@ -40,6 +40,11 @@ public SelectQuestObjectScreen(ConfigQuestObject<T> config, ConfigCallback callb
40
40
this .callback = callback ;
41
41
}
42
42
43
+ public SelectQuestObjectScreen <T > withFormatter (@ Nullable Function <T ,Component > formatter ) {
44
+ this .formatter = Objects .requireNonNullElse (formatter , ConfigQuestObject ::formatEntry );
45
+ return this ;
46
+ }
47
+
43
48
@ Override
44
49
public boolean onClosedByKey (Key key ) {
45
50
if (super .onClosedByKey (key )) {
@@ -82,6 +87,15 @@ public void addButtons(Panel panel) {
82
87
for (T objectBase : list ) {
83
88
panel .add (new QuestObjectButton (panel , objectBase ));
84
89
}
90
+
91
+ int width = panel .getWidgets ().stream ().map (Widget ::getWidth ).max (Integer ::compare ).orElse (200 );
92
+ panel .getWidgets ().forEach (w -> w .setWidth (width ));
93
+ }
94
+
95
+ @ Override
96
+ public boolean onInit () {
97
+ setWidth (mainPanel .getWidgets ().isEmpty () ? 200 : mainPanel .getWidgets ().getFirst ().width + 20 );
98
+ return super .onInit ();
85
99
}
86
100
87
101
@ Override
@@ -97,14 +111,20 @@ protected void doAccept() {
97
111
private class QuestObjectButton extends SimpleTextButton {
98
112
public final T object ;
99
113
100
- public QuestObjectButton (Panel panel , @ Nullable T o ) {
101
- super (panel , o == null ? Component .translatable ("ftbquests.null" ) : o .getMutableTitle ().withStyle (o .getObjectType ().getColor ()), o == null ? Color4I .empty () : o .getIcon ());
102
- object = o ;
103
- setSize (200 , 14 );
114
+ public QuestObjectButton (Panel panel , @ Nullable T questObject ) {
115
+ super (panel ,
116
+ questObject == null ? Component .translatable ("ftbquests.null" ) : formatter .apply (questObject ),
117
+ questObject == null ? Color4I .empty () : questObject .getIcon ()
118
+ );
119
+ object = questObject ;
120
+ setHeight (getTheme ().getFontHeight () + 4 );
104
121
}
105
122
106
123
private void addObject (TooltipList list , QuestObjectBase o ) {
107
- list .add (QuestObjectType .NAME_MAP .getDisplayName (o .getObjectType ()).copy ().withStyle (ChatFormatting .GRAY ).append (": " ).append (o .getMutableTitle ().withStyle (o .getObjectType ().getColor ())));
124
+ list .add (QuestObjectType .NAME_MAP .getDisplayName (o .getObjectType ()).copy ().withStyle (ChatFormatting .GRAY )
125
+ .append (": " )
126
+ .append (o .getMutableTitle ().withStyle (o .getObjectType ().getColor ()))
127
+ );
108
128
}
109
129
110
130
@ Override
@@ -114,30 +134,36 @@ public void addMouseOverText(TooltipList list) {
114
134
}
115
135
116
136
list .add (object .getTitle ());
117
- list .add (Component .literal ("ID: " ).withStyle (ChatFormatting .GRAY ).append (Component .literal (object .toString ()).withStyle (ChatFormatting .DARK_GRAY )));
118
- list .add (Component .literal ("Type: " ).withStyle (ChatFormatting .GRAY ).append (QuestObjectType .NAME_MAP .getDisplayName (object .getObjectType ()).copy ().withStyle (object .getObjectType ().getColor ())));
119
-
120
- if (object instanceof Quest quest ) {
121
- addObject (list , quest .getChapter ());
122
- addRewardTooltip (list , quest );
123
- } else if (object instanceof QuestLink link ) {
124
- link .getQuest ().ifPresent (quest -> {
125
- addObject (list , link .getChapter ());
126
- list .add (Component .translatable ("ftbquests.gui.linked_quest_id" , Component .literal (quest .getCodeString ()).withStyle (ChatFormatting .DARK_GRAY )).withStyle (ChatFormatting .GRAY ));
127
- addObject (list , quest .getChapter ());
128
- });
129
- } else if (object instanceof Task task ) {
130
- Quest quest = task .getQuest ();
131
- addObject (list , quest .getChapter ());
132
- addObject (list , quest );
133
- addRewardTooltip (list , quest );
134
- } else if (object instanceof Reward reward ) {
135
- Quest quest = reward .getQuest ();
136
- addObject (list , quest .getChapter ());
137
- addObject (list , quest );
138
- } else if (object instanceof RewardTable rewardTable ) {
139
- rewardTable .addMouseOverText (list , true , true );
140
- }
137
+ list .add (Component .literal ("ID: " ).withStyle (ChatFormatting .GRAY )
138
+ .append (Component .literal (object .toString ()).withStyle (ChatFormatting .DARK_GRAY )));
139
+ list .add (Component .literal ("Type: " ).withStyle (ChatFormatting .GRAY )
140
+ .append (QuestObjectType .NAME_MAP .getDisplayName (object .getObjectType ()).copy ().withStyle (object .getObjectType ().getColor ())));
141
+
142
+ switch (object ) {
143
+ case Quest quest -> {
144
+ addObject (list , quest .getChapter ());
145
+ addRewardTooltip (list , quest );
146
+ }
147
+ case QuestLink link -> link .getQuest ().ifPresent (quest -> {
148
+ addObject (list , link .getChapter ());
149
+ list .add (Component .translatable ("ftbquests.gui.linked_quest_id" , Component .literal (quest .getCodeString ()).withStyle (ChatFormatting .DARK_GRAY )).withStyle (ChatFormatting .GRAY ));
150
+ addObject (list , quest .getChapter ());
151
+ });
152
+ case Task task -> {
153
+ Quest quest = task .getQuest ();
154
+ addObject (list , quest .getChapter ());
155
+ addObject (list , quest );
156
+ addRewardTooltip (list , quest );
157
+ }
158
+ case Reward reward -> {
159
+ Quest quest = reward .getQuest ();
160
+ addObject (list , quest .getChapter ());
161
+ addObject (list , quest );
162
+ }
163
+ case RewardTable rewardTable -> rewardTable .addMouseOverText (list , true , true );
164
+ default -> {
165
+ }
166
+ }
141
167
}
142
168
143
169
private void addRewardTooltip (TooltipList list , Quest quest ) {
0 commit comments