Skip to content

Commit 893f10f

Browse files
committed
feat: add output format config
1 parent 3b05d53 commit 893f10f

13 files changed

Lines changed: 510 additions & 226 deletions

File tree

src/client/java/org/damon233/performtrackermod/config/ClothConfigScreen.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import net.fabricmc.api.Environment;
88
import net.minecraft.client.gui.screen.Screen;
99
import net.minecraft.text.Text;
10+
import java.util.List;
1011
import java.util.Optional;
1112

1213
public class ClothConfigScreen {
@@ -39,19 +40,28 @@ public static Screen createConfigScreen(Screen parent) {
3940
.build());
4041

4142
general.addEntry(entryBuilder.startBooleanToggle(
42-
Text.translatable("performtracker.config.csv_enabled"),
43-
ConfigAccess.isCsvEnabled())
43+
Text.translatable("performtracker.config.export_enabled"),
44+
ConfigAccess.isExportEnabled())
4445
.setDefaultValue(true)
45-
.setTooltip(Text.translatable("performtracker.config.csv_enabled.tooltip"))
46-
.setSaveConsumer(ConfigAccess::setCsvEnabled)
46+
.setTooltip(Text.translatable("performtracker.config.export_enabled.tooltip"))
47+
.setSaveConsumer(ConfigAccess::setExportEnabled)
48+
.build());
49+
50+
general.addEntry(entryBuilder.startSelector(
51+
Text.translatable("performtracker.config.output_format"),
52+
new String[]{"csv", "json", "yaml"},
53+
ConfigAccess.getOutputFormat())
54+
.setDefaultValue("csv")
55+
.setTooltip(Text.translatable("performtracker.config.output_format.tooltip"))
56+
.setSaveConsumer(ConfigAccess::setOutputFormat)
4757
.build());
4858

4959
general.addEntry(entryBuilder.startTextField(
50-
Text.translatable("performtracker.config.csv_directory"),
51-
ConfigAccess.getCsvDirectory())
60+
Text.translatable("performtracker.config.export_directory"),
61+
ConfigAccess.getExportDirectory())
5262
.setDefaultValue("performance_data")
53-
.setTooltip(Text.translatable("performtracker.config.csv_directory.tooltip"))
54-
.setSaveConsumer(ConfigAccess::setCsvDirectory)
63+
.setTooltip(Text.translatable("performtracker.config.export_directory.tooltip"))
64+
.setSaveConsumer(ConfigAccess::setExportDirectory)
5565
.build());
5666

5767
general.addEntry(entryBuilder.startBooleanToggle(

src/main/java/org/damon233/performtrackermod/command/PtrackerCommand.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ private enum ConfigType {
3131
v -> ConfigAccess.setChatEnabled((Boolean) v),
3232
(Supplier<Object>) ConfigAccess::getDefaultChatEnabled),
3333

34-
BOOL2("csv_enabled", "performtracker.config.csv_enabled", true,
35-
(Supplier<Object>) ConfigAccess::isCsvEnabled,
36-
v -> ConfigAccess.setCsvEnabled((Boolean) v),
37-
(Supplier<Object>) ConfigAccess::getDefaultCsvEnabled),
38-
39-
STRING("csv_directory", "performtracker.config.csv_directory", "performance_data",
40-
(Supplier<Object>) ConfigAccess::getCsvDirectory,
41-
v -> ConfigAccess.setCsvDirectory((String) v),
42-
(Supplier<Object>) ConfigAccess::getDefaultCsvDirectory),
34+
BOOL2("export_enabled", "performtracker.config.export_enabled", true,
35+
(Supplier<Object>) ConfigAccess::isExportEnabled,
36+
v -> ConfigAccess.setExportEnabled((Boolean) v),
37+
(Supplier<Object>) ConfigAccess::getDefaultExportEnabled),
38+
39+
STRING("export_directory", "performtracker.config.export_directory", "performance_data",
40+
(Supplier<Object>) ConfigAccess::getExportDirectory,
41+
v -> ConfigAccess.setExportDirectory((String) v),
42+
(Supplier<Object>) ConfigAccess::getDefaultExportDirectory),
4343

4444
BOOL3("network_enabled", "performtracker.config.network_enabled", false,
4545
(Supplier<Object>) ConfigAccess::isNetworkEnabled,
@@ -50,7 +50,12 @@ private enum ConfigType {
5050
(Supplier<Object>) ConfigAccess::getNetworkEndpoint,
5151
v -> ConfigAccess.setNetworkEndpoint((String) v),
5252
(Supplier<Object>) ConfigAccess::getDefaultNetworkEndpoint),
53-
53+
54+
STRING3("output_format", "performtracker.config.output_format", "csv",
55+
(Supplier<Object>) ConfigAccess::getOutputFormat,
56+
v -> ConfigAccess.setOutputFormat((String) v),
57+
(Supplier<Object>) ConfigAccess::getDefaultOutputFormat),
58+
5459
BOOL4("collect_fps", "performtracker.config.collect_fps", true,
5560
(Supplier<Object>) ConfigAccess::isCollectFps,
5661
v -> ConfigAccess.setCollectFps((Boolean) v),
@@ -133,7 +138,7 @@ public static void register() {
133138
}
134139
try {
135140
c.start(ctx.getSource().getServer());
136-
ctx.getSource().sendFeedback(() -> Text.translatable("performtracker.start.success", c.getCsvFilePath()), false);
141+
ctx.getSource().sendFeedback(() -> Text.translatable("performtracker.start.success", c.getExportFilePath()), false);
137142
return 1;
138143
} catch (IllegalStateException e) {
139144
ctx.getSource().sendFeedback(() -> Text.translatable(e.getMessage().contains("already") ? "performtracker.error.already_running" : "performtracker.error.not_initialized"), false);
@@ -177,6 +182,10 @@ public static void register() {
177182
ctx.getSource().sendFeedback(() -> Text.translatable("performtracker.config.network_endpoint.error"), false);
178183
return 0;
179184
}
185+
if (cfg == ConfigType.STRING3 && !ConfigAccess.isValidOutputFormat(val)) {
186+
ctx.getSource().sendFeedback(() -> Text.translatable("performtracker.config.output_format.error"), false);
187+
return 0;
188+
}
180189
cfg.setter.accept(val);
181190
cfg.sendSuccess(ctx.getSource(), cfg.getter.get());
182191
return 1;

src/main/java/org/damon233/performtrackermod/config/ConfigAccess.java

Lines changed: 57 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ public class ConfigAccess {
2121

2222
private static final int DEFAULT_OUTPUT_INTERVAL_SECONDS = 5;
2323
private static final boolean DEFAULT_CHAT_ENABLED = true;
24-
private static final boolean DEFAULT_CSV_ENABLED = true;
25-
private static final String DEFAULT_CSV_DIRECTORY = "performance_data";
24+
private static final boolean DEFAULT_EXPORT_ENABLED = true;
25+
private static final String DEFAULT_EXPORT_DIRECTORY = "performance_data";
26+
private static final String DEFAULT_OUTPUT_FORMAT = "csv";
2627
private static final boolean DEFAULT_NETWORK_ENABLED = false;
2728
private static final String DEFAULT_NETWORK_ENDPOINT = "http://localhost:31415";
2829
private static final String API_PATH = "/api/metrics";
@@ -42,8 +43,9 @@ public class ConfigAccess {
4243
private static class ConfigData {
4344
int outputIntervalSeconds = DEFAULT_OUTPUT_INTERVAL_SECONDS;
4445
boolean chatEnabled = DEFAULT_CHAT_ENABLED;
45-
boolean csvEnabled = DEFAULT_CSV_ENABLED;
46-
String csvDirectory = DEFAULT_CSV_DIRECTORY;
46+
boolean exportEnabled = DEFAULT_EXPORT_ENABLED;
47+
String exportDirectory = DEFAULT_EXPORT_DIRECTORY;
48+
String outputFormat = DEFAULT_OUTPUT_FORMAT;
4749
boolean networkEnabled = DEFAULT_NETWORK_ENABLED;
4850
String networkEndpoint = DEFAULT_NETWORK_ENDPOINT;
4951
boolean collectFps = DEFAULT_COLLECT_FPS;
@@ -71,11 +73,16 @@ public static void init() {
7173
if (configData.networkEndpoint == null) {
7274
configData.networkEndpoint = DEFAULT_NETWORK_ENDPOINT;
7375
}
76+
if (!isValidOutputFormat(configData.outputFormat)) {
77+
LOGGER.warn("Invalid outputFormat '{}' in config, falling back to csv", configData.outputFormat);
78+
configData.outputFormat = DEFAULT_OUTPUT_FORMAT;
79+
save();
80+
}
7481
LOGGER.info("Loaded config from {}", configFilePath);
7582
return;
7683
}
77-
} catch (IOException e) {
78-
LOGGER.error("Failed to read config file", e);
84+
} catch (Exception e) {
85+
LOGGER.error("Failed to read or parse config file, falling back to defaults", e);
7986
}
8087
}
8188

@@ -107,12 +114,12 @@ public static boolean isChatEnabled() {
107114
return configData != null ? configData.chatEnabled : DEFAULT_CHAT_ENABLED;
108115
}
109116

110-
public static boolean isCsvEnabled() {
111-
return configData != null ? configData.csvEnabled : DEFAULT_CSV_ENABLED;
117+
public static boolean isExportEnabled() {
118+
return configData != null ? configData.exportEnabled : DEFAULT_EXPORT_ENABLED;
112119
}
113120

114-
public static String getCsvDirectory() {
115-
return configData != null ? configData.csvDirectory : DEFAULT_CSV_DIRECTORY;
121+
public static String getExportDirectory() {
122+
return configData != null ? configData.exportDirectory : DEFAULT_EXPORT_DIRECTORY;
116123
}
117124

118125
public static boolean isNetworkEnabled() {
@@ -181,20 +188,45 @@ public static void setChatEnabled(boolean enabled) {
181188
}
182189
}
183190

184-
public static void setCsvEnabled(boolean enabled) {
191+
public static void setExportEnabled(boolean enabled) {
185192
if (configData != null) {
186-
configData.csvEnabled = enabled;
193+
configData.exportEnabled = enabled;
187194
save();
188195
}
189196
}
190197

191-
public static void setCsvDirectory(String directory) {
198+
public static void setExportDirectory(String directory) {
192199
if (configData != null) {
193-
configData.csvDirectory = (directory != null && !directory.isBlank()) ? directory : DEFAULT_CSV_DIRECTORY;
200+
configData.exportDirectory = (directory != null && !directory.isBlank()) ? directory : DEFAULT_EXPORT_DIRECTORY;
194201
save();
195202
}
196203
}
197-
204+
205+
public static String getOutputFormat() {
206+
return configData != null ? configData.outputFormat : DEFAULT_OUTPUT_FORMAT;
207+
}
208+
209+
public static void setOutputFormat(String format) {
210+
if (configData != null) {
211+
String normalized = normalizeOutputFormat(format);
212+
configData.outputFormat = normalized != null ? normalized : DEFAULT_OUTPUT_FORMAT;
213+
save();
214+
}
215+
}
216+
217+
private static String normalizeOutputFormat(String format) {
218+
if (format == null) return null;
219+
String lower = format.toLowerCase().trim();
220+
if (lower.equals("csv") || lower.equals("json") || lower.equals("yaml")) {
221+
return lower;
222+
}
223+
return null;
224+
}
225+
226+
public static boolean isValidOutputFormat(String format) {
227+
return normalizeOutputFormat(format) != null;
228+
}
229+
198230
public static void setNetworkEnabled(boolean enabled) {
199231
if (configData != null) {
200232
configData.networkEnabled = enabled;
@@ -300,14 +332,18 @@ public static boolean getDefaultChatEnabled() {
300332
return DEFAULT_CHAT_ENABLED;
301333
}
302334

303-
public static boolean getDefaultCsvEnabled() {
304-
return DEFAULT_CSV_ENABLED;
335+
public static boolean getDefaultExportEnabled() {
336+
return DEFAULT_EXPORT_ENABLED;
305337
}
306-
307-
public static String getDefaultCsvDirectory() {
308-
return DEFAULT_CSV_DIRECTORY;
338+
339+
public static String getDefaultExportDirectory() {
340+
return DEFAULT_EXPORT_DIRECTORY;
309341
}
310-
342+
343+
public static String getDefaultOutputFormat() {
344+
return DEFAULT_OUTPUT_FORMAT;
345+
}
346+
311347
public static boolean getDefaultNetworkEnabled() {
312348
return DEFAULT_NETWORK_ENABLED;
313349
}

0 commit comments

Comments
 (0)