@@ -20,7 +20,7 @@ pub const SimpleStructureModel = struct { // MARK: SimpleStructureModel
2020 water_surface ,
2121 };
2222 const VTable = struct {
23- loadModel : * const fn (arena : NeverFailingAllocator , parameters : ZonElement ) * anyopaque ,
23+ loadModel : * const fn (arena : NeverFailingAllocator , parameters : ZonElement ) ? * anyopaque ,
2424 generate : * const fn (self : * anyopaque , generationMode : GenerationMode , x : i32 , y : i32 , z : i32 , chunk : * ServerChunk , caveMap : terrain.CaveMap.CaveMapView , biomeMap : terrain.CaveBiomeMap.CaveBiomeMapView , seed : * u64 , isCeiling : bool ) void ,
2525 hashFunction : * const fn (self : * anyopaque ) u64 ,
2626 generationMode : GenerationMode ,
@@ -38,9 +38,13 @@ pub const SimpleStructureModel = struct { // MARK: SimpleStructureModel
3838 std .log .err ("Couldn't find structure model with id {s}" , .{id });
3939 return null ;
4040 };
41+ const vtableModel = vtable .loadModel (arenaAllocator .allocator (), parameters ) orelse {
42+ std .log .err ("Error occurred while loading structure with id '{s}'. Dropping model from biome." , .{id });
43+ return null ;
44+ };
4145 return SimpleStructureModel {
4246 .vtable = vtable ,
43- .data = vtable . loadModel ( arenaAllocator . allocator (), parameters ) ,
47+ .data = vtableModel ,
4448 .chance = parameters .get (f32 , "chance" , 0.1 ),
4549 .priority = parameters .get (f32 , "priority" , 1 ),
4650 .generationMode = std .meta .stringToEnum (GenerationMode , parameters .get ([]const u8 , "generationMode" , "" )) orelse vtable .generationMode ,
@@ -60,7 +64,7 @@ pub const SimpleStructureModel = struct { // MARK: SimpleStructureModel
6064
6165 pub fn registerGenerator (comptime Generator : type ) void {
6266 var self : VTable = undefined ;
63- self .loadModel = main .utils .castFunctionReturnToAnyopaque (Generator .loadModel );
67+ self .loadModel = main .utils .castFunctionReturnToOptionalAnyopaque (Generator .loadModel );
6468 self .generate = main .utils .castFunctionSelfToAnyopaque (Generator .generate );
6569 self .hashFunction = main .utils .castFunctionSelfToAnyopaque (struct {
6670 fn hash (ptr : * Generator ) u64 {
0 commit comments