diff --git a/src/assets.zig b/src/assets.zig index 2c6f317442..3d835ee721 100644 --- a/src/assets.zig +++ b/src/assets.zig @@ -365,10 +365,6 @@ fn registerBiome(numericId: u32, stringId: []const u8, zon: ZonElement) void { biomes_zig.register(stringId, numericId, zon); } -fn registerRecipesFromZon(zon: ZonElement) void { - items_zig.registerRecipes(zon); -} - pub const Palette = struct { // MARK: Palette palette: main.List([]const u8), @@ -595,7 +591,7 @@ pub fn loadWorldAssets(assetFolder: []const u8, blockPalette: *Palette, itemPale iterator = worldAssets.recipes.iterator(); while(iterator.next()) |entry| { - registerRecipesFromZon(entry.value_ptr.*); + items_zig.registerRecipes(entry.value_ptr.*); } try sbb.registerBlueprints(&worldAssets.blueprints); diff --git a/src/block_entity.zig b/src/block_entity.zig index 7a10f145f7..8b8611da1f 100644 --- a/src/block_entity.zig +++ b/src/block_entity.zig @@ -344,7 +344,7 @@ pub const BlockEntityTypes = struct { texture.deinit(); } textureDeinitList.deinit(); - pipeline.deinit(); + if(!main.settings.launchConfig.headlessServer) pipeline.deinit(); StorageServer.deinit(); StorageClient.deinit(); } diff --git a/src/game.zig b/src/game.zig index 3744ba1795..1442c1168f 100644 --- a/src/game.zig +++ b/src/game.zig @@ -657,7 +657,6 @@ pub const World = struct { // MARK: World main.gui.deinit(); main.gui.init(); Player.inventory.deinit(main.globalAllocator); - main.items.clearRecipeCachedInventories(); main.items.Inventory.Sync.ClientSide.reset(); main.threadPool.clear(); diff --git a/src/items.zig b/src/items.zig index f18e264b4f..148f3ccd3d 100644 --- a/src/items.zig +++ b/src/items.zig @@ -1257,7 +1257,7 @@ pub fn registerRecipes(zon: ZonElement) void { } } -pub fn clearRecipeCachedInventories() void { +fn clearRecipeCachedInventories() void { for(recipeList.items) |recipe| { main.globalAllocator.free(recipe.sourceItems); main.globalAllocator.free(recipe.sourceAmounts); @@ -1271,6 +1271,7 @@ pub fn reset() void { toolTypeList = .{}; toolTypeIdToIndex = .{}; reverseIndices = .{}; + clearRecipeCachedInventories(); recipeList.clearAndFree(); itemListSize = 0; } diff --git a/src/models.zig b/src/models.zig index bb59246a6b..8b3930296c 100644 --- a/src/models.zig +++ b/src/models.zig @@ -15,7 +15,7 @@ const FaceData = main.renderer.chunk_meshing.FaceData; const NeverFailingAllocator = main.heap.NeverFailingAllocator; const Box = main.game.collision.Box; -var quadSSBO: graphics.SSBO = undefined; +var quadSSBO: ?graphics.SSBO = undefined; pub const QuadInfo = extern struct { normal: [3]f32 align(16), @@ -807,7 +807,7 @@ pub fn reset() void { } pub fn deinit() void { - quadSSBO.deinit(); + if(quadSSBO) |ssbo| ssbo.deinit(); nameToIndex.deinit(); for(models.items()) |model| { model.deinit(); @@ -820,5 +820,5 @@ pub fn deinit() void { pub fn uploadModels() void { quadSSBO = graphics.SSBO.initStatic(QuadInfo, quads.items); - quadSSBO.bind(4); + quadSSBO.?.bind(4); } diff --git a/src/server/server.zig b/src/server/server.zig index 0998880515..79d876c421 100644 --- a/src/server/server.zig +++ b/src/server/server.zig @@ -441,8 +441,6 @@ fn update() void { // MARK: update() } pub fn start(name: []const u8, port: ?u16) void { - main.initThreadLocals(); - defer main.deinitThreadLocals(); std.debug.assert(!running.load(.monotonic)); // There can only be one server. init(name, port); defer deinit(); diff --git a/src/server/world.zig b/src/server/world.zig index aeaafa3ea2..2fc31d1803 100644 --- a/src/server/world.zig +++ b/src/server/world.zig @@ -647,6 +647,7 @@ pub const ServerWorld = struct { // MARK: ServerWorld self.toolPalette.deinit(); self.biomePalette.deinit(); self.wio.deinit(); + main.assets.unloadAssets(); main.globalAllocator.free(self.path); main.globalAllocator.free(self.name); main.globalAllocator.destroy(self);