]> git.lizzy.rs Git - crafter_client.git/commitdiff
Finally fix error 23
authoroilboi <47129783+oilboi@users.noreply.github.com>
Mon, 20 Apr 2020 02:03:47 +0000 (22:03 -0400)
committeroilboi <47129783+oilboi@users.noreply.github.com>
Mon, 20 Apr 2020 02:03:47 +0000 (22:03 -0400)
init.lua
weather_handling.lua

index 5fc6c1d5ab42cd17e4333f4b07b0d765a4831ab2..4d1cac3d6fe4e87847bca7feb38b26a63af45537 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -1,19 +1,20 @@
---first we join the necessary channels so the mod can "listen"  to what the server says and "talk" to it
-weather_intake = minetest.mod_channel_join("weather_intake")
-weather = minetest.mod_channel_join("weather_nodes")
-weather_type = minetest.mod_channel_join("weather_type")
-running_send = minetest.mod_channel_join("running_send")
-player_movement_state = minetest.mod_channel_join("player.player_movement_state")
-
-nether = minetest.mod_channel_join("nether_teleporters")
-
+--declare globals
+weather_intake = nil
+weather = nil
+weather_type = nil
+running_send = nil
+player_movement_state = nil
+nether = nil
 
 function initialize_all()
-       --first we tell the server we're ready
-       weather_intake:send_all("READY")
-       weather_intake:leave()
-       weather_intake = nil --leave the channel
-       
+       --declare globals for now
+       weather_intake = minetest.mod_channel_join("weather_intake")
+       weather = minetest.mod_channel_join("weather_nodes")
+       weather_type = minetest.mod_channel_join("weather_type")
+       running_send = minetest.mod_channel_join("running_send")
+       player_movement_state = minetest.mod_channel_join("player.player_movement_state")
+       nether = minetest.mod_channel_join("nether_teleporters")
+               
        --next we load everything seperately because it's easier to work on individual files than have everything jammed into one file
        --not into seperate mods because that is unnecessary and cumbersome
        local path = minetest.get_modpath("crafter_client")
@@ -23,16 +24,22 @@ function initialize_all()
        dofile(path.."/nether.lua")
 end
 
---we must delay initialization until the player's camera exists in the world
---since there does not seem to be any client_loaded function
-local initialize = false
-minetest.register_globalstep(function(dtime)
-       if not initialize and minetest.camera and not vector.equals(minetest.camera:get_pos(),vector.new(0,0,0)) then
-               minetest.after(2, function()
-                       if weather_intake then
-                               initialize = true
-                               initialize_all()
-                       end
+--we must delay initialization until the server tells us it's ready to begin
+local initialize_client_modchannels = minetest.mod_channel_join("initializer")
+
+local function recursive_startup_attempt()
+       local ready_to_go = initialize_client_modchannels:is_writeable()
+       if ready_to_go == true then
+               --good to begin
+               initialize_all()
+               initialize_client_modchannels:leave()
+       else
+               --try again
+               minetest.after(0,function()
+                       recursive_startup_attempt()
                end)
        end
-end)
+end
+
+--begin initial attempt
+recursive_startup_attempt()
index 755a20058234dca1fa56028dc8443d846dc9a2e4..ea1128b1879c39244ee98abdb48378d16785b9dd 100644 (file)
@@ -235,3 +235,11 @@ minetest.register_on_modchannel_message(function(channel_name, sender, message)
                rain_sound_handle = nil
        end
 end)
+
+
+--We must tell the server that we're ready
+minetest.after(0,function()
+       weather_intake:send_all("READY")
+       weather_intake:leave()
+       weather_intake = nil --leave the channel
+end)