mirror of
https://github.com/FabricMC/fabric.git
synced 2025-04-21 03:10:54 -04:00
Add Save Events to Server Lifecycle Events (#3533)
* Add Server Begin Save and Server End Save event
* rename events
* add tests
* pass more params through
(cherry picked from commit a67ffb5d0a
)
This commit is contained in:
parent
6a60afdd2e
commit
1dcf7c2a51
3 changed files with 60 additions and 0 deletions
fabric-lifecycle-events-v1/src
main/java/net/fabricmc/fabric
testmod/java/net/fabricmc/fabric/test/event/lifecycle
|
@ -107,6 +107,24 @@ public final class ServerLifecycleEvents {
|
|||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Called before a Minecraft server begins saving data.
|
||||
*/
|
||||
public static final Event<BeforeSave> BEFORE_SAVE = EventFactory.createArrayBacked(BeforeSave.class, callbacks -> (server, flush, force) -> {
|
||||
for (BeforeSave callback : callbacks) {
|
||||
callback.onBeforeSave(server, flush, force);
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Called after a Minecraft server finishes saving data.
|
||||
*/
|
||||
public static final Event<AfterSave> AFTER_SAVE = EventFactory.createArrayBacked(AfterSave.class, callbacks -> (server, flush, force) -> {
|
||||
for (AfterSave callback : callbacks) {
|
||||
callback.onAfterSave(server, flush, force);
|
||||
}
|
||||
});
|
||||
|
||||
@FunctionalInterface
|
||||
public interface ServerStarting {
|
||||
void onServerStarting(MinecraftServer server);
|
||||
|
@ -160,4 +178,28 @@ public final class ServerLifecycleEvents {
|
|||
*/
|
||||
void endDataPackReload(MinecraftServer server, LifecycledResourceManager resourceManager, boolean success);
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface BeforeSave {
|
||||
/**
|
||||
* Called before a Minecraft server begins saving data.
|
||||
*
|
||||
* @param server the server
|
||||
* @param flush is true when all chunks are being written to disk, server will likely freeze during this time
|
||||
* @param force whether servers that have save-off set should save
|
||||
*/
|
||||
void onBeforeSave(MinecraftServer server, boolean flush, boolean force);
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface AfterSave {
|
||||
/**
|
||||
* Called before a Minecraft server begins saving data.
|
||||
*
|
||||
* @param server the server
|
||||
* @param flush is true when all chunks are being written to disk, server will likely freeze during this time
|
||||
* @param force whether servers that have save-off set should save
|
||||
*/
|
||||
void onAfterSave(MinecraftServer server, boolean flush, boolean force);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -101,4 +101,14 @@ public abstract class MinecraftServerMixin {
|
|||
return value;
|
||||
}, (MinecraftServer) (Object) this);
|
||||
}
|
||||
|
||||
@Inject(method = "save", at = @At("HEAD"))
|
||||
private void startSave(boolean suppressLogs, boolean flush, boolean force, CallbackInfoReturnable<Boolean> cir) {
|
||||
ServerLifecycleEvents.BEFORE_SAVE.invoker().onBeforeSave((MinecraftServer) (Object) this, flush, force);
|
||||
}
|
||||
|
||||
@Inject(method = "save", at = @At("TAIL"))
|
||||
private void endSave(boolean suppressLogs, boolean flush, boolean force, CallbackInfoReturnable<Boolean> cir) {
|
||||
ServerLifecycleEvents.AFTER_SAVE.invoker().onAfterSave((MinecraftServer) (Object) this, flush, force);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,5 +54,13 @@ public final class ServerLifecycleTests implements ModInitializer {
|
|||
ServerLifecycleEvents.SYNC_DATA_PACK_CONTENTS.register((player, joined) -> {
|
||||
LOGGER.info("SyncDataPackContents received for {}", joined ? "join" : "reload");
|
||||
});
|
||||
|
||||
ServerLifecycleEvents.BEFORE_SAVE.register((server, flush, force) -> {
|
||||
LOGGER.info("Starting Save with settings: Flush:{} Force:{}", flush, force);
|
||||
});
|
||||
|
||||
ServerLifecycleEvents.AFTER_SAVE.register((server, flush, force) -> {
|
||||
LOGGER.info("Save Finished with settings: Flush:{} Force:{}", flush, force);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue