Skip to content

Commit 3c637b4

Browse files
committedDec 29, 2014
LuaItemStack: Fix and document behavior of set_name, set_count, set_wear, set_metadata
1 parent acb3519 commit 3c637b4

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed
 

‎doc/lua_api.txt

+7-4
Original file line numberDiff line numberDiff line change
@@ -2152,13 +2152,16 @@ ItemStack: A stack of items.
21522152
methods:
21532153
- is_empty(): return true if stack is empty
21542154
- get_name(): returns item name (e.g. "default:stone")
2155-
- set_name(itemname)
2155+
- set_name(itemname): returns true/false (success)
2156+
^ clears item on failure
21562157
- get_count(): returns number of items on the stack
2157-
- set_count(count)
2158+
- set_count(count): returns true/false (success)
2159+
^ clears item on failure
21582160
- get_wear(): returns tool wear (0-65535), 0 for non-tools
2159-
- set_wear(wear)
2161+
- set_wear(wear): returns true/false (success)
2162+
^ clears item on failure
21602163
- get_metadata(): returns metadata (a string attached to an item stack)
2161-
- set_metadata(metadata)
2164+
- set_metadata(metadata): returns true
21622165
- clear(): removes all items from the stack, making it empty
21632166
- replace(item): replace the contents of this stack (item can also
21642167
be an itemstring or table)

‎src/script/lua_api/l_item.cpp

+28-12
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,15 @@ int LuaItemStack::l_set_name(lua_State *L)
6363
NO_MAP_LOCK_REQUIRED;
6464
LuaItemStack *o = checkobject(L, 1);
6565
ItemStack &item = o->m_stack;
66-
item.name = luaL_checkstring(L, 2);
6766

68-
if (item.name == "" || item.empty())
67+
bool status = true;
68+
item.name = luaL_checkstring(L, 2);
69+
if (item.name == "" || item.empty()) {
6970
item.clear();
71+
status = false;
72+
}
7073

74+
lua_pushboolean(L, status);
7175
return 1;
7276
}
7377

@@ -87,11 +91,18 @@ int LuaItemStack::l_set_count(lua_State *L)
8791
NO_MAP_LOCK_REQUIRED;
8892
LuaItemStack *o = checkobject(L, 1);
8993
ItemStack &item = o->m_stack;
90-
item.count = luaL_checkinteger(L, 2);
9194

92-
if (item.name == "" || item.empty())
95+
bool status;
96+
lua_Integer count = luaL_checkinteger(L, 2);
97+
if (count <= 65535) {
98+
item.count = count;
99+
status = true;
100+
} else {
93101
item.clear();
102+
status = false;
103+
}
94104

105+
lua_pushboolean(L, status);
95106
return 1;
96107
}
97108

@@ -111,11 +122,18 @@ int LuaItemStack::l_set_wear(lua_State *L)
111122
NO_MAP_LOCK_REQUIRED;
112123
LuaItemStack *o = checkobject(L, 1);
113124
ItemStack &item = o->m_stack;
114-
item.wear = luaL_checkinteger(L, 2);
115125

116-
if (item.wear > 65535)
126+
bool status;
127+
lua_Integer wear = luaL_checkinteger(L, 2);
128+
if (wear <= 65535) {
129+
item.wear = wear;
130+
status = true;
131+
} else {
117132
item.clear();
133+
status = false;
134+
}
118135

136+
lua_pushboolean(L, status);
119137
return 1;
120138
}
121139

@@ -138,11 +156,9 @@ int LuaItemStack::l_set_metadata(lua_State *L)
138156

139157
size_t len = 0;
140158
const char *ptr = luaL_checklstring(L, 2, &len);
141-
if (ptr)
142-
item.metadata.assign(ptr, len);
143-
else
144-
item.metadata = "";
159+
item.metadata.assign(ptr, len);
145160

161+
lua_pushboolean(L, true);
146162
return 1;
147163
}
148164

@@ -533,7 +549,7 @@ int ModApiItemMod::l_get_content_id(lua_State *L)
533549

534550
INodeDefManager *ndef = getServer(L)->getNodeDefManager();
535551
content_t c = ndef->getId(name);
536-
552+
537553
lua_pushinteger(L, c);
538554
return 1; /* number of results */
539555
}
@@ -546,7 +562,7 @@ int ModApiItemMod::l_get_name_from_content_id(lua_State *L)
546562

547563
INodeDefManager *ndef = getServer(L)->getNodeDefManager();
548564
const char *name = ndef->get(c).name.c_str();
549-
565+
550566
lua_pushstring(L, name);
551567
return 1; /* number of results */
552568
}

0 commit comments

Comments
 (0)
Please sign in to comment.