diff --git a/src/main/java/net/pietru/cookie_utils/mixins/NettyServerMixin.java b/src/main/java/net/pietru/cookie_utils/mixins/NettyServerMixin.java index 6a1e9c1..af5a0d6 100644 --- a/src/main/java/net/pietru/cookie_utils/mixins/NettyServerMixin.java +++ b/src/main/java/net/pietru/cookie_utils/mixins/NettyServerMixin.java @@ -1,37 +1,51 @@ package net.pietru.cookie_utils.mixins; import finalforeach.cosmicreach.GameSingletons; +import finalforeach.cosmicreach.Threads; import finalforeach.cosmicreach.TickRunner; import finalforeach.cosmicreach.networking.netty.NettyServer; import finalforeach.cosmicreach.world.Zone; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.io.IOException; import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import static net.pietru.cookie_utils.utils.prop.get_server_property_array; @Mixin(NettyServer.class) public class NettyServerMixin { - @Inject(method = "Lfinalforeach/cosmicreach/networking/netty/NettyServer;()V", at = @At("TAIL")) - private void on_singletons_create(CallbackInfo ci){ + @Unique + private static final Timer t = new Timer(); + + @Inject(method = "run", at = @At("HEAD")) + private void on_singletons_create(CallbackInfo ci) { try { - ArrayList zones = get_server_property_array("zones","[]"); - for (String zoneId : zones){ - Zone z = GameSingletons.world.getZoneIfExists(zoneId.replace(" ","")); + ArrayList zones = get_server_property_array("zones", "[]"); + int i = 1; + for (String zoneId : zones) { + Zone z = GameSingletons.world.getZoneIfExists(zoneId.replace(" ", "")); if (!zoneId.isEmpty() && z == null && GameSingletons.isHost) { - z = Zone.loadZone(GameSingletons.world, zoneId.replace(" ","")); - GameSingletons.world.addZone(z); + System.out.printf("Loading %s in %d seconds\n",zoneId,i); + t.schedule(new TimerTask() { + @Override + public void run() { + Zone z = Zone.loadZone(GameSingletons.world, zoneId.replace(" ", "")); + GameSingletons.world.addZone(z); + } + }, (long) i * 1000); + i++; } } System.out.println("CookieUtils loaded additional zones..."); } catch (IOException e) { throw new RuntimeException(e); } - TickRunner.INSTANCE.continueTickThread(); } }