diff --git a/src/assets/AssetsLoader.cpp b/src/assets/AssetsLoader.cpp index f3f575df..9fecf7da 100644 --- a/src/assets/AssetsLoader.cpp +++ b/src/assets/AssetsLoader.cpp @@ -16,6 +16,7 @@ #include "objects/rigging.hpp" #include "util/ThreadPool.hpp" #include "voxels/Block.hpp" +#include "items/ItemDef.hpp" #include "Assets.hpp" #include "assetload_funcs.hpp" @@ -240,6 +241,15 @@ void AssetsLoader::addDefaults(AssetsLoader& loader, const Content* content) { } } } + for (const auto& [_, def] : content->items.getDefs()) { + if (def->modelName.find(':') == std::string::npos) { + loader.add( + AssetType::MODEL, + MODELS_FOLDER + "/" + def->modelName, + def->modelName + ); + } + } } } diff --git a/src/content/ContentLoader.cpp b/src/content/ContentLoader.cpp index df12461a..3294b040 100644 --- a/src/content/ContentLoader.cpp +++ b/src/content/ContentLoader.cpp @@ -429,6 +429,7 @@ void ContentLoader::loadItem( root.at("icon").get(def.icon); root.at("placing-block").get(def.placingBlock); root.at("script-name").get(def.scriptName); + root.at("model-name").get(def.modelName); root.at("stack-size").get(def.stackSize); // item light emission [r, g, b] where r,g,b in range [0..15] diff --git a/src/items/ItemDef.cpp b/src/items/ItemDef.cpp index 321f7be7..8d0cdd66 100644 --- a/src/items/ItemDef.cpp +++ b/src/items/ItemDef.cpp @@ -14,4 +14,5 @@ void ItemDef::cloneTo(ItemDef& dst) { dst.icon = icon; dst.placingBlock = placingBlock; dst.scriptName = scriptName; + dst.modelName = modelName; } diff --git a/src/items/ItemDef.hpp b/src/items/ItemDef.hpp index 81a9dbb7..999b190f 100644 --- a/src/items/ItemDef.hpp +++ b/src/items/ItemDef.hpp @@ -35,6 +35,8 @@ struct ItemDef { std::string placingBlock = "core:air"; std::string scriptName = name.substr(name.find(':') + 1); + std::string modelName = name + ".model"; + struct { itemid_t id; blockid_t placingBlock;