clear_craft: Return false if recipe not found, don't throw error (#7804)

master
Paramat 2018-10-24 15:03:21 +01:00 committed by GitHub
parent ff35bffe18
commit 622e2235ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 9 deletions

View File

@ -3555,7 +3555,7 @@ Call these functions only at load time!
ignored. For input use the same recipe table syntax as for ignored. For input use the same recipe table syntax as for
`minetest.register_craft(recipe)`. For output specify only the item, `minetest.register_craft(recipe)`. For output specify only the item,
without a quantity. without a quantity.
* If no erase candidate could be found, Lua exception will be thrown. * Returns false if no erase candidate could be found, otherwise returns true.
* **Warning**! The type field ("shaped", "cooking" or any other) will be * **Warning**! The type field ("shaped", "cooking" or any other) will be
ignored if the recipe contains output. Erasing is then done independently ignored if the recipe contains output. Erasing is then done independently
from the crafting method. from the crafting method.

View File

@ -294,11 +294,14 @@ int ModApiCraft::l_clear_craft(lua_State *L)
std::string type = getstringfield_default(L, table, "type", "shaped"); std::string type = getstringfield_default(L, table, "type", "shaped");
CraftOutput c_output(output, 0); CraftOutput c_output(output, 0);
if (!output.empty()) { if (!output.empty()) {
if (craftdef->clearCraftRecipesByOutput(c_output, getServer(L))) if (craftdef->clearCraftRecipesByOutput(c_output, getServer(L))) {
return 0; lua_pushboolean(L, true);
return 1;
}
throw LuaError("No craft recipe known for output" warningstream << "No craft recipe known for output" << std::endl;
" (output=\"" + output + "\")"); lua_pushboolean(L, false);
return 1;
} }
std::vector<std::string> recipe; std::vector<std::string> recipe;
int width = 0; int width = 0;
@ -347,10 +350,15 @@ int ModApiCraft::l_clear_craft(lua_State *L)
} else { } else {
throw LuaError("Unknown crafting definition type: \"" + type + "\""); throw LuaError("Unknown crafting definition type: \"" + type + "\"");
} }
if (!craftdef->clearCraftRecipesByInput(method, width, recipe, getServer(L)))
throw LuaError("No crafting specified for input"); if (!craftdef->clearCraftRecipesByInput(method, width, recipe, getServer(L))) {
lua_pop(L, 1); warningstream << "No craft recipe matches input" << std::endl;
return 0; lua_pushboolean(L, false);
return 1;
}
lua_pushboolean(L, true);
return 1;
} }
// get_craft_result(input) // get_craft_result(input)