This commit is contained in:
iceBear67 committed 2024-07-14 15:18:46 +08:00
1 parent e05128b164
commit 9f307e3d1e
2 files changed
+31 -1

No files matched your search

@@ -34,6 +34,7 @@ public abstract class GuiceModInitializer extends AbstractModule implements ModI
var handler = new PreInitHandler(initialized); var handler = new PreInitHandler(initialized);
ServerPlayConnectionEvents.JOIN.register(handler::defend); ServerPlayConnectionEvents.JOIN.register(handler::defend);
ServerLifecycleEvents.SERVER_STARTED.register(this::onServerStarted); ServerLifecycleEvents.SERVER_STARTED.register(this::onServerStarted);
ServerLifecycleEvents.SERVER_STOPPING.register(this::onServerStopping);
injector = onInit(); injector = onInit();
var map = new HashMap<String, ServerModule>(); var map = new HashMap<String, ServerModule>();
for (Class<? extends ServerModule> registeredFeature : registeredFeatures) { for (Class<? extends ServerModule> registeredFeature : registeredFeatures) {
@@ -48,6 +49,10 @@ public abstract class GuiceModInitializer extends AbstractModule implements ModI
moduleManager = new SimpleModuleManager(ImmutableMap.copyOf(map)); moduleManager = new SimpleModuleManager(ImmutableMap.copyOf(map));
} }
private void onServerStopping(MinecraftServer minecraftServer) {
onStopping(minecraftServer);
}
private void onServerStarted(MinecraftServer server) { private void onServerStarted(MinecraftServer server) {
onReady(server); onReady(server);
initialized.set(true); initialized.set(true);
@@ -55,7 +60,11 @@ public abstract class GuiceModInitializer extends AbstractModule implements ModI
protected abstract Injector onInit(); protected abstract Injector onInit();
protected abstract void onReady(MinecraftServer minecraftServer); protected void onReady(MinecraftServer minecraftServer) {
}
protected void onStopping(MinecraftServer minecraftServer) {
}
@Provides @Provides
protected ModuleManager getModuleManager() { protected ModuleManager getModuleManager() {
@@ -4,8 +4,10 @@ import io.ib67.sfcraft.module.randomevt.ActiveEvent;
import io.ib67.sfcraft.module.randomevt.RandomEvent; import io.ib67.sfcraft.module.randomevt.RandomEvent;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKey;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
import net.minecraft.world.World; import net.minecraft.world.World;
@@ -17,12 +19,28 @@ import java.util.function.Predicate;
public class SimpleRandomEventRegistry implements RandomEventRegistry { public class SimpleRandomEventRegistry implements RandomEventRegistry {
private final List<RegisteredEntry> entries = new ArrayList<>(); private final List<RegisteredEntry> entries = new ArrayList<>();
private final List<StartedEntry> activeEvents = new ArrayList<>(); private final List<StartedEntry> activeEvents = new ArrayList<>();
private boolean shutdown;
protected SimpleRandomEventRegistry() { protected SimpleRandomEventRegistry() {
ServerTickEvents.END_WORLD_TICK.register(this::afterWorldTick); ServerTickEvents.END_WORLD_TICK.register(this::afterWorldTick);
ServerLifecycleEvents.SERVER_STOPPING.register(this::onShutdown);
}
private void onShutdown(MinecraftServer minecraftServer) {
shutdown = true;
for (StartedEntry activeEvent : activeEvents) {
activeEvent.getEvent().end();
}
activeEvents.clear();
} }
private void afterWorldTick(ServerWorld serverWorld) { private void afterWorldTick(ServerWorld serverWorld) {
if (shutdown) return;
triggerEvents(serverWorld);
clearActiveEvents();
}
private void triggerEvents(ServerWorld serverWorld) {
for (RegisteredEntry entry : entries) { for (RegisteredEntry entry : entries) {
if (entry.world == serverWorld.getRegistryKey() if (entry.world == serverWorld.getRegistryKey()
&& !entry.started && entry.worldTickPredicate.test(serverWorld)) { && !entry.started && entry.worldTickPredicate.test(serverWorld)) {
@@ -33,6 +51,9 @@ public class SimpleRandomEventRegistry implements RandomEventRegistry {
} }
} }
} }
}
private void clearActiveEvents() {
var it = activeEvents.iterator(); var it = activeEvents.iterator();
while (it.hasNext()) { while (it.hasNext()) {
var entry = it.next(); var entry = it.next();