Skip to content

Commit

Permalink
refactor(Config): use gson to manager config (#67)
Browse files Browse the repository at this point in the history
  • Loading branch information
DancingSnow0517 authored Nov 12, 2024
1 parent fbb10a5 commit c8219e3
Show file tree
Hide file tree
Showing 29 changed files with 313 additions and 495 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import net.minecraft.util.Identifier;

public final class QbmConstant {
public static final Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
public static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
public static final ServerPathUtils pathGetter = new ServerPathUtils();
public static final PermissionManager permissionManager = new PermissionManager();
public static final Identifier REQUEST_OPEN_CONFIG_GUI_PACKET_ID = Identifier.tryParse("quickbackupmulti:request_open_config_gui");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import io.github.skydynamic.increment.storage.lib.util.Storager;
import io.github.skydynamic.increment.storage.lib.database.DataBase;
import io.github.skydynamic.quickbackupmulti.command.permission.PermissionType;
import io.github.skydynamic.quickbackupmulti.config.QbmTempConfig;
import io.github.skydynamic.quickbackupmulti.config.QuickBackupMultiConfig;
import io.github.skydynamic.quickbackupmulti.i18n.Translate;
import io.github.skydynamic.quickbackupmulti.config.Config;
import io.github.skydynamic.quickbackupmulti.config.ConfigStorage;
import io.github.skydynamic.quickbackupmulti.command.QuickBackupMultiCommand;
import io.github.skydynamic.quickbackupmulti.utils.QbmManager;
import io.github.skydynamic.quickbackupmulti.utils.UpdateChecker;
Expand Down Expand Up @@ -37,7 +37,7 @@
//#endif
import java.nio.file.Path;

import static io.github.skydynamic.quickbackupmulti.QbmConstant.gson;
import static io.github.skydynamic.quickbackupmulti.QbmConstant.GSON;
import static io.github.skydynamic.quickbackupmulti.command.permission.PermissionManager.hasPermission;


Expand All @@ -53,16 +53,22 @@ public class QuickBackupMulti implements ModInitializer {

public static final String modName = "QuickBackupMulti";
public static final String modId = "quickbackupmulti";
public static QbmTempConfig TEMP_CONFIG = new QbmTempConfig();

EnvType env = FabricLoader.getInstance().getEnvironmentType();

private static DataBase dataBase;
private static Storager storager;

public static final QuickBackupMultiConfig config = new QuickBackupMultiConfig(QbmConstant.pathGetter.getConfigPath().resolve(modName + ".json"));

@Override
public void onInitialize() {
config.load();
config.save();

FabricLoader.getInstance().getModContainer(modId).ifPresent(modContainer ->
Config.TEMP_CONFIG.setModVersion(modContainer.getMetadata().getVersion().getFriendlyString()));
TEMP_CONFIG.setModVersion(modContainer.getMetadata().getVersion().getFriendlyString()));

//#if MC>=12005
//$$ Packets.registerPacketCodec();
Expand All @@ -71,8 +77,7 @@ public void onInitialize() {
java.util.logging.Logger.getLogger("").setFilter(filter);
((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).addFilter(filter);

Config.INSTANCE.load();
Translate.handleResourceReload(Config.INSTANCE.getLang());
Translate.handleResourceReload(config.getLang());

initDataBase();

Expand All @@ -87,42 +92,42 @@ public void onInitialize() {
//#endif
registerPacketHandler();
ServerLifecycleEvents.SERVER_STARTED.register(server -> {
Config.TEMP_CONFIG.setServerValue(server);
Config.TEMP_CONFIG.setEnv(env);
TEMP_CONFIG.setServerValue(server);
TEMP_CONFIG.setEnv(env);
});

ServerLifecycleEvents.SERVER_STOPPED.register(server -> {
if (env == EnvType.SERVER) {
if (Config.TEMP_CONFIG.isBackup) {
QbmManager.restore(Config.TEMP_CONFIG.backupSlot);
if (TEMP_CONFIG.isBackup) {
QbmManager.restore(TEMP_CONFIG.backupSlot);
getDataBase().stopInternalMongoServer();
Config.TEMP_CONFIG.setIsBackupValue(false);
switch (Config.INSTANCE.getAutoRestartMode()) {
TEMP_CONFIG.setIsBackupValue(false);
switch (config.getAutoRestartMode()) {
case DISABLE -> {}
case DEFAULT -> {
Config.TEMP_CONFIG.server.stopped = false;
Config.TEMP_CONFIG.server.running = true;
Config.TEMP_CONFIG.server.runServer();
TEMP_CONFIG.server.stopped = false;
TEMP_CONFIG.server.running = true;
TEMP_CONFIG.server.runServer();
}
case MCSM -> new Thread(() -> System.exit(-4000)).start();
}
} else {
getDataBase().stopInternalMongoServer();
}
}
Config.TEMP_CONFIG.server = null;
TEMP_CONFIG.server = null;
});

if (Config.INSTANCE.getCheckUpdata()) updateChecker.start();
if (config.isCheckUpdate()) updateChecker.start();
}

public void initDataBase() {
DataBaseManager dataBaseManager = new DataBaseManager(
"QuickBackupMulti",
Path.of(Config.INSTANCE.getStoragePath())
Path.of(config.getStoragePath())
);

dataBase = new DataBase(dataBaseManager, Config.INSTANCE.getConfigStorage());
dataBase = new DataBase(dataBaseManager, config);

IndexUtil.setDataBase(dataBase);
}
Expand All @@ -138,12 +143,12 @@ public static void registerPacketHandler() {
//#if MC>=12005
//$$ ServerPlayerEntity player = context.player();
//$$ if (player.hasPermissionLevel(2)) ServerPlayNetworking.send(
//$$ player, new Packets.OpenConfigGuiPacket(gson.toJson(Config.INSTANCE.getConfigStorage()))
//$$ player, new Packets.OpenConfigGuiPacket(GSON.toJson(config.getConfig()))
//$$ );
//#else
if (hasPermission(player.getCommandSource(), 2, PermissionType.HELPER)) {
PacketByteBuf sendBuf = PacketByteBufs.create();
sendBuf.writeString(gson.toJson(Config.INSTANCE.getConfigStorage()));
sendBuf.writeString(GSON.toJson(config.getConfig()));
ServerPlayNetworking.send(player, QbmConstant.OPEN_CONFIG_GUI_PACKET_ID, sendBuf);
}
//#endif
Expand All @@ -164,10 +169,10 @@ public static void registerPacketHandler() {
//#else
String configStorage = buf.readString();
//#endif
ConfigStorage c = QbmConstant.gson.fromJson(configStorage, ConfigStorage.class);
QuickBackupMultiConfig.ConfigStorage c = QbmConstant.GSON.fromJson(configStorage, QuickBackupMultiConfig.ConfigStorage.class);
// Verify config
ConfigStorage result = QbmManager.verifyConfig(c, player);
Config.INSTANCE.setConfigStorage(result);
QuickBackupMultiConfig.ConfigStorage result = QbmManager.verifyConfig(c, player);
config.setConfig(result);
}
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.github.skydynamic.quickbackupmulti;

import io.github.skydynamic.quickbackupmulti.config.QuickBackupMultiConfig;
import io.github.skydynamic.quickbackupmulti.screen.ConfigScreen;
import io.github.skydynamic.quickbackupmulti.config.ConfigStorage;

import net.fabricmc.api.ClientModInitializer;
//#if MC>=12005
Expand Down Expand Up @@ -55,13 +55,13 @@ public static void registerPacketHandler() {
//#if MC<12005
ClientPlayNetworking.registerGlobalReceiver(OPEN_CONFIG_GUI_PACKET_ID, (client, handler, buf, responseSender) -> {
String config = buf.readString();
ConfigStorage c = gson.fromJson(config, ConfigStorage.class);
QuickBackupMultiConfig.ConfigStorage c = GSON.fromJson(config, QuickBackupMultiConfig.ConfigStorage.class);
client.execute(() -> client.setScreen(new ConfigScreen(client.currentScreen, c)));
});
//#else
//$$ ClientPlayNetworking.registerGlobalReceiver(Packets.OpenConfigGuiPacket.ID, (payload, context) -> {
//$$ String config = payload.config();
//$$ ConfigStorage c = gson.fromJson(config, ConfigStorage.class);
//$$ QuickBackupMultiConfig.ConfigStorage c = GSON.fromJson(config, QuickBackupMultiConfig.ConfigStorage.class);
//$$ MinecraftClient client = context.client();
//$$ client.execute(() -> client.setScreen(new ConfigScreen(client.currentScreen, c)));
//$$ });
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.skydynamic.quickbackupmulti.backup;

import io.github.skydynamic.quickbackupmulti.config.Config;
import io.github.skydynamic.quickbackupmulti.QuickBackupMulti;
import io.github.skydynamic.quickbackupmulti.i18n.Translate;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
Expand Down Expand Up @@ -40,7 +40,7 @@ public void run() {
}
minecraftClient.execute(() -> minecraftClient.setScreen(null));
restore(slot);
Config.TEMP_CONFIG.setIsBackupValue(false);
QuickBackupMulti.TEMP_CONFIG.setIsBackupValue(false);
getDataBase().stopInternalMongoServer();
minecraftClient.execute(() -> {
Text title = Text.of(Translate.tr("quickbackupmulti.toast.end_title"));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.skydynamic.quickbackupmulti.backup;

import io.github.skydynamic.quickbackupmulti.config.Config;
import io.github.skydynamic.quickbackupmulti.QuickBackupMulti;
import io.github.skydynamic.quickbackupmulti.command.QuickBackupMultiCommand;
import net.fabricmc.api.EnvType;
import net.minecraft.server.network.ServerPlayerEntity;
Expand All @@ -24,13 +24,13 @@ public RestoreTask(EnvType env, List<ServerPlayerEntity> playerList, String slot
@Override
public void run() {
QuickBackupMultiCommand.QbDataHashMap.clear();
Config.TEMP_CONFIG.setIsBackupValue(true);
QuickBackupMulti.TEMP_CONFIG.setIsBackupValue(true);
if (env == EnvType.SERVER) {
for (ServerPlayerEntity player : playerList) {
player.networkHandler.disconnect(Text.of("Server restore backup"));
}
Config.TEMP_CONFIG.setIsBackupValue(true);
Config.TEMP_CONFIG.server.stop(true);
QuickBackupMulti.TEMP_CONFIG.setIsBackupValue(true);
QuickBackupMulti.TEMP_CONFIG.server.stop(true);
} else {
//不分到另一个class中执行 会找不到Screen然后炸(
new ClientRestoreDelegate(playerList, slot).run();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
//#if MC<=11820
//$$ import com.mojang.brigadier.exceptions.CommandSyntaxException;
//#endif
import io.github.skydynamic.quickbackupmulti.QuickBackupMulti;
import io.github.skydynamic.quickbackupmulti.backup.RestoreTask;
import io.github.skydynamic.quickbackupmulti.command.permission.PermissionManager;
import io.github.skydynamic.quickbackupmulti.command.permission.PermissionType;
import io.github.skydynamic.quickbackupmulti.utils.Messenger;
import io.github.skydynamic.quickbackupmulti.config.Config;
import net.fabricmc.api.EnvType;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.server.MinecraftServer;
Expand Down Expand Up @@ -158,7 +158,7 @@ private static void executeRestore(ServerCommandSource commandSource) {
player.sendMessage(Text.of(tr("quickbackupmulti.restore.countdown.intro", executePlayerName)), false);
}
String slot = (String) QbDataHashMap.get("QBM").get("Slot");
Config.TEMP_CONFIG.setBackupSlot(slot);
QuickBackupMulti.TEMP_CONFIG.setBackupSlot(slot);
Timer timer = (Timer) QbDataHashMap.get("QBM").get("Timer");
ScheduledExecutorService countdown = (ScheduledExecutorService) QbDataHashMap.get("QBM").get("Countdown");
AtomicInteger countDown = new AtomicInteger(11);
Expand Down Expand Up @@ -197,7 +197,7 @@ private static int cancelRestore(ServerCommandSource commandSource) {
timer.cancel();
countdown.shutdown();
QbDataHashMap.clear();
Config.TEMP_CONFIG.setIsBackupValue(false);
QuickBackupMulti.TEMP_CONFIG.setIsBackupValue(false);
Messenger.sendMessage(commandSource, Text.of(tr("quickbackupmulti.restore.abort")));
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@
import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import io.github.skydynamic.quickbackupmulti.QuickBackupMulti;
import io.github.skydynamic.quickbackupmulti.command.permission.PermissionManager;
import io.github.skydynamic.quickbackupmulti.command.permission.PermissionType;
import io.github.skydynamic.quickbackupmulti.command.suggestion.AutoRestartModeSuggestionProvider;
import io.github.skydynamic.quickbackupmulti.command.suggestion.LangSuggestionProvider;
import io.github.skydynamic.quickbackupmulti.config.AutoRestartMode;
import io.github.skydynamic.quickbackupmulti.i18n.Translate;
import io.github.skydynamic.quickbackupmulti.utils.Messenger;
import io.github.skydynamic.quickbackupmulti.utils.ScheduleUtils;
import io.github.skydynamic.quickbackupmulti.config.Config;
import net.minecraft.server.command.CommandManager;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.text.Text;
Expand Down Expand Up @@ -116,27 +117,27 @@ public class SettingCommand {

private static int getAutoRestartMode(ServerCommandSource commandSource) {
Messenger.sendMessage(commandSource,
Messenger.literal(tr("quickbackupmulti.restartmode.get", Config.INSTANCE.getAutoRestartMode().name())));
Messenger.literal(tr("quickbackupmulti.restartmode.get", QuickBackupMulti.config.getAutoRestartMode().name())));
return 1;
}

private static int setAutoRestartMode(ServerCommandSource commandSource, String mode) {
Config.AutoRestartMode newMode = Config.AutoRestartMode.valueOf(mode.toUpperCase());
Config.INSTANCE.setAutoRestartMode(newMode);
AutoRestartMode newMode = AutoRestartMode.valueOf(mode.toUpperCase());
QuickBackupMulti.config.setAutoRestartMode(newMode);
Messenger.sendMessage(commandSource,
Messenger.literal(tr("quickbackupmulti.restartmode.switch", newMode.name())));
return 1;
}

private static int setUseInternalDataBase(ServerCommandSource commandSource, Boolean value) {
if (value != Config.INSTANCE.getUseInternalDataBase()) {
Config.INSTANCE.setUseInternalDataBase(value);
if (value != QuickBackupMulti.config.getUseInternalDataBase()) {
QuickBackupMulti.config.setUseInternalDataBase(value);
try {
if (value) {
setDataStore(Config.TEMP_CONFIG.worldName);
setDataStore(QuickBackupMulti.TEMP_CONFIG.worldName);
} else {
getDataBase().stopInternalMongoServer();
setDataStore(Config.TEMP_CONFIG.worldName);
setDataStore(QuickBackupMulti.TEMP_CONFIG.worldName);
}
Messenger.sendMessage(commandSource,
Messenger.literal(tr("quickbackupmulti.database.set_success")));
Expand All @@ -158,7 +159,7 @@ private static int setUseInternalDataBase(ServerCommandSource commandSource, Boo
}

private static int getLang(ServerCommandSource commandSource) {
Messenger.sendMessage(commandSource, Text.of(tr("quickbackupmulti.lang.get", Config.INSTANCE.getLang())));
Messenger.sendMessage(commandSource, Text.of(tr("quickbackupmulti.lang.get", QuickBackupMulti.config.getLang())));
return 1;
}

Expand All @@ -169,12 +170,12 @@ private static int setLang(ServerCommandSource commandSource, String lang) {
}
Translate.handleResourceReload(lang);
Messenger.sendMessage(commandSource, Text.of(tr("quickbackupmulti.lang.set", lang)));
Config.INSTANCE.setLang(lang);
QuickBackupMulti.config.setLang(lang);
return 1;
}

private static int switchMode(ServerCommandSource commandSource, String mode) {
Config.INSTANCE.setScheduleMode(mode);
QuickBackupMulti.config.setScheduleMode(mode);
return switchScheduleMode(commandSource, mode);
}

Expand Down Expand Up @@ -202,9 +203,9 @@ private static int disableScheduleBackup(ServerCommandSource commandSource) {

private static int enableScheduleBackup(ServerCommandSource commandSource) {
try {
Config.INSTANCE.setScheduleBackup(true);
if (Config.TEMP_CONFIG.scheduler != null) {
Config.TEMP_CONFIG.scheduler.shutdown();
QuickBackupMulti.config.setScheduleBackup(true);
if (QuickBackupMulti.TEMP_CONFIG.scheduler != null) {
QuickBackupMulti.TEMP_CONFIG.scheduler.shutdown();
}
startSchedule(commandSource);
return 1;
Expand All @@ -220,23 +221,23 @@ private static int enableScheduleBackup(ServerCommandSource commandSource) {
public static int getScheduleMode(ServerCommandSource commandSource) {
Messenger.sendMessage(
commandSource,
Text.of(tr("quickbackupmulti.schedule.mode.get", Config.INSTANCE.getScheduleMode()))
Text.of(tr("quickbackupmulti.schedule.mode.get", QuickBackupMulti.config.getScheduleMode()))
);
return 1;
}

public static int getNextBackupTime(ServerCommandSource commandSource) {
if (Config.INSTANCE.getScheduleBackup()) {
if (QuickBackupMulti.config.isScheduleBackup()) {
String nextBackupTimeString = "";
switch (Config.INSTANCE.getScheduleMode()) {
switch (QuickBackupMulti.config.getScheduleMode()) {
case "cron" : {
nextBackupTimeString = getNextExecutionTime(Config.INSTANCE.getScheduleCron(), false);
nextBackupTimeString = getNextExecutionTime(QuickBackupMulti.config.getScheduleCron(), false);
break;
}
case "interval" : {
nextBackupTimeString = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(
Config.TEMP_CONFIG.latestScheduleExecuteTime + Config.INSTANCE.getScheduleInterval() * 1000L
QuickBackupMulti.TEMP_CONFIG.latestScheduleExecuteTime + QuickBackupMulti.config.getScheduleInterval() * 1000L
);
break;
}
Expand Down
Loading

0 comments on commit c8219e3

Please sign in to comment.