Files
block-game/ReplicatedStorage/Client/Bootstrap.lua
2026-01-08 22:58:58 +02:00

84 lines
2.0 KiB
Lua

--!native
--!optimize 2
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local LoadingScreen = require(ReplicatedStorage.Client.LoadingScreen)
local ModLoader = require(ReplicatedStorage.Shared.ModLoader)
local ChunkManager = require(ReplicatedStorage.Shared.ChunkManager)
local PlacementManager = require(ReplicatedStorage.Shared.PlacementManager)
local Bootstrap = {}
local started = false
local function ensureFlag(name: string)
local objects = ReplicatedStorage:WaitForChild("Objects")
local existing = objects:FindFirstChild(name)
if existing and existing:IsA("BoolValue") then
return existing
end
local ready = Instance.new("BoolValue")
ready.Name = name
ready.Value = true
ready.Parent = objects
return ready
end
local contentProvider = game:GetService("ContentProvider")
local function waitForGameLoaded()
if game:IsLoaded() then
return
end
game.Loaded:Wait()
end
function Bootstrap.start()
if started then
return
end
started = true
contentProvider:PreloadAsync(game:GetDescendants())
ensureFlag("ClientReady")
local screen = LoadingScreen.mount()
screen.setStatus("Connecting...")
screen.setDetail("Waiting for server")
screen.setProgress(0.2)
task.wait(1)
waitForGameLoaded()
local modsFolder = ReplicatedStorage:WaitForChild("Mods")
local totalMods = #modsFolder:GetChildren()
local modProgressWeight = 0.6
ModLoader.loadModsC(function(index, total, modInstance, success)
total = total > 0 and total or math.max(totalMods, 1)
local ratio = index / total
screen.setStatus(`Modloading progress: {index}/{total}`)
screen.setDetail(`Loading {modInstance.Name}`)
screen.setProgress(0.05 + ratio * modProgressWeight)
if not success then
screen.setDetail(`Failed loading {modInstance.Name}; continuing`)
end
end)
ensureFlag("CSMLLoaded") -- needed
screen.setStatus("Joining world...")
screen.setDetail("Syncing with server")
screen.setProgress(0.7)
task.wait(0.5)
screen.close()
end
return Bootstrap