Merge pull request #3 from todada/drinks_as_nodes

Make drinks placeable in the world.
I'll change the ifs to elseifs shortly. Also @todada you had a little bug with drinking from the steel bottle and getting an empty glass bottle in return, but I'll fix that when I do the changes from if to elseif.
master
Nathan Salapat 2017-03-24 08:33:27 -05:00 committed by GitHub
commit 91f50905bc
4 changed files with 95 additions and 19 deletions

View File

@ -134,6 +134,18 @@ minetest.register_node('drinks:juice_press', {
meta:set_string('formspec', press_error_formspec)
end
end
if vessel == 'vessels:steel_bottle' then
if instack:get_count() >= 8 then
meta:set_string('container', 'jsb_')
meta:set_string('fruitnumber', 8)
meta:set_string('infotext', 'Juicing...')
meta:set_string('formspec', press_running_formspec)
timer:start(8)
else
meta:set_string('infotext', 'You need more fruit.')
meta:set_string('formspec', press_error_formspec)
end
end
if vessel == 'bucket:bucket_empty' then
if instack:get_count() >= 16 then
meta:set_string('container', 'jbu_')
@ -234,22 +246,24 @@ minetest.register_node('drinks:juice_press', {
end
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
if listname == 'dst' then
if stack:get_name() == ('bucket:bucket_empty') then
return 1
elseif stack:get_name() == ('vessels:drinking_glass') then
return 1
elseif stack:get_name() == ('vessels:glass_bottle') then
return 1
if listname == 'dst' then
if stack:get_name() == ('bucket:bucket_empty') then
return 1
elseif stack:get_name() == ('vessels:drinking_glass') then
return 1
elseif stack:get_name() == ('vessels:glass_bottle') then
return 1
elseif stack:get_name() == ('vessels:steel_bottle') then
return 1
elseif stack:get_name() == ('default:papyrus') then
return 1
else
return 0
end
else
return 0
end
else
return 99
end
end,
end
end,
})
function drinks.drinks_liquid_sub(liq_vol, ves_typ, ves_vol, pos)
@ -270,7 +284,7 @@ function drinks.drinks_liquid_sub(liq_vol, ves_typ, ves_vol, pos)
if ves_vol == 256 then
meta:set_string('formspec', drinks.liquid_storage_formspec(fruit_name, fullness, 256))
end
if ves_typ == 'jcu' or ves_typ == 'jbo' or ves_typ == 'jbu' then
if ves_typ == 'jcu' or ves_typ == 'jbo' or ves_typ == 'jsb' or ves_typ == 'jbu' then
inv:set_stack('dst', 1, 'drinks:'..ves_typ..'_'..fruit)
end
if ves_typ == 'thirsty:bronze_canteen' then
@ -313,6 +327,9 @@ function drinks.drinks_barrel(pos, inputstack)
if vessel == 'jbo' then
drinks.drinks_liquid_add(4, 'vessels:glass_bottle', 128, pos)
end
if vessel == 'jsb' then
drinks.drinks_liquid_add(4, 'vessels:steel_bottle', 128, pos)
end
if vessel == 'jbu' then
drinks.drinks_liquid_add(16, 'bucket:bucket_empty', 128, pos)
end
@ -327,6 +344,9 @@ function drinks.drinks_silo(pos, inputstack)
if vessel == 'jbo' then
drinks.drinks_liquid_add(4, 'vessels:glass_bottle', 256, pos)
end
if vessel == 'jsb' then
drinks.drinks_liquid_add(4, 'vessels:steel_bottle', 256, pos)
end
if vessel == 'jbu' then
drinks.drinks_liquid_add(16, 'bucket:bucket_empty', 256, pos)
end
@ -397,6 +417,9 @@ minetest.register_node('drinks:liquid_barrel', {
if outputstack == 'vessels:glass_bottle' then
drinks.drinks_liquid_sub(4, 'jbo', 128, pos)
end
if outputstack == 'vessels:steel_bottle' then
drinks.drinks_liquid_sub(4, 'jsb', 128, pos)
end
if outputstack == 'bucket:bucket_empty' then
drinks.drinks_liquid_sub(16, 'jbu', 128, pos)
end
@ -499,6 +522,9 @@ minetest.register_node('drinks:liquid_silo', {
if outputstack == 'vessels:glass_bottle' then
drinks.drinks_liquid_sub(4, 'jbo', 256, pos)
end
if outputstack == 'vessels:steel_bottle' then
drinks.drinks_liquid_sub(4, 'jsb', 256, pos)
end
if outputstack == 'bucket:bucket_empty' then
drinks.drinks_liquid_sub(16, 'jbu', 256, pos)
end

View File

@ -8,7 +8,7 @@ for i in ipairs (drinks.drink_table) do
-- The color of the drink is all done in code, so we don't need to have multiple images.
--Actual Node registration
minetest.register_craftitem('drinks:jcu_'..desc, {
drinks.register_item('drinks:jcu_'..desc, 'vessels:drinking_glass', {
description = 'Cup of '..craft..' Juice',
groups = {drink=1},
juice_type = craft,
@ -20,9 +20,9 @@ minetest.register_craftitem('drinks:jcu_'..desc, {
end,
})
minetest.register_craftitem('drinks:jbo_'..desc, {
drinks.register_item('drinks:jbo_'..desc, 'vessels:glass_bottle',{
description = 'Bottle of '..craft..' Juice',
groups = {drink=1},
groups = {drink = 1},
juice_type = craft,
inventory_image = 'drinks_bottle_contents.png^[colorize:'..color..':200^drinks_glass_bottle.png',
on_use = function(itemstack, user, pointed_thing)
@ -32,6 +32,17 @@ minetest.register_craftitem('drinks:jbo_'..desc, {
end,
})
drinks.register_item('drinks:jsb_'..desc, 'vessels:steel_bottle',{
description = 'Heavy Steel Bottle ('..craft..' Juice)',
groups = {drink = 1},
inventory_image = 'vessels_steel_bottle.png',
on_use = function(itemstack, user, pointed_thing)
thirsty.drink(user, 8, 20)
local eat_func = minetest.item_eat((health*2), 'vessels:steel_bottle')
return eat_func(itemstack, user, pointed_thing)
end,
})
minetest.register_craftitem('drinks:jbu_'..desc, {
description = 'Bucket of '..craft..' Juice',
juice_type = craft,

View File

@ -8,9 +8,8 @@ for i in ipairs (drinks.drink_table) do
health = health or 1
--Actual Node registration
minetest.register_craftitem('drinks:jcu_'..desc, {
drinks.register_item( 'drinks:jcu_'..desc, 'vessels:drinking_glass', {
description = 'Cup of '..craft..' Juice',
groups = {drink=1},
juice_type = craft,
inventory_image = 'drinks_glass_contents.png^[colorize:'..color..':200^drinks_drinking_glass.png',
on_use = function(itemstack, user, pointed_thing)
@ -19,7 +18,7 @@ minetest.register_craftitem('drinks:jcu_'..desc, {
end,
})
minetest.register_craftitem('drinks:jbo_'..desc, {
drinks.register_item( 'drinks:jbo_'..desc, 'vessels:glass_bottle', {
description = 'Bottle of '..craft..' Juice',
groups = {drink=1},
juice_type = craft,
@ -30,6 +29,17 @@ minetest.register_craftitem('drinks:jbo_'..desc, {
end,
})
drinks.register_item( 'drinks:jsb_'..desc, 'vessels:steel_bottle', {
description = 'Heavy Steel Bottle ('..craft..' Juice)',
groups = {drink=1},
juice_type = craft,
inventory_image = 'vessels_steel_bottle.png',
on_use = function(itemstack, user, pointed_thing)
local eat_func = minetest.item_eat((health*2), 'vessels:glass_bottle')
return eat_func(itemstack, user, pointed_thing)
end,
})
minetest.register_craftitem('drinks:jbu_'..desc, {
description = 'Bucket of '..craft..' Juice',
juice_type = craft,

View File

@ -78,6 +78,35 @@ if minetest.get_modpath('farming') then
table.insert(drinks.drink_table, {'rhubarb', 'Rhubarb', '#fb8461'})
end
-- replace craftitem to node definition
-- use existing node as template (e.g. 'vessel:glass_bottle')
drinks.register_item = function( name, template, def )
local template_def = minetest.registered_nodes[template]
if template_def then
local drinks_def = table.copy(template_def)
-- replace/add values
for k,v in pairs(def) do
if k == "groups" then
-- special handling for groups: merge instead replace
for g,n in pairs(v) do
drinks_def[k][g] = n
end
else
drinks_def[k]=v
end
end
if def.inventory_image then
drinks_def.wield_image = drinks_def.inventory_image
drinks_def.tiles = { drinks_def.inventory_image }
end
minetest.register_node( name, drinks_def )
end
end
if minetest.get_modpath('thirsty') then
dofile(minetest.get_modpath('drinks')..'/drinks.lua')
else