IRollbackReportSink *rollback = gamedef->rollback();
// If source is not infinite, record item take
- if(!src_can_take_count != -1){
+ if(src_can_take_count != -1){
RollbackAction action;
std::string loc;
{
rollback->reportAction(action);
}
// If destination is not infinite, record item put
- if(!dst_can_put_count != -1){
+ if(dst_can_put_count != -1){
RollbackAction action;
std::string loc;
{
// Drop the item
ItemStack item1 = list_from->getItem(from_i);
+ item1.count = take_count;
if(scriptapi_item_on_drop(player->getEnv()->getLua(), item1, player,
player->getBasePosition() + v3f(0,1,0)))
{
IRollbackReportSink *rollback = gamedef->rollback();
// If source is not infinite, record item take
- if(!src_can_take_count != -1){
+ if(src_can_take_count != -1){
RollbackAction action;
std::string loc;
{
result.clear();
- // TODO: Allow different sizes of crafting grids
-
// Get the InventoryList in which we will operate
InventoryList *clist = inv->getList("craft");
- if(!clist || clist->getSize() != 9)
+ if(!clist)
return false;
// Mangle crafting grid to an another format
CraftInput ci;
ci.method = CRAFT_METHOD_NORMAL;
- ci.width = 3;
- for(u16 i=0; i<9; i++)
+ ci.width = clist->getWidth() ? clist->getWidth() : 3;
+ for(u16 i=0; i<clist->getSize(); i++)
ci.items.push_back(clist->getItem(i));
// Find out what is crafted and add it to result item slot
if(found && decrementInput)
{
// CraftInput has been changed, apply changes in clist
- for(u16 i=0; i<9; i++)
+ for(u16 i=0; i<clist->getSize(); i++)
{
clist->changeItem(i, ci.items[i]);
}