NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
ItemStack &item = o->m_stack;
- ItemStack newitem = read_item(L,-2, STACK_TO_SERVER(L));
+ ItemStack newitem = read_item(L,-1, STACK_TO_SERVER(L));
ItemStack leftover = item.addItem(newitem, STACK_TO_SERVER(L)->idef());
create(L, leftover);
return 1;
idef->registerItem(def);
// Read the node definition (content features) and register it
- if(def.type == ITEM_NODE)
- {
+ if(def.type == ITEM_NODE){
ContentFeatures f = read_content_features(L, table);
- ndef->set(f.name, f);
+ content_t id = ndef->set(f.name, f);
+
+ if(id > MAX_REGISTERED_CONTENT){
+ throw LuaError(L, "Number of registerable nodes ("
+ + itos(MAX_REGISTERED_CONTENT+1)
+ + ") exceeded (" + name + ")");
+ }
}
return 0; /* number of results */
return 0; /* number of results */
}
+// get_content_id(name)
+int ModApiItemMod::l_get_content_id(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ std::string name = luaL_checkstring(L, 1);
+
+ INodeDefManager *ndef = STACK_TO_SERVER(L)->getNodeDefManager();
+ content_t c = ndef->getId(name);
+
+ lua_pushinteger(L, c);
+ return 1; /* number of results */
+}
+
+// get_name_from_content_id(name)
+int ModApiItemMod::l_get_name_from_content_id(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ content_t c = luaL_checkint(L, 1);
+
+ INodeDefManager *ndef = STACK_TO_SERVER(L)->getNodeDefManager();
+ const char *name = ndef->get(c).name.c_str();
+
+ lua_pushstring(L, name);
+ return 1; /* number of results */
+}
+
bool ModApiItemMod::Initialize(lua_State *L,int top) {
bool retval = true;
retval &= API_FCT(register_item_raw);
retval &= API_FCT(register_alias_raw);
+ retval &= API_FCT(get_content_id);
+ retval &= API_FCT(get_name_from_content_id);
LuaItemStack::Register(L);