Skip to content
This repository was archived by the owner on Nov 28, 2025. It is now read-only.

Commit a5133e5

Browse files
committed
add profile import/export buttons
1 parent b7e6eb3 commit a5133e5

File tree

9 files changed

+245
-56
lines changed

9 files changed

+245
-56
lines changed

1.16_combat-6/src/main/java/io/github/axolotlclient/config/screen/ProfilesScreen.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,21 +114,22 @@ public List<? extends Element> children() {
114114

115115
@Environment(EnvType.CLIENT)
116116
public class ProfileEntry extends Entry {
117+
private static final Text EXPORT_BUTTON_TITLE = new TranslatableText("profiles.profile.export");
117118
private static final Text CURRENT_TEXT = new TranslatableText("profiles.profile.current");
118119
private static final Text LOAD_BUTTON_TITLE = new TranslatableText("profiles.profile.load");
119120
private static final Text DUPLICATE_BUTTON_TITLE = new TranslatableText("profiles.profile.duplicate");
120121
private static final Text REMOVE_BUTTON_TITLE = new TranslatableText("profiles.profile.remove");
121122
private final TextFieldWidget profileName;
122-
private final ButtonWidget loadButton;
123-
private final ButtonWidget duplicateButton;
124-
private final ButtonWidget removeButton;
123+
private final ButtonWidget exportButton, loadButton, duplicateButton, removeButton;
125124
private final Profiles.Profile profile;
126125

127126
ProfileEntry(Profiles.Profile profile) {
128127
this.profile = profile;
129128
profileName = new TextFieldWidget(textRenderer, 0, 0, 150, 20, LiteralText.EMPTY);
130129
profileName.setText(profile.name());
131130
profileName.setChangedListener(profile::setName);
131+
exportButton = new ButtonWidget(0, 0, 50, 20, EXPORT_BUTTON_TITLE, btn ->
132+
Profiles.getInstance().exportProfile(profile));
132133
loadButton = new ButtonWidget(0, 0, 50, 20, LOAD_BUTTON_TITLE, btn ->
133134
Profiles.getInstance().switchTo(profile));
134135
duplicateButton = new ButtonWidget(0, 0, 50, 20, DUPLICATE_BUTTON_TITLE, b -> {
@@ -165,6 +166,10 @@ public void render(MatrixStack guiGraphics, int index, int top, int left, int wi
165166
this.loadButton.x = i;
166167
loadButton.y = j;
167168
this.loadButton.render(guiGraphics, mouseX, mouseY, partialTick);
169+
i -= exportButton.getWidth();
170+
exportButton.x = i;
171+
exportButton.y = j;
172+
exportButton.render(guiGraphics, mouseX, mouseY, partialTick);
168173
profileName.setWidth(i - left - 4);
169174
profileName.x = left;
170175
profileName.y = j;
@@ -179,7 +184,7 @@ public List<? extends Element> children() {
179184

180185
public class NewEntry extends Entry {
181186

182-
private final ButtonWidget addButton;
187+
private final ButtonWidget addButton, importButton;
183188

184189
public NewEntry() {
185190
this.addButton = new ButtonWidget(0, 0, 150, 20, new TranslatableText("profiles.profile.add"), button -> {
@@ -188,20 +193,25 @@ public NewEntry() {
188193
Profiles.getInstance().saveProfiles();
189194
setScrollAmount(Math.max(0, getMaxPosition() - (bottom - top - 4)));
190195
});
196+
this.importButton = new ButtonWidget(0, 0, 150, 20, new TranslatableText("profiles.profile.import"), btn ->
197+
Profiles.getInstance().importProfiles().thenRun(ProfilesList.this::reload));
191198
}
192199

193200
@Override
194201
public void render(MatrixStack guiGraphics, int index, int top, int left, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTick) {
195-
int i = getScrollbarPositionX() - width / 2 - 10 - addButton.getWidth() / 2;
202+
int i = getScrollbarPositionX() - width / 2 - 10 - addButton.getWidth() + 2;
196203
int j = top - 2;
197204
this.addButton.x = i;
198205
addButton.y = j;
199206
this.addButton.render(guiGraphics, mouseX, mouseY, partialTick);
207+
this.importButton.x = addButton.x + addButton.getWidth() + 2;
208+
this.importButton.y = j;
209+
this.importButton.render(guiGraphics, mouseX, mouseY, partialTick);
200210
}
201211

202212
@Override
203213
public List<? extends Element> children() {
204-
return List.of(addButton);
214+
return List.of(addButton, importButton);
205215
}
206216
}
207217
}

1.20/src/main/java/io/github/axolotlclient/config/screen/ProfilesScreen.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141

4242
public class ProfilesScreen extends Screen {
4343

44-
private ProfilesList profilesList;
4544
private final Screen parent;
4645

4746
public ProfilesScreen(Screen parent) {
@@ -59,7 +58,7 @@ public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
5958
@Override
6059
protected void init() {
6160

62-
profilesList = addDrawableChild(new ProfilesList(client, width, height, 33, height - 33, 25));
61+
addDrawableChild(new ProfilesList(client, width, height, 33, height - 33, 25));
6362

6463
addDrawableChild(ButtonWidget.builder(CommonTexts.BACK, btn -> closeScreen())
6564
.positionAndSize(width / 2 - 75, height - 33 / 2 - 10, 150, 20).build());
@@ -129,21 +128,22 @@ public List<? extends Element> children() {
129128

130129
@Environment(EnvType.CLIENT)
131130
public class ProfileEntry extends Entry {
131+
private static final Text EXPORT_BUTTON_TITLE = Text.translatable("profiles.profile.export");
132132
private static final Text CURRENT_TEXT = Text.translatable("profiles.profile.current");
133133
private static final Text LOAD_BUTTON_TITLE = Text.translatable("profiles.profile.load");
134134
private static final Text DUPLICATE_BUTTON_TITLE = Text.translatable("profiles.profile.duplicate");
135135
private static final Text REMOVE_BUTTON_TITLE = Text.translatable("profiles.profile.remove");
136136
private final TextFieldWidget profileName;
137-
private final ButtonWidget loadButton;
138-
private final ButtonWidget duplicateButton;
139-
private final ButtonWidget removeButton;
137+
private final ButtonWidget exportButton, loadButton, duplicateButton, removeButton;
140138
private final Profiles.Profile profile;
141139

142140
ProfileEntry(Profiles.Profile profile) {
143141
this.profile = profile;
144142
profileName = new TextFieldWidget(textRenderer, 0, 0, 150, 20, Text.empty());
145143
profileName.setText(profile.name());
146144
profileName.setChangedListener(profile::setName);
145+
exportButton = ButtonWidget.builder(EXPORT_BUTTON_TITLE, btn -> Profiles.getInstance().exportProfile(profile))
146+
.positionAndSize(0, 0, 50, 20).build();
147147
loadButton = ButtonWidget.builder(LOAD_BUTTON_TITLE, btn ->
148148
Profiles.getInstance().switchTo(profile)).positionAndSize(0, 0, 50, 20).build();
149149
duplicateButton = ButtonWidget.builder(DUPLICATE_BUTTON_TITLE, b -> {
@@ -178,25 +178,28 @@ public void render(GuiGraphics guiGraphics, int index, int top, int left, int wi
178178
i -= loadButton.getWidth();
179179
this.loadButton.setPosition(i, j);
180180
this.loadButton.render(guiGraphics, mouseX, mouseY, partialTick);
181+
i -= exportButton.getWidth();
182+
exportButton.setPosition(i, j);
183+
exportButton.render(guiGraphics, mouseX, mouseY, partialTick);
181184
profileName.setWidth(i - left - 4);
182185
profileName.setPosition(left, j);
183186
profileName.render(guiGraphics, mouseX, mouseY, partialTick);
184187
}
185188

186189
@Override
187190
public List<? extends Element> children() {
188-
return List.of(profileName, this.loadButton, duplicateButton, removeButton);
191+
return List.of(profileName, exportButton, this.loadButton, duplicateButton, removeButton);
189192
}
190193

191194
@Override
192195
public List<? extends Selectable> selectableChildren() {
193-
return List.of(profileName, this.loadButton, duplicateButton, removeButton);
196+
return List.of(profileName, exportButton, this.loadButton, duplicateButton, removeButton);
194197
}
195198
}
196199

197200
public class NewEntry extends Entry {
198201

199-
private final ButtonWidget addButton;
202+
private final ButtonWidget addButton, importButton;
200203

201204
public NewEntry() {
202205
this.addButton = ButtonWidget.builder(Text.translatable("profiles.profile.add"), button -> {
@@ -206,6 +209,8 @@ public NewEntry() {
206209
setScrollAmount(getMaxScroll());
207210
}).positionAndSize(0, 0, 150, 20)
208211
.build();
212+
this.importButton = ButtonWidget.builder(Text.translatable("profiles.profile.import"), btn ->
213+
Profiles.getInstance().importProfiles().thenRun(ProfilesList.this::reload)).build();
209214
}
210215

211216
@Override
@@ -215,15 +220,17 @@ public List<? extends Selectable> selectableChildren() {
215220

216221
@Override
217222
public void render(GuiGraphics guiGraphics, int index, int top, int left, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTick) {
218-
int i = getScrollbarPositionX() - width / 2 - 10 - addButton.getWidth() / 2;
223+
int i = getScrollbarPositionX() - width / 2 - 10 - addButton.getWidth() + 2;
219224
int j = top - 2;
220225
this.addButton.setPosition(i, j);
221226
this.addButton.render(guiGraphics, mouseX, mouseY, partialTick);
227+
this.importButton.setPosition(addButton.getX()+addButton.getWidth() + 2, j);
228+
this.importButton.render(guiGraphics, mouseX, mouseY, partialTick);
222229
}
223230

224231
@Override
225232
public List<? extends Element> children() {
226-
return List.of(addButton);
233+
return List.of(addButton, importButton);
227234
}
228235
}
229236
}

1.21.7/src/main/java/io/github/axolotlclient/config/screen/ProfilesScreen.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,21 +143,22 @@ public ComponentPath nextFocusPath(FocusNavigationEvent event) {
143143

144144
@Environment(EnvType.CLIENT)
145145
public class ProfileEntry extends Entry {
146+
private static final Component EXPORT_BUTTON_TITLE = Component.translatable("profiles.profile.export");
146147
private static final Component CURRENT_TEXT = Component.translatable("profiles.profile.current");
147148
private static final Component LOAD_BUTTON_TITLE = Component.translatable("profiles.profile.load");
148149
private static final Component DUPLICATE_BUTTON_TITLE = Component.translatable("profiles.profile.duplicate");
149150
private static final Component REMOVE_BUTTON_TITLE = Component.translatable("profiles.profile.remove");
150151
private final EditBox profileName;
151-
private final Button loadButton;
152-
private final Button duplicateButton;
153-
private final Button removeButton;
152+
private final Button exportButton, loadButton, duplicateButton, removeButton;
154153
private final Profiles.Profile profile;
155154

156155
ProfileEntry(Profiles.Profile profile) {
157156
this.profile = profile;
158157
profileName = new EditBox(getFont(), 0, 0, 150, 20, Component.empty());
159158
profileName.setValue(profile.name());
160159
profileName.setResponder(profile::setName);
160+
exportButton = Button.builder(EXPORT_BUTTON_TITLE, btn -> Profiles.getInstance().exportProfile(profile))
161+
.bounds(0, 0, 50, 20).build();
161162
loadButton = Button.builder(LOAD_BUTTON_TITLE, btn ->
162163
Profiles.getInstance().switchTo(profile)).bounds(0, 0, 50, 20).build();
163164
duplicateButton = Button.builder(DUPLICATE_BUTTON_TITLE, b -> {
@@ -192,25 +193,28 @@ public void render(GuiGraphics guiGraphics, int index, int top, int left, int wi
192193
i -= loadButton.getWidth();
193194
this.loadButton.setPosition(i, j);
194195
this.loadButton.render(guiGraphics, mouseX, mouseY, partialTick);
196+
i -= exportButton.getWidth();
197+
exportButton.setPosition(i, j);
198+
exportButton.render(guiGraphics, mouseX, mouseY, partialTick);
195199
profileName.setWidth(i - left - 4);
196200
profileName.setPosition(left, j);
197201
profileName.render(guiGraphics, mouseX, mouseY, partialTick);
198202
}
199203

200204
@Override
201205
public List<? extends GuiEventListener> children() {
202-
return List.of(profileName, this.loadButton, duplicateButton, removeButton);
206+
return List.of(profileName, exportButton, this.loadButton, duplicateButton, removeButton);
203207
}
204208

205209
@Override
206210
public List<? extends NarratableEntry> narratables() {
207-
return List.of(profileName, this.loadButton, duplicateButton, removeButton);
211+
return List.of(profileName, exportButton, this.loadButton, duplicateButton, removeButton);
208212
}
209213
}
210214

211215
public class NewEntry extends Entry {
212216

213-
private final Button addButton;
217+
private final Button addButton, importButton;
214218

215219
public NewEntry() {
216220
this.addButton = Button.builder(Component.translatable("profiles.profile.add"), button -> {
@@ -220,6 +224,8 @@ public NewEntry() {
220224
setScrollAmount(maxScrollAmount());
221225
}).bounds(0, 0, 150, 20)
222226
.build();
227+
this.importButton = Button.builder(Component.translatable("profiles.profile.import"), btn ->
228+
Profiles.getInstance().importProfiles().thenRun(ProfilesList.this::reload)).build();
223229
}
224230

225231
@Override
@@ -229,15 +235,17 @@ public List<? extends NarratableEntry> narratables() {
229235

230236
@Override
231237
public void render(GuiGraphics guiGraphics, int index, int top, int left, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTick) {
232-
int i = scrollBarX() - width / 2 - 10 - addButton.getWidth() / 2;
238+
int i = scrollBarX() - width / 2 - 10 - addButton.getWidth() + 2;
233239
int j = top - 2;
234240
this.addButton.setPosition(i, j);
235241
this.addButton.render(guiGraphics, mouseX, mouseY, partialTick);
242+
this.importButton.setPosition(addButton.getRight() + 2, j);
243+
this.importButton.render(guiGraphics, mouseX, mouseY, partialTick);
236244
}
237245

238246
@Override
239247
public List<? extends GuiEventListener> children() {
240-
return List.of(addButton);
248+
return List.of(addButton, importButton);
241249
}
242250
}
243251
}

1.21/src/main/java/io/github/axolotlclient/config/screen/ProfilesScreen.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -134,21 +134,22 @@ public List<? extends Element> children() {
134134

135135
@Environment(EnvType.CLIENT)
136136
public class ProfileEntry extends Entry {
137+
private static final Text EXPORT_BUTTON_TITLE = Text.translatable("profiles.profile.export");
137138
private static final Text CURRENT_TEXT = Text.translatable("profiles.profile.current");
138139
private static final Text LOAD_BUTTON_TITLE = Text.translatable("profiles.profile.load");
139140
private static final Text DUPLICATE_BUTTON_TITLE = Text.translatable("profiles.profile.duplicate");
140141
private static final Text REMOVE_BUTTON_TITLE = Text.translatable("profiles.profile.remove");
141142
private final TextFieldWidget profileName;
142-
private final ButtonWidget loadButton;
143-
private final ButtonWidget duplicateButton;
144-
private final ButtonWidget removeButton;
143+
private final ButtonWidget exportButton, loadButton, duplicateButton, removeButton;
145144
private final Profiles.Profile profile;
146145

147146
ProfileEntry(Profiles.Profile profile) {
148147
this.profile = profile;
149148
profileName = new TextFieldWidget(textRenderer, 0, 0, 150, 20, Text.empty());
150149
profileName.setText(profile.name());
151150
profileName.setChangedListener(profile::setName);
151+
exportButton = ButtonWidget.builder(EXPORT_BUTTON_TITLE, btn -> Profiles.getInstance().exportProfile(profile))
152+
.positionAndSize(0, 0, 50, 20).build();
152153
loadButton = ButtonWidget.builder(LOAD_BUTTON_TITLE, btn ->
153154
Profiles.getInstance().switchTo(profile)).positionAndSize(0, 0, 50, 20).build();
154155
duplicateButton = ButtonWidget.builder(DUPLICATE_BUTTON_TITLE, b -> {
@@ -183,25 +184,28 @@ public void render(GuiGraphics guiGraphics, int index, int top, int left, int wi
183184
i -= loadButton.getWidth();
184185
this.loadButton.setPosition(i, j);
185186
this.loadButton.render(guiGraphics, mouseX, mouseY, partialTick);
187+
i -= exportButton.getWidth();
188+
exportButton.setPosition(i, j);
189+
exportButton.render(guiGraphics, mouseX, mouseY, partialTick);
186190
profileName.setWidth(i - left - 4);
187191
profileName.setPosition(left, j);
188192
profileName.render(guiGraphics, mouseX, mouseY, partialTick);
189193
}
190194

191195
@Override
192196
public List<? extends Element> children() {
193-
return List.of(profileName, this.loadButton, duplicateButton, removeButton);
197+
return List.of(profileName, exportButton, this.loadButton, duplicateButton, removeButton);
194198
}
195199

196200
@Override
197201
public List<? extends Selectable> selectableChildren() {
198-
return List.of(profileName, this.loadButton, duplicateButton, removeButton);
202+
return List.of(profileName, exportButton, this.loadButton, duplicateButton, removeButton);
199203
}
200204
}
201205

202206
public class NewEntry extends Entry {
203207

204-
private final ButtonWidget addButton;
208+
private final ButtonWidget addButton, importButton;
205209

206210
public NewEntry() {
207211
this.addButton = ButtonWidget.builder(Text.translatable("profiles.profile.add"), button -> {
@@ -211,6 +215,8 @@ public NewEntry() {
211215
setScrollAmount(getMaxScroll());
212216
}).positionAndSize(0, 0, 150, 20)
213217
.build();
218+
this.importButton = ButtonWidget.builder(Text.translatable("profiles.profile.import"), btn ->
219+
Profiles.getInstance().importProfiles().thenRun(ProfilesList.this::reload)).build();
214220
}
215221

216222
@Override
@@ -220,15 +226,17 @@ public List<? extends Selectable> selectableChildren() {
220226

221227
@Override
222228
public void render(GuiGraphics guiGraphics, int index, int top, int left, int width, int height, int mouseX, int mouseY, boolean hovering, float partialTick) {
223-
int i = getScrollbarPositionX() - width / 2 - 10 - addButton.getWidth() / 2;
229+
int i = getScrollbarPositionX() - width / 2 - 10 - addButton.getWidth() + 2;
224230
int j = top - 2;
225231
this.addButton.setPosition(i, j);
226232
this.addButton.render(guiGraphics, mouseX, mouseY, partialTick);
233+
this.importButton.setPosition(addButton.getXEnd() + 2, j);
234+
this.importButton.render(guiGraphics, mouseX, mouseY, partialTick);
227235
}
228236

229237
@Override
230238
public List<? extends Element> children() {
231-
return List.of(addButton);
239+
return List.of(addButton, importButton);
232240
}
233241
}
234242
}

0 commit comments

Comments
 (0)