mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-02-11 11:17:11 +07:00
Implemented server autosave config (#1296)
This commit is contained in:
parent
b48e6d0e2f
commit
fbd55a341e
@ -1824,9 +1824,9 @@ public class Blocks implements ContentList{
|
||||
}};
|
||||
|
||||
illuminator = new LightBlock("illuminator"){{
|
||||
requirements(Category.effect, BuildVisibility.lightingOnly, with(Items.graphite, 10, Items.silicon, 8));
|
||||
requirements(Category.effect, BuildVisibility.lightingOnly, with(Items.graphite, 12, Items.silicon, 8));
|
||||
brightness = 0.67f;
|
||||
radius = 130f;
|
||||
radius = 140f;
|
||||
consumes.power(0.06f);
|
||||
}};
|
||||
|
||||
|
@ -567,7 +567,10 @@ public class Administration{
|
||||
socketInputAddress("The bind address for socket input.", "localhost", () -> Events.fire(Trigger.socketConfigChanged)),
|
||||
allowCustomClients("Whether custom clients are allowed to connect.", !headless, "allow-custom"),
|
||||
whitelist("Whether the whitelist is used.", false),
|
||||
motd("The message displayed to people on connection.", "off");
|
||||
motd("The message displayed to people on connection.", "off"),
|
||||
autosave("Whether the periodically save the map when playing.", false),
|
||||
autosaveAmount("The maximum amount of autosaves. Older ones get replaced.", 10),
|
||||
autosaveSpacing("Spacing between autosaves in seconds.", 60 * 5);
|
||||
|
||||
public static final Config[] all = values();
|
||||
|
||||
|
@ -39,7 +39,7 @@ public class ServerControl implements ApplicationListener{
|
||||
private static final int maxLogLength = 1024 * 512;
|
||||
|
||||
protected static String[] tags = {"&lc&fb[D]", "&lg&fb[I]", "&ly&fb[W]", "&lr&fb[E]", ""};
|
||||
protected static DateTimeFormatter dateTime = DateTimeFormatter.ofPattern("MM-dd-yyyy | HH:mm:ss");
|
||||
protected static DateTimeFormatter dateTime = DateTimeFormatter.ofPattern("MM-dd-yyyy HH:mm:ss");
|
||||
|
||||
private final CommandHandler handler = new CommandHandler("");
|
||||
private final Fi logFolder = Core.settings.getDataDirectory().child("logs/");
|
||||
@ -49,6 +49,7 @@ public class ServerControl implements ApplicationListener{
|
||||
private Task lastTask;
|
||||
private Gamemode lastMode = Gamemode.survival;
|
||||
private @Nullable Map nextMapOverride;
|
||||
private Interval autosaveCount = new Interval();
|
||||
|
||||
private Thread socketThread;
|
||||
private ServerSocket serverSocket;
|
||||
@ -153,12 +154,52 @@ public class ServerControl implements ApplicationListener{
|
||||
}
|
||||
});
|
||||
|
||||
//reset autosave on world load
|
||||
Events.on(WorldLoadEvent.class, e -> {
|
||||
autosaveCount.reset(0, Config.autosaveSpacing.num() * 60);
|
||||
});
|
||||
|
||||
//autosave periodically
|
||||
Events.on(Trigger.update, () -> {
|
||||
if(state.isPlaying() && Config.autosave.bool()){
|
||||
if(autosaveCount.get(Config.autosaveSpacing.num() * 60)){
|
||||
int max = Config.autosaveAmount.num();
|
||||
|
||||
//use map file name to make sure it can be saved
|
||||
String mapName = (state.map.file == null ? "unknown" : state.map.file.nameWithoutExtension()).replace(" ", "_");
|
||||
String date = dateTime.format(LocalDateTime.now()).replace(" ", "_");
|
||||
|
||||
Seq<Fi> autosaves = saveDirectory.findAll(f -> f.name().startsWith("auto_"));
|
||||
autosaves.sort(f -> -f.lastModified());
|
||||
|
||||
//delete older saves
|
||||
if(autosaves.size >= max){
|
||||
for(int i = max - 1; i < autosaves.size; i++){
|
||||
autosaves.get(i).delete();
|
||||
}
|
||||
}
|
||||
|
||||
String fileName = "auto_" + mapName + "_" + date + "." + saveExtension;
|
||||
Fi file = saveDirectory.child(fileName);
|
||||
info("&lbAutosaving...");
|
||||
|
||||
try{
|
||||
SaveIO.save(file);
|
||||
info("&lbAutosave completed.");
|
||||
}catch(Throwable e){
|
||||
err("Autosave failed.", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Events.on(Trigger.socketConfigChanged, () -> {
|
||||
toggleSocket(false);
|
||||
toggleSocket(Config.socketInput.bool());
|
||||
});
|
||||
|
||||
Events.on(PlayEvent.class, e -> {
|
||||
|
||||
try{
|
||||
JsonValue value = JsonIO.json().fromJson(null, Core.settings.getString("globalrules"));
|
||||
JsonIO.json().readFields(state.rules, value);
|
||||
|
Loading…
Reference in New Issue
Block a user