void TestGameDef::defineSomeNodes() { IWritableItemDefManager *idef = (IWritableItemDefManager *)m_itemdef; IWritableNodeDefManager *ndef = (IWritableNodeDefManager *)m_nodedef; ItemDefinition itemdef; ContentFeatures f; //// Stone itemdef = ItemDefinition(); itemdef.type = ITEM_NODE; itemdef.name = "default:stone"; itemdef.description = "Stone"; itemdef.groups["cracky"] = 3; itemdef.inventory_image = "[inventorycube" "{default_stone.png" "{default_stone.png" "{default_stone.png"; f = ContentFeatures(); f.name = itemdef.name; for(int i = 0; i < 6; i++) f.tiledef[i].name = "default_stone.png"; f.is_ground_content = true; idef->registerItem(itemdef); CONTENT_STONE = ndef->set(f.name, f); //// Grass itemdef = ItemDefinition(); itemdef.type = ITEM_NODE; itemdef.name = "default:dirt_with_grass"; itemdef.description = "Dirt with grass"; itemdef.groups["crumbly"] = 3; itemdef.inventory_image = "[inventorycube" "{default_grass.png" "{default_dirt.png&default_grass_side.png" "{default_dirt.png&default_grass_side.png"; f = ContentFeatures(); f.name = itemdef.name; f.tiledef[0].name = "default_grass.png"; f.tiledef[1].name = "default_dirt.png"; for(int i = 2; i < 6; i++) f.tiledef[i].name = "default_dirt.png^default_grass_side.png"; f.is_ground_content = true; idef->registerItem(itemdef); CONTENT_GRASS = ndef->set(f.name, f); //// Torch (minimal definition for lighting tests) itemdef = ItemDefinition(); itemdef.type = ITEM_NODE; itemdef.name = "default:torch"; f = ContentFeatures(); f.name = itemdef.name; f.param_type = CPT_LIGHT; f.light_propagates = true; f.sunlight_propagates = true; f.light_source = LIGHT_MAX-1; idef->registerItem(itemdef); CONTENT_TORCH = ndef->set(f.name, f); }
// register_item_raw({lots of stuff}) int ModApiItemMod::l_register_item_raw(lua_State *L) { NO_MAP_LOCK_REQUIRED; luaL_checktype(L, 1, LUA_TTABLE); int table = 1; // Get the writable item and node definition managers from the server IWritableItemDefManager *idef = getServer(L)->getWritableItemDefManager(); IWritableNodeDefManager *ndef = getServer(L)->getWritableNodeDefManager(); // Check if name is defined std::string name; lua_getfield(L, table, "name"); if(lua_isstring(L, -1)){ name = lua_tostring(L, -1); verbosestream<<"register_item_raw: "<<name<<std::endl; } else { throw LuaError("register_item_raw: name is not defined or not a string"); } // Check if on_use is defined ItemDefinition def; // Set a distinctive default value to check if this is set def.node_placement_prediction = "__default"; // Read the item definition def = read_item_definition(L, table, def); // Default to having client-side placement prediction for nodes // ("" in item definition sets it off) if(def.node_placement_prediction == "__default"){ if(def.type == ITEM_NODE) def.node_placement_prediction = name; else def.node_placement_prediction = ""; } // Register item definition idef->registerItem(def); // Read the node definition (content features) and register it if(def.type == ITEM_NODE){ const ContentFeatures &f = read_content_features(L, table); content_t id = ndef->set(f.name, f); if(id > MAX_REGISTERED_CONTENT){ throw LuaError("Number of registerable nodes (" + itos(MAX_REGISTERED_CONTENT+1) + ") exceeded (" + name + ")"); } } return 0; /* number of results */ }
void TestGameDef::defineSomeNodes() { IWritableItemDefManager *idef = (IWritableItemDefManager *)m_itemdef; IWritableNodeDefManager *ndef = (IWritableNodeDefManager *)m_nodedef; ItemDefinition itemdef; ContentFeatures f; //// Stone itemdef = ItemDefinition(); itemdef.type = ITEM_NODE; itemdef.name = "default:stone"; itemdef.description = "Stone"; itemdef.groups["cracky"] = 3; itemdef.inventory_image = "[inventorycube" "{default_stone.png" "{default_stone.png" "{default_stone.png"; f = ContentFeatures(); f.name = itemdef.name; for(int i = 0; i < 6; i++) f.tiledef[i].name = "default_stone.png"; f.is_ground_content = true; idef->registerItem(itemdef); t_CONTENT_STONE = ndef->set(f.name, f); //// Grass itemdef = ItemDefinition(); itemdef.type = ITEM_NODE; itemdef.name = "default:dirt_with_grass"; itemdef.description = "Dirt with grass"; itemdef.groups["crumbly"] = 3; itemdef.inventory_image = "[inventorycube" "{default_grass.png" "{default_dirt.png&default_grass_side.png" "{default_dirt.png&default_grass_side.png"; f = ContentFeatures(); f.name = itemdef.name; f.tiledef[0].name = "default_grass.png"; f.tiledef[1].name = "default_dirt.png"; for(int i = 2; i < 6; i++) f.tiledef[i].name = "default_dirt.png^default_grass_side.png"; f.is_ground_content = true; idef->registerItem(itemdef); t_CONTENT_GRASS = ndef->set(f.name, f); //// Torch (minimal definition for lighting tests) itemdef = ItemDefinition(); itemdef.type = ITEM_NODE; itemdef.name = "default:torch"; f = ContentFeatures(); f.name = itemdef.name; f.param_type = CPT_LIGHT; f.light_propagates = true; f.sunlight_propagates = true; f.light_source = LIGHT_MAX-1; idef->registerItem(itemdef); t_CONTENT_TORCH = ndef->set(f.name, f); //// Water itemdef = ItemDefinition(); itemdef.type = ITEM_NODE; itemdef.name = "default:water"; itemdef.description = "Water"; itemdef.inventory_image = "[inventorycube" "{default_water.png" "{default_water.png" "{default_water.png"; f = ContentFeatures(); f.name = itemdef.name; f.alpha = 128; f.liquid_type = LIQUID_SOURCE; f.liquid_viscosity = 4; f.is_ground_content = true; f.groups["liquids"] = 3; for(int i = 0; i < 6; i++) f.tiledef[i].name = "default_water.png"; idef->registerItem(itemdef); t_CONTENT_WATER = ndef->set(f.name, f); //// Lava itemdef = ItemDefinition(); itemdef.type = ITEM_NODE; itemdef.name = "default:lava"; itemdef.description = "Lava"; itemdef.inventory_image = "[inventorycube" "{default_lava.png" "{default_lava.png" "{default_lava.png"; f = ContentFeatures(); f.name = itemdef.name; f.alpha = 128; f.liquid_type = LIQUID_SOURCE; f.liquid_viscosity = 7; f.light_source = LIGHT_MAX-1; f.is_ground_content = true; f.groups["liquids"] = 3; for(int i = 0; i < 6; i++) f.tiledef[i].name = "default_lava.png"; idef->registerItem(itemdef); t_CONTENT_LAVA = ndef->set(f.name, f); //// Brick itemdef = ItemDefinition(); itemdef.type = ITEM_NODE; itemdef.name = "default:brick"; itemdef.description = "Brick"; itemdef.groups["cracky"] = 3; itemdef.inventory_image = "[inventorycube" "{default_brick.png" "{default_brick.png" "{default_brick.png"; f = ContentFeatures(); f.name = itemdef.name; for(int i = 0; i < 6; i++) f.tiledef[i].name = "default_brick.png"; f.is_ground_content = true; idef->registerItem(itemdef); t_CONTENT_BRICK = ndef->set(f.name, f); }