local S = minetest.get_translator("mcl_brewing_stand") local function active_brewing_formspec(fuel_percent, brew_percent) return "size[9,8.75]".. "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png]".. -- "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory_active.png]".. "label[4,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Brewing Stand"))).."]".. "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. "list[current_player;main;0,4.5;9,3;9]".. mcl_formspec.get_itemslot_bg(0,4.5,9,3).. "list[current_player;main;0,7.75;9,1;]".. mcl_formspec.get_itemslot_bg(0,7.75,9,1).. "list[current_name;fuel;0.5,1.75;1,1;]".. mcl_formspec.get_itemslot_bg(0.5,1.75,1,1).."image[0.5,1.75;1,1;mcl_brewing_fuel_bg.png]".. "list[current_name;input;2.75,0.5;1,1;]".. mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. "list[context;stand;4.5,2.5;1,1;]".. mcl_formspec.get_itemslot_bg(4.5,2.5,1,1).."image[4.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. "list[context;stand;6,2.8;1,1;1]".. mcl_formspec.get_itemslot_bg(6,2.8,1,1).."image[6,2.8;1,1;mcl_brewing_bottle_bg.png]".. "list[context;stand;7.5,2.5;1,1;2]".. mcl_formspec.get_itemslot_bg(7.5,2.5,1,1).."image[7.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. "image[2.7,3.33;1.28,0.41;mcl_brewing_burner.png^[lowpart:".. (100-fuel_percent)..":mcl_brewing_burner_active.png^[transformR270]".. "image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png^[lowpart:".. (brew_percent)..":mcl_brewing_bubbles_active.png]".. "listring[current_player;main]".. "listring[current_name;fuel]".. "listring[current_name;input]".. "listring[context;stand]" end local brewing_formspec = "size[9,8.75]".. "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png]".. "label[4,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Brewing Stand"))).."]".. "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. "list[current_player;main;0,4.5;9,3;9]".. mcl_formspec.get_itemslot_bg(0,4.5,9,3).. "list[current_player;main;0,7.75;9,1;]".. mcl_formspec.get_itemslot_bg(0,7.75,9,1).. "list[current_name;fuel;0.5,1.75;1,1;]".. mcl_formspec.get_itemslot_bg(0.5,1.75,1,1).."image[0.5,1.75;1,1;mcl_brewing_fuel_bg.png]".. "list[current_name;input;2.75,0.5;1,1;]".. mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. "list[context;stand;4.5,2.5;1,1;]".. mcl_formspec.get_itemslot_bg(4.5,2.5,1,1).."image[4.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. "list[context;stand;6,2.8;1,1;1]".. mcl_formspec.get_itemslot_bg(6,2.8,1,1).."image[6,2.8;1,1;mcl_brewing_bottle_bg.png]".. "list[context;stand;7.5,2.5;1,1;2]".. mcl_formspec.get_itemslot_bg(7.5,2.5,1,1).."image[7.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. "image[2.7,3.33;1.28,0.41;mcl_brewing_burner.png^[transformR270]".. "image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png]".. "listring[current_player;main]".. "listring[current_name;fuel]".. "listring[current_name;input]".. "listring[context;stand]" local function swap_node(pos, name) local node = minetest.get_node(pos) if node.name == name then return end node.name = name minetest.swap_node(pos, node) end local function brewable(inv) local ingredient = inv:get_stack("input",1):get_name() local stands = {} local stand_size = inv:get_size("stand") local was_alchemy = {false,false,false} for i=1,stand_size do local bottle = inv:get_stack("stand", i):get_name() local alchemy = mcl_potions.get_alchemy(ingredient, bottle) if alchemy then stands[i] = alchemy was_alchemy[i] = true else stands[i] = bottle end end -- if any stand holds a new potion, return the list of new potions for i=1,table.getn(was_alchemy) do if was_alchemy[i] then return stands end end return false end local function brewing_stand_timer(pos, elapsed) -- Inizialize metadata local meta = minetest.get_meta(pos) local fuel_timer = meta:get_float("fuel_timer") or 0 local BREW_TIME = 20 -- all brews brew the same local BURN_TIME = BREW_TIME * 10 local input_item = meta:get_string("input_item") or "" local stand_timer = meta:get_float("stand_timer") or 0 local fuel = meta:get_float("fuel") or 0 local inv = meta:get_inventory() local input_list, stand_list, fuel_list local update = true while update do update = false input_list = inv:get_list("input") stand_list = inv:get_list("stand") fuel_list = inv:get_list("fuel") -- TODO ... fix this. Goal is to reset the process if the stand changes -- for i=1, inv:get_size("stand", i) do -- reset the process due to change -- local _name = inv:get_stack("stand", i):get_name() -- if _name ~= stand_items[i] then -- stand_timer = 0 -- stand_items[i] = _name -- update = true -- need to update the stand with new data -- return 1 -- end -- end local brew_output = brewable(inv) if fuel ~= 0 and brew_output then fuel_timer = fuel_timer + elapsed stand_timer = stand_timer + elapsed if fuel_timer >= BURN_TIME then --replace with more fuel fuel = 0 --force a new fuel grab fuel_timer = 0 end local d = 0.5 minetest.add_particlespawner({ amount = 4, time = 1, minpos = {x=pos.x-d, y=pos.y+0.5, z=pos.z-d}, maxpos = {x=pos.x+d, y=pos.y+2, z=pos.z+d}, minvel = {x=-0.1, y=0, z=-0.1}, maxvel = {x=0.1, y=0.5, z=0.1}, minacc = {x=-0.05, y=0, z=-0.05}, maxacc = {x=0.05, y=.1, z=0.05}, minexptime = 1, maxexptime = 2, minsize = 0.5, maxsize = 2, collisiondetection = true, vertical = false, texture = "mcl_brewing_bubble_sprite.png", }) -- Replace the stand item with the brew result if stand_timer >= BREW_TIME then local input_count = inv:get_stack("input",1):get_count() if (input_count-1) ~= 0 then inv:set_stack("input",1,inv:get_stack("input",1):get_name().." "..(input_count-1)) else inv:set_stack("input",1,"") end for i=1, inv:get_size("stand") do if brew_output[i] then minetest.sound_play("mcl_brewing_complete", {pos=pos, gain=0.4, max_hear_range=6}, true) inv:set_stack("stand", i, brew_output[i]) minetest.sound_play("mcl_potions_bottle_pour", {pos=pos, gain=0.6, max_hear_range=6}, true) end end stand_timer = 0 update = false -- stop the update if brew is complete end elseif fuel == 0 then --get more fuel from fuel_list -- only allow blaze powder fuel local fuel_name = inv:get_stack("fuel",1):get_name() local fuel_count = inv:get_stack("fuel",1):get_count() if fuel_name == "mcl_mobitems:blaze_powder" then -- Grab another fuel if (fuel_count-1) ~= 0 then inv:set_stack("fuel",1,fuel_name.." "..(fuel_count-1)) else inv:set_stack("fuel",1,"") end update = true fuel = 1 else -- no fuel available update = false end end elapsed = 0 end --update formspec local formspec = brewing_formspec local result = false if fuel_timer ~= 0 then local fuel_percent = math.floor(fuel_timer/BURN_TIME*100 % BURN_TIME) local brew_percent = math.floor(stand_timer/BREW_TIME*100) formspec = active_brewing_formspec(fuel_percent, brew_percent*1 % 100) result = true else minetest.get_node_timer(pos):stop() end meta:set_float("fuel_timer", fuel_timer) meta:set_float("stand_timer", stand_timer) meta:set_float("fuel", fuel) -- meta:set_list("stand_items", stand_list) meta:set_string("formspec", formspec) return result end local function allow_metadata_inventory_put(pos, listname, index, stack, player) local name = player:get_player_name() if minetest.is_protected(pos, name) then minetest.record_protection_violation(pos, name) return 0 end local meta = minetest.get_meta(pos) local inv = meta:get_inventory() if listname == "fuel" then -- Test stack with size 1 because we burn one fuel at a time local teststack = ItemStack(stack) teststack:set_count(1) local output, decremented_input = minetest.get_craft_result({method="fuel", width=1, items={teststack}}) if output.time ~= 0 then -- Only allow to place 1 item if fuel get replaced by recipe. -- This is the case for lava buckets. local replace_item = decremented_input.items[1] if replace_item:is_empty() then -- For most fuels, just allow to place everything return stack:get_count() else if inv:get_stack(listname, index):get_count() == 0 then return 1 else return 0 end end else return 0 end elseif listname == "input" then return stack:get_count() elseif listname == "stand" then return 0 end end -- Drop input items of brewing_stand at pos with metadata meta local function drop_brewing_stand_items(pos, meta) local inv = meta:get_inventory() local stack = inv:get_stack("fuel", 1) if not stack:is_empty() then local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} minetest.add_item(p, stack) end local stack = inv:get_stack("input", 1) if not stack:is_empty() then local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} minetest.add_item(p, stack) end for i=1, inv:get_size("stand") do local stack = inv:get_stack("stand", i) if not stack:is_empty() then local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} minetest.add_item(p, stack) end end end local on_rotate if minetest.get_modpath("screwdriver") then on_rotate = screwdriver.rotate_simple end local doc_string = S("To use an brewing_stand, rightclick it.").."\n" S("To brew, place fuel first and/or your ingredient last!") local tiles = {"mcl_brewing_top.png", --top "mcl_brewing_base.png", --bottom "mcl_brewing_side.png", --right "mcl_brewing_side.png", --left "mcl_brewing_side.png", --back "mcl_brewing_side.png^[transformFX"} --front local allow_put = function(pos, listname, index, stack, player) local name = player:get_player_name() if minetest.is_protected(pos, name) then minetest.record_protection_violation(pos, name) return 0 else return stack:get_count() end end local on_put = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local str = "" for i=1, inv:get_size("stand") do local stack = inv:get_stack("stand", i) if not stack:is_empty() then str = str.."1" else str = str.."0" end end minetest.swap_node(pos, {name = "mcl_brewing:stand_"..str}) minetest.get_node_timer(pos):start(1.0) --some code here to enforce only potions getting placed on stands end local after_dig = function(pos, oldnode, oldmetadata, digger) local meta = minetest.get_meta(pos) meta:from_table(oldmetadata) drop_brewing_stand_items(pos, meta) end local on_destruct = function(pos) local meta = minetest.get_meta(pos) drop_brewing_stand_items(pos, meta) end local allow_take = function(pos, listname, index, stack, player) local name = player:get_player_name() if minetest.is_protected(pos, name) then minetest.record_protection_violation(pos, name) return 0 else return stack:get_count() end end local on_take = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local str = "" for i=1, inv:get_size("stand") do local stack = inv:get_stack("stand", i) if not stack:is_empty() then str = str.."1" else str = str.."0" end end minetest.swap_node(pos, {name = "mcl_brewing:stand_"..str}) minetest.get_node_timer(pos):start(1.0) --some code here to enforce only potions getting placed on stands end minetest.register_node("mcl_brewing:stand_000", { description = S("Brewing Stand"), _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), groups = {pickaxey=1, falling_node=1, brewitem=1, not_in_creative_inventory = 0, not_in_craft_guide = 0}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, paramtype2 = "facedir", drawtype = "nodebox", node_box = { type = "fixed", fixed = { {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 } }, sounds = mcl_sounds.node_sound_glass_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, on_metadata_inventory_take = on_take, on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size("input", 1) inv:set_size("fuel", 1) inv:set_size("stand", 3) local form = brewing_formspec meta:set_string("formspec", form) end, on_receive_fields = function(pos, formname, fields, sender) local sender_name = sender:get_player_name() if minetest.is_protected(pos, sender_name) then minetest.record_protection_violation(pos, sender_name) return end end, on_timer = brewing_stand_timer, on_rotate = on_rotate, }) minetest.register_alias("mcl_brewing:stand", "mcl_brewing:stand_000") minetest.register_node("mcl_brewing:stand_100", { description = S("Brewing Stand"), _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, paramtype2 = "facedir", drawtype = "nodebox", node_box = { type = "fixed", fixed = { {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 } }, sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, on_metadata_inventory_take = on_take, on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size("input", 1) inv:set_size("fuel", 1) inv:set_size("stand", 3) local form = brewing_formspec meta:set_string("formspec", form) end, on_receive_fields = function(pos, formname, fields, sender) local sender_name = sender:get_player_name() if minetest.is_protected(pos, sender_name) then minetest.record_protection_violation(pos, sender_name) return end end, on_timer = brewing_stand_timer, on_rotate = on_rotate, }) minetest.register_node("mcl_brewing:stand_010", { description = S("Brewing Stand"), _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, paramtype2 = "facedir", drawtype = "nodebox", node_box = { type = "fixed", fixed = { {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 } }, sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, on_metadata_inventory_take = on_take, on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size("input", 1) inv:set_size("fuel", 1) inv:set_size("stand", 3) local form = brewing_formspec meta:set_string("formspec", form) end, on_receive_fields = function(pos, formname, fields, sender) local sender_name = sender:get_player_name() if minetest.is_protected(pos, sender_name) then minetest.record_protection_violation(pos, sender_name) return end end, on_timer = brewing_stand_timer, on_rotate = on_rotate, }) minetest.register_node("mcl_brewing:stand_001", { description = S("Brewing Stand"), _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, paramtype2 = "facedir", drawtype = "nodebox", node_box = { type = "fixed", fixed = { {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 } }, sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, on_metadata_inventory_take = on_take, on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size("input", 1) inv:set_size("fuel", 1) inv:set_size("stand", 3) local form = brewing_formspec meta:set_string("formspec", form) end, on_receive_fields = function(pos, formname, fields, sender) local sender_name = sender:get_player_name() if minetest.is_protected(pos, sender_name) then minetest.record_protection_violation(pos, sender_name) return end end, on_timer = brewing_stand_timer, on_rotate = on_rotate, }) minetest.register_node("mcl_brewing:stand_110", { description = S("Brewing Stand"), _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, paramtype2 = "facedir", drawtype = "nodebox", node_box = { type = "fixed", fixed = { {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 } }, sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, on_metadata_inventory_take = on_take, on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size("input", 1) inv:set_size("fuel", 1) inv:set_size("stand", 3) local form = brewing_formspec meta:set_string("formspec", form) end, on_receive_fields = function(pos, formname, fields, sender) local sender_name = sender:get_player_name() if minetest.is_protected(pos, sender_name) then minetest.record_protection_violation(pos, sender_name) return end end, on_timer = brewing_stand_timer, on_rotate = on_rotate, }) minetest.register_node("mcl_brewing:stand_101", { description = S("Brewing Stand"), _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, paramtype2 = "facedir", drawtype = "nodebox", node_box = { type = "fixed", fixed = { {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 } }, sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, on_metadata_inventory_take = on_take, on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size("input", 1) inv:set_size("fuel", 1) inv:set_size("stand", 3) local form = brewing_formspec meta:set_string("formspec", form) end, on_receive_fields = function(pos, formname, fields, sender) local sender_name = sender:get_player_name() if minetest.is_protected(pos, sender_name) then minetest.record_protection_violation(pos, sender_name) return end end, on_timer = brewing_stand_timer, on_rotate = on_rotate, }) minetest.register_node("mcl_brewing:stand_011", { description = S("Brewing Stand"), _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, paramtype2 = "facedir", drawtype = "nodebox", node_box = { type = "fixed", fixed = { {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 } }, sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, on_metadata_inventory_take = on_take, on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size("input", 1) inv:set_size("fuel", 1) inv:set_size("stand", 3) local form = brewing_formspec meta:set_string("formspec", form) end, on_receive_fields = function(pos, formname, fields, sender) local sender_name = sender:get_player_name() if minetest.is_protected(pos, sender_name) then minetest.record_protection_violation(pos, sender_name) return end end, on_timer = brewing_stand_timer, on_rotate = on_rotate, }) minetest.register_node("mcl_brewing:stand_111", { description = S("Brewing Stand"), _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, paramtype2 = "facedir", drawtype = "nodebox", node_box = { type = "fixed", fixed = { {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 } }, sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, on_metadata_inventory_take = on_take, on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size("input", 1) inv:set_size("fuel", 1) inv:set_size("stand", 3) local form = brewing_formspec meta:set_string("formspec", form) end, on_receive_fields = function(pos, formname, fields, sender) local sender_name = sender:get_player_name() if minetest.is_protected(pos, sender_name) then minetest.record_protection_violation(pos, sender_name) return end end, on_timer = brewing_stand_timer, on_rotate = on_rotate, }) minetest.register_craft({ output = "mcl_brewing:stand", recipe = { { "", "mcl_mobitems:blaze_rod", "" }, { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble" }, } })