fix #19
This commit is contained in:
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();
|
||||||
|
|||||||
Reference in new issue
Block a user