Crafting definition in scripts
[oweals/minetest.git] / src / server.cpp
index c01b5050df9aaeab7881466637e7a3b6c421dd6c..894c3d362d1c5c5dc65782b1978a1109233e9c0c 100644 (file)
@@ -43,6 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "scriptapi.h"
 #include "nodedef.h"
 #include "tooldef.h"
+#include "craftdef.h"
 
 #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
 
@@ -988,6 +989,7 @@ Server::Server(
        m_lua(NULL),
        m_toolmgr(createToolDefManager()),
        m_nodedef(createNodeDefManager()),
+       m_craftdef(createCraftDefManager()),
        m_thread(this),
        m_emergethread(this),
        m_time_counter(0),
@@ -4332,14 +4334,19 @@ void Server::UpdateCrafting(u16 peer_id)
                }
                if(clist && rlist && player->craftresult_is_preview)
                {
-                       InventoryItem *items[9];
-                       for(u16 i=0; i<9; i++)
-                       {
-                               items[i] = clist->getItem(i);
+                       // Get result of crafting grid
+                       
+                       std::vector<InventoryItem*> items;
+                       for(u16 i=0; i<9; i++){
+                               if(clist->getItem(i) == NULL)
+                                       items.push_back(NULL);
+                               else
+                                       items.push_back(clist->getItem(i)->clone());
                        }
+                       CraftPointerInput cpi(3, items);
                        
-                       // Get result of crafting grid
-                       InventoryItem *result = craft_get_result(items, this);
+                       InventoryItem *result = m_craftdef->getCraftResult(cpi, this);
+                       //InventoryItem *result = craft_get_result(items, this);
                        if(result)
                                rlist->addItem(result);
                }
@@ -4424,6 +4431,10 @@ INodeDefManager* Server::getNodeDefManager()
 {
        return m_nodedef;
 }
+ICraftDefManager* Server::getCraftDefManager()
+{
+       return m_craftdef;
+}
 ITextureSource* Server::getTextureSource()
 {
        return NULL;
@@ -4441,6 +4452,10 @@ IWritableNodeDefManager* Server::getWritableNodeDefManager()
 {
        return m_nodedef;
 }
+IWritableCraftDefManager* Server::getWritableCraftDefManager()
+{
+       return m_craftdef;
+}
 
 v3f findSpawnPos(ServerMap &map)
 {