--Stuff from vessels -- - -- Copyright (C) 2012 Vanessa Ezekowitz -- Copyright (C) 2012 celeron55, Perttu Ahola -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- at your option) any later version. -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . local vessels_shelf_formspec = "size[8,7;]".. default.gui_bg.. default.gui_bg_img.. default.gui_slots.. "list[context;vessels;0,0.3;8,2;]".. "list[current_player;main;0,2.85;8,1;]".. "list[current_player;main;0,4.08;8,3;8]".. "listring[context;vessels]".. "listring[current_player;main]".. default.get_hotbar_bg(0,2.85) minetest.register_node("witchcraft:shelf", { description = "Potion shelf", tiles = {"default_wood.png", "default_wood.png", "default_wood.png^vessels_shelf.png^vessels_shelf_overlay.png"}, is_ground_content = false, groups = {choppy=3,oddly_breakable_by_hand=2,flammable=3}, sounds = default.node_sound_wood_defaults(), on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", vessels_shelf_formspec) local inv = meta:get_inventory() inv:set_size("vessels", 8*2) end, can_dig = function(pos,player) local meta = minetest.get_meta(pos); local inv = meta:get_inventory() return inv:is_empty("vessels") end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local to_stack = inv:get_stack(listname, index) if listname == "vessels" then if minetest.get_item_group(stack:get_name(), "potion") ~= 0 or minetest.get_item_group(stack:get_name(), "potion2") ~= 0 and to_stack:is_empty() then return 1 else return 0 end end end, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local stack = inv:get_stack(from_list, from_index) local to_stack = inv:get_stack(to_list, to_index) if to_list == "vessels" then if minetest.get_item_group(stack:get_name(), "potion") ~= 0 or minetest.get_item_group(stack:get_name(), "potion2") ~= 0 and to_stack:is_empty() then return 1 else return 0 end end end, on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) minetest.log("action", player:get_player_name().. " moves stuff in vessels shelf at "..minetest.pos_to_string(pos)) end, on_metadata_inventory_put = function(pos, listname, index, stack, player) minetest.log("action", player:get_player_name().. " moves stuff to vessels shelf at "..minetest.pos_to_string(pos)) end, on_metadata_inventory_take = function(pos, listname, index, stack, player) minetest.log("action", player:get_player_name().. " takes stuff from vessels shelf at "..minetest.pos_to_string(pos)) end, }) --my stuff -- Copyright (C) 2016 DOOmed -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU Lesser General Public License as published by -- the Free Software Foundation; either version 2.1 of the License, or -- (at your option) any later version. -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Lesser General Public License for more details. -- You should have received a copy of the GNU Lesser General Public License along -- with this program; if not, write to the Free Software Foundation, Inc., -- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --ingredients minetest.register_node("witchcraft:bottle_eyes", { description = "Jar of eyes", drawtype = "plantlike", tiles = {"witchcraft_jar_eyes.png"}, inventory_image = "witchcraft_jar_eyes.png", wield_image = "witchcraft_jar_eyes.png", paramtype = "light", is_ground_content = false, walkable = false, stack_max = 1, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {vessel=1,dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), }) minetest.register_node("witchcraft:bottle_slime", { description = "Jar of Slime", drawtype = "plantlike", tiles = {"witchcraft_jar_slime.png"}, inventory_image = "witchcraft_jar_slime.png", wield_image = "witchcraft_jar_slime.png", paramtype = "light", is_ground_content = false, walkable = false, stack_max = 1, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {vessel=1,dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), }) minetest.register_craftitem("witchcraft:herb", { description = "herb", inventory_image = "witchcraft_herbs.png" }) minetest.register_craftitem("witchcraft:tooth", { description = "tooth", inventory_image = "witchcraft_tooth.png" }) minetest.register_craftitem("witchcraft:horn", { description = "horn", inventory_image = "witchcraft_horn.png" }) minetest.register_craftitem("witchcraft:bone", { description = "bone", inventory_image = "witchcraft_bone.png" }) --crafting minetest.register_craft({ output = 'witchcraft:shelf', recipe = { {'group:wood', 'group:wood', 'group:wood'}, {'group:potion2', 'group:potion2', 'group:potion2'}, {'group:wood', 'group:wood', 'group:wood'}, } }) if minetest.get_modpath("moreplants") then minetest.register_craft({ output = 'witchcraft:bottle_eyes', recipe = { {'moreplants:eye'}, {'moreplants:eye'}, {'vessels:drinking_glass'}, } }) minetest.register_craft({ output = "moreplants:eye 2", type = "shapeless", recipe = {"witchcraft:bottle_eyes"} }) minetest.register_craft({ output = "witchcraft:herb 4", type = "shapeless", recipe = {"moreplants:bush"} }) minetest.register_craft({ output = "witchcraft:herb 4", type = "shapeless", recipe = {"moreplants:weed"} }) minetest.register_craft({ output = "witchcraft:herb 4", type = "shapeless", recipe = {"moreplants:groundfung"} }) else minetest.register_craft({ output = "witchcraft:herb 4", type = "shapeless", recipe = {"default:grass_5"} }) minetest.register_craft({ output = "witchcraft:herb 4", type = "shapeless", recipe = {"default:grass_4"} }) minetest.register_craft({ output = "witchcraft:herb 4", type = "shapeless", recipe = {"default:grass_3"} }) minetest.register_craft({ output = "witchcraft:herb 4", type = "shapeless", recipe = {"default:grass_2"} }) minetest.register_craft({ output = "witchcraft:herb 4", type = "shapeless", recipe = {"default:grass_1"} }) minetest.register_craft({ output = 'witchcraft:bottle_eyes', recipe = { {'bucket:bucket_water'}, {'vessels:drinking_glass'}, } }) end minetest.register_craft({ output = 'witchcraft:pot', recipe = { {'default:copper_lump', '', 'default:copper_lump'}, {'default:copper_lump', '', 'default:copper_lump'}, {'', 'default:copper_lump', ''}, } }) minetest.register_craft({ output = 'witchcraft:mortar', recipe = { {'default:stone', '', 'default:stone'}, {'default:stone', '', 'default:stone'}, {'', 'default:stone', ''}, } }) minetest.register_craft({ output = 'witchcraft:pentagram', recipe = { {'default:torch', 'default:clay', 'default:torch'}, } }) minetest.register_craft({ output = 'witchcraft:small_bottle', recipe = { {'vessels:glass_fragments', 'vessels:glass_fragments', 'vessels:glass_fragments'}, } }) minetest.register_craft({ output = 'witchcraft:bottle_medicine 2', recipe = { {'witchcraft:small_bottle', 'witchcraft:potion_red', 'witchcraft:small_bottle'}, }, replacements = { {"witchcraft:potion_red", "vessels:glass_bottle"} } }) minetest.register_craft({ output = 'witchcraft:mud_bottle', recipe = { {'default:dirt'}, {'witchcraft:small_bottle'}, }, }) minetest.register_craft({ output = 'witchcraft:bone_bottle', recipe = { {'bones:bones'}, {'witchcraft:small_bottle'}, }, }) minetest.register_craft({ output = 'witchcraft:herb_bottle', recipe = { {'witchcraft:herb'}, {'witchcraft:small_bottle'}, }, }) minetest.register_craft({ output = 'witchcraft:slime_bottle', recipe = { {'witchcraft:bottle_slime'}, {'witchcraft:small_bottle'}, }, replacements = { {"witchcraft:bottle_slime", "vessels:drinking_glass"} } }) minetest.register_craft({ output = 'witchcraft:herb', recipe = { {'witchcraft:herb_bottle'}, }, replacements = { {"witchcraft:herb_bottle", "witchcraft:small_bottle"} } }) minetest.register_craft({ output = 'bones:bones', recipe = { {'witchcraft:bone_bottle'}, }, replacements = { {"witchcraft:bone_bottle", "witchcraft:small_bottle"} } }) minetest.register_craft({ output = 'default:dirt', recipe = { {'witchcraft:mud_bottle'}, }, replacements = { {"witchcraft:mud_bottle", "witchcraft:small_bottle"} } }) minetest.register_craft({ output = 'witchcraft:bottle_slime', recipe = { {'witchcraft:slime_bottle'}, }, replacements = { {"witchcraft:slime_bottle", "witchcraft:small_bottle"} } }) minetest.register_craft({ output = 'witchcraft:slime_bottle', recipe = { {'witchcraft:bottle_slime'}, {'witchcraft:small_bottle'}, }, }) minetest.register_craft({ output = 'vessels:glass_fragments 3', recipe = { {'default:glass'}, }, }) minetest.register_craft({ output = 'witchcraft:bone 4', recipe = { {'bones:bones', 'bones:bones'}, }, }) --teeth from sand, maybe fossilised? minetest.override_item("default:sand", { drop = { max_items = 1, items = { { items = {"witchcraft:tooth"}, rarity = 30, }, { items = {"default:sand"}, } } }, }) minetest.register_craft({ type = "shapeless", output = "default:sand", recipe = {"witchcraft:tooth"}, }) --splash potions crafting minetest.register_craft({ output = 'witchcraft:splash_yellwgrn', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_yllwgrn'}, } }) minetest.register_craft({ output = 'witchcraft:splash_orange', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_orange'}, } }) minetest.register_craft({ output = 'witchcraft:splash_purple', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_purple'}, } }) minetest.register_craft({ output = 'witchcraft:splash_magenta', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_magenta'}, } }) minetest.register_craft({ output = 'witchcraft:splash_cyan', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_cyan'}, } }) minetest.register_craft({ output = 'witchcraft:splash_red', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_red'}, } }) minetest.register_craft({ output = 'witchcraft:splash_green', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_green'}, } }) minetest.register_craft({ output = 'witchcraft:splash_grey', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_grey'}, } }) minetest.register_craft({ output = 'witchcraft:splash_brown', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_brown'}, } }) minetest.register_craft({ output = 'witchcraft:splash_redbrown', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_redbrown'}, } }) minetest.register_craft({ output = 'witchcraft:splash_ggreen', recipe = { {'vessels:glass_fragments'}, {'witchcraft:potion_ggreen'}, } }) --empty cooking pot minetest.register_node("witchcraft:pot", { description = "magic cooking pot", tiles = { "witchcraft_pot_top.png", "witchcraft_pot_bottom.png", "witchcraft_pot_side.png", "witchcraft_pot_side.png", "witchcraft_pot_side.png", "witchcraft_pot_side.png" }, drawtype = "nodebox", paramtype = "light", node_box = { type = "fixed", fixed = { {-0.4375, -0.5, -0.4375, 0.4375, -0.4375, 0.4375}, -- NodeBox1 {-0.375, -0.4375, -0.375, 0.375, -0.375, 0.375}, -- NodeBox2 {-0.3125, -0.375, -0.3125, 0.3125, -0.3125, 0.3125}, -- NodeBox3 {-0.375, -0.3125, -0.375, 0.375, -0.25, 0.375}, -- NodeBox4 {-0.4375, -0.25, -0.4375, 0.4375, -0.1875, 0.4375}, -- NodeBox5 {-0.5, -0.1875, -0.5, 0.5, -0.125, 0.5}, -- NodeBox7 {-0.5, -0.125, -0.5, 0.5, 0.3125, -0.3125}, -- NodeBox8 {-0.5, -0.125, 0.3125, 0.5, 0.3125, 0.5}, -- NodeBox9 {0.3125, -0.1875, -0.5, 0.5, 0.3125, 0.5}, -- NodeBox10 {-0.5, -0.125, -0.5, -0.3125, 0.3125, 0.5}, -- NodeBox11 {-0.4375, 0.375, 0.3125, 0.4375, 0.5, 0.4375}, -- NodeBox12 {-0.4375, 0.375, -0.4375, 0.4375, 0.5, -0.3125}, -- NodeBox13 {-0.4375, 0.375, -0.4375, 0.4375, 0.5, -0.3125}, -- NodeBox14 {0.3125, 0.375, -0.4375, 0.4375, 0.5, 0.4375}, -- NodeBox15 {-0.4375, 0.375, -0.4375, -0.3125, 0.5, 0.4375}, -- NodeBox16 {-0.375, 0.3125, -0.375, 0.375, 0.375, -0.3125}, -- NodeBox17 {-0.375, 0.3125, 0.3125, 0.375, 0.375, 0.375}, -- NodeBox18 {0.3125, 0.3125, -0.375, 0.375, 0.375, 0.375}, -- NodeBox19 {-0.375, 0.3125, -0.375, -0.3125, 0.375, 0.375}, -- NodeBox20 } }, on_rightclick = function(pos, node, clicker, itemstack, _) local wield_item = itemstack:get_name() if wield_item == "bucket:bucket_water" or wield_item == "bucket:bucket_river_water" then minetest.set_node(pos, {name="witchcraft:pot_blue", param2=node.param2}) return ItemStack("bucket:bucket_empty") elseif wield_item == "witchcraft:potion_blue" then minetest.set_node(pos, {name="witchcraft:pot_blue", param2=node.param2}) return ItemStack("vessels:glass_bottle") elseif wield_item == "vessels:drinking_glass" then itemstack:set_count(itemstack:get_count() - 1) minetest.add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:bottle_slime") end end, groups = {cracky=1, falling_node=1, oddly_breakable_by_hand=1} }) --level 1 potions from cooking pot local witchcraft = {} --the old recipes witchcraft.pot = { {"blue", "brown", "default:dirt", "blue2", "moreplants:bullrush", "red", "purple"}, {"blue2", "yellow", "default:steelblock", "yellow", "default:copperblock", "green2", "aqua"}, {"darkpurple", "cyan", "flowers:mushroom_red", "green", "moreplants:weed", "yellow", "redbrown"}, {"purple", "blue2", "nalc_flowers:lily_pad", "gpurple", "default:mese_crystal", "magenta", "darkpurple"}, {"magenta", "purple", "witchcraft:bottle_eyes", "darkpurple", "moreplants:mushroom", "purple", "darkpurple"}, {"red", "grey", "default:gravel", "yllwgrn", "default:flint", "blue", "purple"}, {"redbrown", "magenta", "flowers:mushroom_brown", "magenta", "default:stone", "grey", "brown"}, {"brown", "gred", "witchcraft:herb", "grey", "moreplants:bush", "red", "redbrown"}, {"orange", "redbrown", "witchcraft:bottle_slime", "yellow", "default:steelblock", "green", "yllwgrn"}, {"gold", "yllwgrn", "tnt:tnt", "", "", "green", "yllwgrn"}, {"yellow", "yllwgrn", "tnt:tnt", "yllwgrn", "default:coal_lump", "darkpurple", "redbrown"}, {"yllwgrn", "green", "default:gold_lump", "orange", "mobs:lava_orb", "grey", "magenta"}, {"green2", "darkpurple", "default:glass", "red", "witchcraft:herb", "blue2", "aqua"}, {"green", "green2", "default:apple", "ggreen", "default:mese_crystal", "orange", "yllwgrn"}, {"aqua", "", "", "", "", "blue", "cyan"}, {"cyan", "aqua", "default:diamond", "gcyan", "default:mese_crystal", "green", "yellow"}, {"grey", "orange", "default:torch", "brown", "default:apple", "yllwgrn", "magenta"}, {"ggreen", "", "", "", "", "", ""}, {"gpurple", "", "", "", "", "", ""}, {"gred", "red", "default:apple", "grey", "default:gravel", "", ""}, {"gcyan", "", "", "", "", "", ""}, } --new recipes witchcraft.pot_new = { {"blue", "blue2", "nalc_flowers:lily_pad", "brown", "default:dirt", "red", "purple"}, {"blue2", "green", "default:papyrus", "", "", "gred", "magenta"}, {"green", "green2", "default:sapling", "", "", "yellow", "yllwgrn"}, {"green2", "yellow", "default:mese_crystal_fragment", "", "", "blue", "cyan"}, {"yellow", "ggreen", "flowers:mushroom_brown", "", "", "green", "yllwgrn"}, {"ggreen", "cyan", "witchcraft:slime_bottle", "", "", "gcyan", "aqua"}, {"cyan", "gcyan", "witchcraft:bottle_medicine", "", "", "blue", "blue2"}, {"gcyan", "orange", "default:torch", "", "", "ggreen", "aqua"}, {"orange", "yllwgrn", "tnt:gunpowder", "", "", "red", "redbrown"}, {"yllwgrn", "gold", "default:steel_ingot", "", "", "green", "green2"}, {"gold", "aqua", "default:diamond", "", "", "", ""}, {"aqua", "", "", "", "", "", ""}, {"brown", "redbrown", "flowers:mushroom_red", "", "", "red", "redbrown"}, {"redbrown", "gred", "default:apple", "", "", "", ""}, {"gred", "red", "witchcraft:herb", "", "", "blue2", "magenta"}, {"red", "magenta", "witchcraft:tooth", "", "", "blue", "purple"}, {"magenta", "gpurple", "witchcraft:bottle_slime", "", "", "cyan", "darkpurple"}, {"gpurple", "purple", "witchcraft:bone_bottle", "", "", "yllwgrn", "green2"}, {"purple", "darkpurple", "default:glass", "", "", "yellow", "green"}, {"darkpurple", "silver", "default:steel_ingot", "", "", "", ""}, {"silver", "grey", "witchcraft:bone", "", "", "", ""}, {"grey", "aqua", "default:diamond", "", "", "", ""}, } --potion pots for _, row in ipairs(witchcraft.pot_new) do --change 'pot_new' to 'pot' for the old recipes local color = row[1] local newcolor = row[2] local newcolor2 = row[4] local ingredient = row[3] local ingredient2 = row[5] local combine = row[6] local cresult = row[7] minetest.register_node("witchcraft:pot_"..color, { tiles = { { name = "witchcraft_pot_"..color..".png", animation = {type="vertical_frames", length=3.0 } }, "witchcraft_pot_bottom.png", "witchcraft_pot_side.png", "witchcraft_pot_side.png", "witchcraft_pot_side.png", "witchcraft_pot_side.png" }, drawtype = "nodebox", paramtype = "light", drop = { items = { {items = {'witchcraft:pot'}, rarity = 1}, } }, node_box = { type = "fixed", fixed = { {-0.4375, -0.5, -0.4375, 0.4375, -0.4375, 0.4375}, -- NodeBox1 {-0.375, -0.4375, -0.375, 0.375, -0.375, 0.375}, -- NodeBox2 {-0.3125, -0.375, -0.3125, 0.3125, -0.3125, 0.3125}, -- NodeBox3 {-0.375, -0.3125, -0.375, 0.375, 0.5, 0.375}, -- NodeBox4 {-0.4375, -0.25, -0.4375, 0.4375, 0.3125, 0.4375}, -- NodeBox5 {-0.5, -0.1875, -0.5, 0.5, 0.3125, 0.5}, -- NodeBox6 {-0.4375, 0.375, -0.4375, 0.4375, 0.5, 0.4375}, -- NodeBox7 } }, on_rightclick = function(pos, node, clicker, itemstack, _) local wield_item = itemstack:get_name() if wield_item == "vessels:glass_bottle" then local wield_items_count = itemstack:get_count() local potions_count = (wield_items_count <= 3 and wield_items_count) or 3 local wield_items_left = (wield_items_count - potions_count) itemstack:set_count((wield_items_left < 0 and 0) or wield_items_left) for i = 1, potions_count do minetest.add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) end minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2}) elseif wield_item == ingredient then minetest.set_node(pos, {name="witchcraft:pot_"..newcolor, param2=node.param2}) itemstack:take_item() elseif wield_item == ingredient2 then minetest.set_node(pos, {name="witchcraft:pot_"..newcolor2, param2=node.param2}) itemstack:take_item() elseif wield_item == "bucket:bucket_water" or wield_item == "bucket:bucket_river_water" then minetest.set_node(pos, {name="witchcraft:pot_blue", param2=node.param2}) itemstack:replace("bucket:bucket_empty") elseif wield_item == "witchcraft:potion_"..combine then minetest.set_node(pos, {name="witchcraft:pot_"..cresult, param2=node.param2}) itemstack:replace("vessels:glass_bottle") end return itemstack end, groups = {cracky=1, falling_node=1, oddly_breakable_by_hand=1} }) end --pot effects minetest.register_abm({ nodenames = {"witchcraft:pot_water", "witchcraft:pot_gold", "witchcraft:pot_redbrown", "witchcraft:pot_blue2", "witchcraft:pot_cyan", "witchcraft:pot_green", "witchcraft:pot_green2", "witchcraft:pot_aqua", "witchcraft:pot_yellow", "witchcraft:pot_yllwgrn", "witchcraft:pot_red", "witchcraft:pot_magenta", "witchcraft:pot_brown"}, interval = 0.5, chance = 1, action = function(pos, node) minetest.add_particlespawner({ amount = 2, time = 1, minpos = {x=pos.x-0.1, y=pos.y, z=pos.z-0.1}, maxpos = {x=pos.x+0.1, y=pos.y, z=pos.z+0.1}, minvel = {x=0, y=0.5, z=0}, maxvel = {x=0, y=0.6, z=0}, minacc = {x=0, y=0.2, z=0}, maxacc = {x=0, y=0.3, z=0}, minexptime = 1, maxexptime = 2, minsize = 2, maxsize = 3, collisiondetection = false, texture = "witchcraft_bubbles.png" }) end }) minetest.register_abm({ nodenames = {"witchcraft:pot_ggreen", "witchcraft:pot_gred", "witchcraft:pot_gpurple", "witchcraft:pot_gcyan"}, interval = 0.5, chance = 1, action = function(pos, node) minetest.add_particlespawner({ amount = 2, time = 1, minpos = {x=pos.x-0.1, y=pos.y, z=pos.z-0.1}, maxpos = {x=pos.x+0.1, y=pos.y, z=pos.z+0.1}, minvel = {x=0, y=0.5, z=0}, maxvel = {x=0, y=0.6, z=0}, minacc = {x=0, y=0.2, z=0}, maxacc = {x=0, y=0.3, z=0}, minexptime = 1, maxexptime = 2, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_light_over.png" }) end }) minetest.register_abm({ nodenames = {"witchcraft:pot_purple"}, interval = 0.5, chance = 1, action = function(pos, node) minetest.add_particlespawner({ amount = 2, time = 1, minpos = {x=pos.x-0.1, y=pos.y, z=pos.z-0.1}, maxpos = {x=pos.x+0.1, y=pos.y, z=pos.z+0.1}, minvel = {x=0, y=0.5, z=0}, maxvel = {x=0, y=0.6, z=0}, minacc = {x=0, y=0.2, z=0}, maxacc = {x=0, y=0.3, z=0}, minexptime = 1, maxexptime = 2, minsize = 5, maxsize = 8, collisiondetection = false, texture = "witchcraft_smoke.png" }) end }) minetest.register_abm({ nodenames = {"witchcraft:pot_darkpurple"}, interval = 0.5, chance = 1, action = function(pos, node) minetest.add_particlespawner({ amount = 2, time = 1, minpos = {x=pos.x-0.1, y=pos.y, z=pos.z-0.1}, maxpos = {x=pos.x+0.1, y=pos.y, z=pos.z+0.1}, minvel = {x=0, y=0.5, z=0}, maxvel = {x=0, y=0.6, z=0}, minacc = {x=0, y=0.2, z=0}, maxacc = {x=0, y=0.3, z=0}, minexptime = 1, maxexptime = 2, minsize = 2, maxsize = 3, collisiondetection = false, texture = "witchcraft_symbol.png" }) end }) minetest.register_abm({ nodenames = {"witchcraft:pot_orange"}, interval = 0.5, chance = 1, action = function(pos, node) minetest.add_particlespawner({ amount = 2, time = 1, minpos = {x=pos.x-0.1, y=pos.y, z=pos.z-0.1}, maxpos = {x=pos.x+0.1, y=pos.y, z=pos.z+0.1}, minvel = {x=0, y=0.5, z=0}, maxvel = {x=0, y=0.6, z=0}, minacc = {x=0, y=0.2, z=0}, maxacc = {x=0, y=0.3, z=0}, minexptime = 1, maxexptime = 2, minsize = 2, maxsize = 3, collisiondetection = false, texture = "witchcraft_flame.png" }) end }) --small bottle and contents minetest.register_node("witchcraft:small_bottle", { description = "Small bottle", drawtype = "plantlike", tiles = {"witchcraft_small_bottle.png"}, wield_image = "witchcraft_small_bottle.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {vessel=1,dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_small_bottle.png", }) minetest.register_node("witchcraft:bone_bottle", { description = "Small bottle of bone dust", drawtype = "plantlike", tiles = {"witchcraft_bone_bottle.png"}, wield_image = "witchcraft_bone_bottle.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {vessel=1,dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_bone_bottle.png", }) minetest.register_node("witchcraft:slime_bottle", { description = "Small bottle of slime", drawtype = "plantlike", tiles = {"witchcraft_slime_bottle.png"}, wield_image = "witchcraft_slime_bottle.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {vessel=1,dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_slime_bottle.png", }) minetest.register_node("witchcraft:herb_bottle", { description = "Small bottle of herbs", drawtype = "plantlike", tiles = {"witchcraft_herb_bottle.png"}, wield_image = "witchcraft_herb_bottle.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {vessel=1,dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_herb_bottle.png", }) minetest.register_node("witchcraft:mud_bottle", { description = "Small bottle of mud", drawtype = "plantlike", tiles = {"witchcraft_mud_bottle.png"}, wield_image = "witchcraft_mud_bottle.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {vessel=1,dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_mud_bottle.png", }) minetest.register_node("witchcraft:bottle_medicine", { description = "Small bottle of Medicine", drawtype = "plantlike", tiles = {"witchcraft_medicine_bottle.png"}, wield_image = "witchcraft_medicine_bottle.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {vessel=1,dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_medicine_bottle.png", on_use = function(itemstack, player) local health = player:get_hp() player:set_hp(health+10) itemstack:replace("witchcraft:small_bottle") return itemstack end, }) --splash effects minetest.register_entity("witchcraft:tnt_splash", { textures = {"witchcraft_splash_yellgrn.png"}, velocity = 0.1, damage = 2, collisionbox = {0, 0, 0, 0, 0, 0}, on_step = function(self, obj, pos) local remove = minetest.after(2, function() self.object:remove() end) local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() ~= nil then if obj:get_luaentity().name ~= "witchcraft:tnt_splash" and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= "gauges:hp_bar" then obj:punch(self.object, 1.0, { full_punch_interval=1.0, damage_groups={fleshy=3}, }, nil) minetest.sound_play("default_break_glass", { pos = pos, gain = 1.0, max_hear_distance = 20, }) tnt.boom(pos, {damage_radius=5,radius=3,ignore_protection=false}) self.object:remove() return end end end local n = minetest.get_node(pos).name if n ~= "witchcraft:tnt_splash" and n ~= "air" then minetest.sound_play("default_break_glass", { pos = pos, gain = 1.0, max_hear_distance = 20, }) tnt.boom(pos, {damage_radius=5,radius=3,ignore_protection=false}) self.object:remove() end end, }) minetest.register_entity("witchcraft:fire_splash", { textures = {"witchcraft_splash_orange.png"}, velocity = 0.1, damage = 2, collisionbox = {0, 0, 0, 0, 0, 0}, on_step = function(self, obj, pos) local remove = minetest.after(2, function() self.object:remove() end) local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() then if obj:get_luaentity().name ~= "witchcraft:fire_splash" and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= "gauges:hp_bar" then obj:punch(self.object, 1.0, { full_punch_interval=1.0, damage_groups={fleshy=1}, }, nil) minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() return end end end local is_used = false for dx=0,1 do for dy=0,1 do for dz=0,1 do local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz} local t = {x=pos.x+dx, y=pos.y+1+dy, z=pos.z+dz} local n = minetest.get_node(p).name if n ~= "witchcraft:fire_splash" and n ~= "air" then is_used = true if minetest.is_protected(pos, "") then return end minetest.set_node(t, {name="fire:basic_flame"}) if minetest.registered_nodes[n].groups.flammable then minetest.set_node(p, {name="fire:basic_flame"}) end minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) end end end end if is_used then self.object:remove() end end, }) minetest.register_entity("witchcraft:death_splash", { textures = {"witchcraft_splash_grey.png"}, velocity = 0.1, damage = 2, collisionbox = {0, 0, 0, 0, 0, 0}, on_step = function(self, obj, pos) local remove = minetest.after(2, function() self.object:remove() end) local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() ~= nil then if obj:get_luaentity().name ~= "witchcraft:death_splash" and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= "gauges:hp_bar" then obj:punch(self.object, 1.0, { full_punch_interval=1.0, damage_groups={fleshy=50}, }, nil) minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() return end end end local n = minetest.get_node(pos).name if n ~= "witchcraft:death_splash" and n ~= "air" then minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() end end, }) minetest.register_entity("witchcraft:heal_splash", { textures = {"witchcraft_splash_red.png"}, velocity = 0.1, damage = 2, collisionbox = {0, 0, 0, 0, 0, 0}, on_step = function(self, obj, pos) local remove = minetest.after(2, function() self.object:remove() end) local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() ~= nil then if obj:get_luaentity().name ~= "witchcraft:heal_splash" and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= "gauges:hp_bar" then obj:punch(self.object, 1.0, { full_punch_interval=1.0, damage_groups={fleshy=-20}, }, nil) minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() return end end end local n = minetest.get_node(pos).name if n ~= "witchcraft:heal_splash" and n ~= "air" then minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() return end end, }) minetest.register_entity("witchcraft:slow_splash", { textures = {"witchcraft_splash_redbrown.png"}, velocity = 0.1, damage = 2, collisionbox = {0, 0, 0, 0, 0, 0}, on_step = function(self, obj, pos) local remove = minetest.after(2, function() self.object:remove() end) local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() ~= nil then if obj:get_luaentity().name ~= "witchcraft:slow_splash" and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= "gauges:hp_bar" then local vel = obj:get_velocity() obj:set_velocity({x=vel.x*0.5, y=vel.y*0.5, z=vel.z*0.5}) minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() return end end end local n = minetest.get_node(pos).name if n ~= "witchcraft:slow_splash" and n ~= "air" then minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() end end, }) minetest.register_entity("witchcraft:fast_splash", { textures = {"witchcraft_splash_magenta.png"}, velocity = 0.1, damage = 2, collisionbox = {0, 0, 0, 0, 0, 0}, on_step = function(self, obj, pos) local remove = minetest.after(2, function() self.object:remove() end) local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() ~= nil then if obj:get_luaentity().name ~= "witchcraft:fast_splash" and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= "gauges:hp_bar" then local vel = obj:get_velocity() obj:set_velocity({x=vel.x*4, y=vel.y*1, z=vel.z*4}) minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() return end end end local n = minetest.get_node(pos).name if n ~= "witchcraft:fast_splash" and n ~= "air" then minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() end end, }) minetest.register_entity("witchcraft:antigrav_splash", { textures = {"witchcraft_splash_green.png"}, velocity = 0.1, damage = 2, collisionbox = {0, 0, 0, 0, 0, 0}, on_step = function(self, obj, pos) local remove = minetest.after(2, function() self.object:remove() end) local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() ~= nil then if obj:get_luaentity().name ~= "witchcraft:antigrav_splash" and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= "gauges:hp_bar" then local vel = obj:get_velocity() obj:set_velocity({x=vel.x*1, y=vel.y*0.1, z=vel.z*1}) minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() return end end end local n = minetest.get_node(pos).name if n ~= "witchcraft:antigrav_splash" and n ~= "air" then minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() end end, }) minetest.register_entity("witchcraft:jump_splash", { textures = {"witchcraft_splash_cyan.png"}, velocity = 0.1, damage = 2, collisionbox = {0, 0, 0, 0, 0, 0}, on_step = function(self, obj, pos) local remove = minetest.after(2, function() self.object:remove() end) local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() ~= nil then if obj:get_luaentity().name ~= "witchcraft:jump_splash" and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= "gauges:hp_bar" then local vel = obj:get_velocity() obj:set_velocity({x=vel.x*1, y=(vel.y+2)*3, z=vel.z*1}) minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() return end end end local n = minetest.get_node(pos).name if n ~= "witchcraft:antigrav_splash" and n ~= "air" then minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() end end, }) minetest.register_entity("witchcraft:murky_splash", { textures = {"witchcraft_splash_brown.png"}, velocity = 0.1, damage = 2, collisionbox = {0, 0, 0, 0, 0, 0}, on_step = function(self, obj, pos) local remove = minetest.after(2, function() self.object:remove() end) local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() ~= nil then if obj:get_luaentity().name ~= "witchcraft:murky_splash" and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= "gauges:hp_bar" then obj:punch(self.object, 1.0, { full_punch_interval=1.0, damage_groups={fleshy=20}, }, nil) minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() return end end end local n = minetest.get_node(pos).name if n ~= "witchcraft:murky_splash" and n ~= "air" then minetest.sound_play("default_break_glass", { pos = pos, max_hear_distance = 20, gain = 10.0, }) self.object:remove() end end, }) minetest.register_entity("witchcraft:shadow_splash", { textures = {"witchcraft_splash_ggreen.png"}, velocity = 0.1, damage = 2, physical = true, collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, on_step = function(self, obj, pos) local remove = minetest.after(5, function() self.object:remove() end) local pos = self.object:get_pos() minetest.add_particlespawner({ amount = 50, time = 1, minpos = {x=pos.x-3, y=pos.y-3, z=pos.z-3}, maxpos = {x=pos.x+3, y=pos.y+3, z=pos.z+3}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.1,y=0.2,z=-0.1}, maxacc = {x=0.1,y=0.2,z=0.1}, minexptime = 5, maxexptime = 10, minsize = 10, maxsize = 20, collisiondetection = false, texture = "witchcraft_pot_bottom.png^[colorize:black:200" }) end, }) minetest.register_entity("witchcraft:smoke_splash", { textures = {"witchcraft_splash_purple.png"}, velocity = 0.1, damage = 2, physical = true, collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, on_step = function(self, obj, pos) local remove = minetest.after(10, function() self.object:remove() end) local pos = self.object:get_pos() -- local velo = self.object:get_velocity() -- self.object:set_velocity({x=velo.x*0.9,y=velo.y,z=velo.z*0.9}) minetest.add_particlespawner({ amount = 10, time = 1, minpos = {x=pos.x-1, y=pos.y-1, z=pos.z-1}, maxpos = {x=pos.x+1, y=pos.y+1, z=pos.z+1}, minvel = {x=-1, y=-0, z=-1}, maxvel = {x=1, y=0, z=1}, minacc = {x=-0.5,y=2,z=-0.5}, maxacc = {x=0.5,y=3,z=0.5}, minexptime = 2, maxexptime = 4, minsize = 10, maxsize = 20, collisiondetection = false, texture = "witchcraft_smoke.png" }) end, }) --player effects if minetest.get_modpath("player_monoids") then local speed = player_monoids.speed local jump = player_monoids.jump local gravity = player_monoids.gravity playereffects.register_effect_type("witchcraft:potion_speed_lv1", "High Speed", nil, {"witchcraft:potion_speed_lv1"}, function(player) speed:add_change(player, 2, "witchcraft:potion_speed_lv1") end, function(effect, player) speed:del_change(player, "witchcraft:potion_speed_lv1") end, false ) playereffects.register_effect_type("witchcraft:potion_speed_lv2", "High Speed", nil, {"witchcraft:potion_speed_lv2"}, function(player) speed:add_change(player, 2.5, "witchcraft:potion_speed_lv2") end, function(effect, player) speed:del_change(player, "witchcraft:potion_speed_lv2") end, false ) playereffects.register_effect_type("witchcraft:potion_jump_lvx", "High Jump", nil, {"witchcraft:potion_jump_lvx"}, function(player) jump:add_change(player, 1.5, "witchcraft:potion_jump_lvx") gravity:add_change(player, 0.8, "witchcraft:potion_jump_lvx") end, function(effect, player) jump:del_change(player, "witchcraft:potion_jump_lvx") gravity:del_change(player, "witchcraft:potion_jump_lvx") end, false ) playereffects.register_effect_type("witchcraft:potion_antigrav_lvx", "Light weight", nil, {"witchcraft:potion_antigrav_lvx"}, function(player) gravity:add_change(player, 0.1, "witchcraft:potion_antigrav_lvx") end, function(effect, player) gravity:del_change(player, "witchcraft:potion_antigrav_lvx") end, false ) playereffects.register_effect_type("witchcraft:potion_slow_lv1", "Low Speed", nil, {"witchcraft:potion_slow_lv1"}, function(player) speed:add_change(player, 0.5, "witchcraft:potion_slow_lv1") end, function(effect, player) speed:del_change(player, "witchcraft:potion_slow_lv1") end, false ) playereffects.register_effect_type("witchcraft:potion_slow_lv2", "Low Speed", nil, {"witchcraft:potion_slow_lv2"}, function(player) speed:add_change(player, 0.4, "witchcraft:potion_slow_lv2") end, function(effect, player) speed:del_change(player, "witchcraft:potion_slow_lv2") end, false ) playereffects.register_effect_type("witchcraft:potion_swim_lv1", "Fast Swim", nil, {"witchcraft:potion_swim_lv1"}, function(player) speed:add_change(player, 3, "witchcraft:potion_swim_lv1") end, function(effect, player) speed:del_change(player, "witchcraft:potion_swim_lv1") end, false ) playereffects.register_effect_type("witchcraft:potion_swim_lv2", "Dive", nil, {"witchcraft:potion_swim_lv2"}, function(player) speed:add_change(player, 3, "witchcraft:potion_swim_lv2") gravity:add_change(player, 4, "witchcraft:potion_swim_lv2") end, function(effect, player) speed:del_change(player, "witchcraft:potion_swim_lv2") gravity:del_change(player, "witchcraft:potion_swim_lv2") end, false ) else local function set_physics(player, speed, jump, gravity) player:set_physics_override({ speed = speed, jump = jump, gravity = gravity }) end playereffects.register_effect_type("witchcraft:potion_speed_lv1", "High speed", nil, {"speed"}, function(player) set_physics(player, 2,nil,nil) end, function(effect, player) set_physics(player, 1,nil,nil) end, false ) playereffects.register_effect_type("witchcraft:potion_speed_lv2", "High speed", nil, {"speed"}, function(player) set_physics(player, 2.5,nil,nil) end, function(effect, player) set_physics(player, 1,nil,nil) end, false ) playereffects.register_effect_type("witchcraft:potion_jump_lvx", "High Jump", nil, {"jump"}, function(player) set_physics(player, nil,1.5,0.8) end, function(effect, player) set_physics(player, nil,1,1) end, false ) playereffects.register_effect_type("witchcraft:potion_antigrav_lvx", "Light weight", nil, {"gravity"}, function(player) set_physics(player, nil,nil,0.1) end, function(effect, player) set_physics(player, nil,nil,1) end, false ) playereffects.register_effect_type("witchcraft:potion_slow_lv1", "Low speed", nil, {"speed"}, function(player) set_physics(player, 0.5,nil,nil) end, function(effect, player) set_physics(player, 1,nil,nil) end, false ) playereffects.register_effect_type("witchcraft:potion_slow_lv2", "Low speed", nil, {"speed"}, function(player) set_physics(player, 0.4,nil,nil) end, function(effect, player) set_physics(player, 1,nil,nil) end, false ) playereffects.register_effect_type("witchcraft:potion_swim_lv1", "Fast Swim", nil, {"swim"}, function(player) set_physics(player, 3,nil,nil) end, function(effect, player) set_physics(player, 1,nil,nil) end, false ) playereffects.register_effect_type("witchcraft:potion_swim_lv2", "Dive", nil, {"swim"}, function(player) set_physics(player, 3,nil,4) end, function(effect, player) set_physics(player, 1,nil,1) end, false ) end playereffects.register_effect_type("potion_silver", "Fire resist", nil, {"fire_resist"}, function(player) local pos = player:get_pos() local node = minetest.get_node(pos).name if node == "default:lava_source" or node == "default:lava_flowing" or node == "fire:basic_flame" then local hp1 = player:get_hp() minetest.after(0.8, function() local hp2 = player:get_hp() local change = hp1-hp2 if change >= 0 then player:set_hp(hp2+change) end end) end end, nil, nil, nil, 0.3 ) --splash potions local splash = function(potion) return function(itemstack, placer, pointed_thing) local dir = placer:get_look_dir() local playerpos = placer:get_pos() local vec = {x=dir.x*6, y=dir.y*3.5, z=dir.z*6} local acc = {x=0, y=-9.8, z=0} local obj = minetest.add_entity({ x = playerpos.x+dir.x*1.5, y = playerpos.y+2+dir.y, z = playerpos.z+dir.z*1.5 }, potion) obj:set_velocity(vec) obj:set_acceleration(acc) itemstack:take_item() return itemstack end end minetest.register_node("witchcraft:splash_orange", { description = "Dragon Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_orange.png"}, wield_image = "witchcraft_splash_orange.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_orange.png", on_use = splash("witchcraft:fire_splash"), }) minetest.register_node("witchcraft:splash_purple", { description = "Smokey Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_purple.png"}, wield_image = "witchcraft_splash_purple.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_purple.png", on_use = splash("witchcraft:smoke_splash"), }) minetest.register_node("witchcraft:splash_red", { description = "Healthy Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_red.png"}, wield_image = "witchcraft_splash_red.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_red.png", on_use = splash("witchcraft:heal_splash"), }) minetest.register_node("witchcraft:splash_green", { description = "Volatile Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_green.png"}, wield_image = "witchcraft_splash_green.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_green.png", on_use = splash("witchcraft:jump_splash"), }) minetest.register_node("witchcraft:splash_cyan", { description = "Light Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_cyan.png"}, wield_image = "witchcraft_splash_cyan.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_cyan.png", on_use = splash("witchcraft:antigrav_splash"), }) minetest.register_node("witchcraft:splash_redbrown", { description = "Thick Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_redbrown.png"}, wield_image = "witchcraft_splash_redbrown.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_redbrown.png", on_use = splash("witchcraft:slow_splash"), }) minetest.register_node("witchcraft:splash_magenta", { description = "Fast Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_magenta.png"}, wield_image = "witchcraft_splash_magenta.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_magenta.png", on_use = splash("witchcraft:fast_splash"), }) minetest.register_node("witchcraft:splash_brown", { description = "Murky Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_brown.png"}, wield_image = "witchcraft_splash_brown.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_brown.png", on_use = splash("witchcraft:murky_splash"), }) minetest.register_node("witchcraft:splash_grey", { description = "Death Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_grey.png"}, wield_image = "witchcraft_splash_grey.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_grey.png", on_use = splash("witchcraft:death_splash"), }) minetest.register_node("witchcraft:splash_ggreen", { description = "Darkness Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_ggreen.png"}, wield_image = "witchcraft_splash_ggreen.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_ggreen.png", on_use = splash("witchcraft:shadow_splash"), }) minetest.register_node("witchcraft:splash_yellwgrn", { description = "Dodgy Splash Potion", drawtype = "plantlike", tiles = {"witchcraft_splash_yellgrn.png"}, wield_image = "witchcraft_splash_yellgrn.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_splash_yellgrn.png", on_use = splash("witchcraft:tnt_splash"), }) --potions (level 1 and 2) minetest.register_node("witchcraft:potion_red", { description = "Tasty Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_red.png"}, wield_image = "witchcraft_potion_red.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_red.png", on_use = function(itemstack, player) local health = player:get_hp() player:set_hp(health+20) itemstack:replace("vessels:glass_bottle") return itemstack end, }) minetest.register_node("witchcraft:potion_red_2", { description = "Tasty Potion (lv2)", drawtype = "plantlike", tiles = {"witchcraft_potion_red.png^[colorize:black:50"}, wield_image = "witchcraft_potion_red.png^[colorize:black:50", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_red.png^[colorize:black:50", on_use = function(itemstack, player) local health = player:get_hp() player:set_hp(health+50) itemstack:replace("vessels:glass_bottle") return itemstack end, }) --invisibility potion by Tenplus1(DWTFYWT V2), see darkpurple potion for on_use effect invisibility = {} -- reset player invisibility if they go offline minetest.register_on_leaveplayer(function(player) local name = player:get_player_name() if invisibility[name] then invisibility[name] = nil end end) local invisible = function(player, toggle) if not player then return false end local name = player:get_player_name() invisibility[name] = toggle local prop if toggle then -- hide player and name tag prop = { visual_size = {x = 0, y = 0}, -- collisionbox = {0, 0, 0, 0, 0, 0} } player:set_nametag_attributes({ color = {a = 0, r = 255, g = 255, b = 255} }) else -- show player and tag prop = { visual_size = {x = 1, y = 1}, -- collisionbox = {-0.35, -1, -0.35, 0.35, 1, 0.35} } player:set_nametag_attributes({ color = {a = 255, r = 255, g = 255, b = 255} }) end player:set_properties(prop) end minetest.register_node("witchcraft:potion_darkpurple", { description = "Shady Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_darkpurple.png"}, paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), stack_max = 1, wield_image = "witchcraft_potion_darkpurple.png", inventory_image = "witchcraft_potion_darkpurple.png", on_use = function(itemstack, user) --invisibility effect from invisibility potion by Tenplus1 local pos = user:get_pos() -- make player invisible invisible(user, true) -- play sound minetest.sound_play("pop", { pos = pos, gain = 1.0, max_hear_distance = 5 }) -- display 10 second warning minetest.after(290, function() if pos then minetest.chat_send_player(user:get_player_name(), ">>> You have 10 seconds before invisibility wears off!") end end) -- make player visible 5 minutes later minetest.after(300, function() if pos then -- show aready hidden player invisible(user, nil) -- play sound minetest.sound_play("pop", { pos = pos, gain = 1.0, max_hear_distance = 5 }) end end) --effect local playerpos = pos minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) -- take item if not minetest.settings:get_bool("creative_mode") then itemstack:take_item() return {name = "vessels:glass_bottle"} end end, }) minetest.register_node("witchcraft:potion_darkpurple_2", { description = "Shady Potion (lv2)", drawtype = "plantlike", tiles = {"witchcraft_potion_darkpurple.png^[colorize:black:50"}, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, paramtype = "light", groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), stack_max = 1, wield_image = "witchcraft_potion_darkpurple.png^[colorize:black:50", inventory_image = "witchcraft_potion_darkpurple.png^[colorize:black:50", on_use = function(itemstack, user) local pos = user:get_pos() -- make player invisible invisible(user, true) -- play sound minetest.sound_play("pop", { pos = pos, gain = 1.0, max_hear_distance = 5 }) -- display 10 second warning minetest.after(340, function() if pos then minetest.chat_send_player(user:get_player_name(), ">>> You have 10 seconds before invisibility wears off!") end end) -- make player visible 5 minutes later minetest.after(350, function() if pos then -- show aready hidden player invisible(user, nil) -- play sound minetest.sound_play("pop", { pos = pos, gain = 1.0, max_hear_distance = 5 }) end end) --effect local playerpos = pos minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) -- take item if not minetest.settings:get_bool("creative_mode") then itemstack:take_item() return {name = "vessels:glass_bottle"} end end, }) minetest.register_node("witchcraft:potion_brown", { description = "Murky Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_brown.png"}, wield_image = "witchcraft_potion_brown.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_brown.png", on_use = minetest.item_eat(-5, "vessels:glass_bottle"), }) minetest.register_node("witchcraft:potion_brown_2", { description = "Murky Potion (lv2)", drawtype = "plantlike", tiles = {"witchcraft_potion_brown.png^[colorize:black:50"}, wield_image = "witchcraft_potion_brown.png^[colorize:black:50", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_brown.png^[colorize:black:50", on_use = minetest.item_eat(-10, "vessels:glass_bottle"), }) minetest.register_node("witchcraft:potion_yllwgrn", { description = "Dodgy Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_yellgrn.png"}, wield_image = "witchcraft_potion_yellgrn.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_yellgrn.png", on_use = function(itemstack, placer, pointed_thing) tnt.boom(placer:get_pos(), {damage_radius=5,radius=3,ignore_protection=false}) itemstack:replace("vessels:glass_bottle") return itemstack end, }) minetest.register_node("witchcraft:potion_yllwgrn_2", { description = "Dodgy Potion (lv2)", drawtype = "plantlike", tiles = {"witchcraft_potion_yellgrn.png^[colorize:black:50"}, wield_image = "witchcraft_potion_yellgrn.png^[colorize:black:50", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_yellgrn.png^[colorize:black:50", on_use = function(itemstack, placer, pointed_thing) tnt.boom(placer:get_pos(), {damage_radius=10,radius=4,ignore_protection=false}) itemstack:replace("vessels:glass_bottle") return itemstack end, }) minetest.register_entity("witchcraft:fire", { textures = {"witchcraft_flame.png"}, velocity = 0.1, damage = 2, collisionbox = {0, 0, 0, 0, 0, 0}, on_step = function(self, obj, pos) minetest.after(2, function() self.object:remove() end) local pos = self.object:get_pos() local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() ~= nil then if obj:get_luaentity().name ~= "witchcraft:fire" and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= "gauges:hp_bar" then obj:punch(self.object, 1.0, { full_punch_interval=1.0, damage_groups={fleshy=3}, }, nil) self.object:remove() return end end end local is_used = false for dx=0,1 do for dy=0,1 do for dz=0,1 do local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz} local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} local n = minetest.get_node(p).name if n ~= "witchcraft:fire" and n ~= "air" then is_used = true if minetest.registered_items[n].groups.flammable and not minetest.is_protected(pos, "") then minetest.set_node(t, {name="fire:basic_flame"}) end end end end end if is_used then self.object:remove() end end, }) minetest.register_node("witchcraft:potion_orange", { description = "Dragon Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_orange.png"}, wield_image = "witchcraft_potion_orange.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_orange.png", on_use = function(itemstack, placer, pointed_thing) local dir = placer:get_look_dir() local playerpos = placer:get_pos() local vec = {x=dir.x*2,y=dir.y*2.5,z=dir.z*2} local obj = minetest.add_entity({ x=playerpos.x+dir.x*1.5, y=playerpos.y+1.5+dir.y, z=playerpos.z+0+dir.z }, "witchcraft:fire") obj:set_velocity(vec) minetest.add_particlespawner({ amount = 10, time = 0.3, minpos = {x=playerpos.x-0.3, y=playerpos.y+1.5, z=playerpos.z-0.3}, maxpos = {x=playerpos.x+0.3, y=playerpos.y+1.5, z=playerpos.z+0.3}, minvel = {x=dir.x*3,y=dir.y*3,z=dir.z*3}, maxvel = {x=dir.x*3,y=dir.y*3,z=dir.z*3}, minacc = {x=0,y=-0.5,z=0}, maxacc = {x=0.5,y=0.5,z=0.5}, minexptime = 1, maxexptime = 2, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_flame.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end, }) minetest.register_node("witchcraft:potion_orange_2", { description = "Dragon Potion (v2)", drawtype = "plantlike", tiles = {"witchcraft_potion_orange.png^[colorize:black:50"}, wield_image = "witchcraft_potion_orange.png^[colorize:black:50", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_orange.png^[colorize:black:50", on_use = function(itemstack, placer, pointed_thing) local dir = placer:get_look_dir() local playerpos = placer:get_pos() local vec = {x=dir.x*3,y=dir.y*3.5,z=dir.z*3} local obj = minetest.add_entity({ x=playerpos.x+dir.x*1.5, y=playerpos.y+1.5+dir.y, z=playerpos.z+0+dir.z }, "witchcraft:fire") obj:set_velocity(vec) minetest.add_particlespawner({ amount = 10, time = 0.3, minpos = {x=playerpos.x-0.3, y=playerpos.y+1.5, z=playerpos.z-0.3}, maxpos = {x=playerpos.x+0.3, y=playerpos.y+1.5, z=playerpos.z+0.3}, minvel = {x=dir.x*3,y=dir.y*3,z=dir.z*3}, maxvel = {x=dir.x*3,y=dir.y*3,z=dir.z*3}, minacc = {x=0,y=-0.5,z=0}, maxacc = {x=0.5,y=0.5,z=0.5}, minexptime = 1, maxexptime = 2, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_flame.png^[colorize:blue:200" }) itemstack:replace("vessels:glass_bottle") return itemstack end, }) minetest.register_node("witchcraft:potion_purple", { description = "Smokey Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_purple.png"}, wield_image = "witchcraft_potion_purple.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_purple.png", on_use = function(itemstack, placer, pointed_thing) local dir = placer:get_look_dir() local playerpos = placer:get_pos() local vec = {x=dir.x*2,y=dir.y*2.5,z=dir.z*2} minetest.add_particlespawner({ amount = 20, time = 0.5, minpos = {x=playerpos.x-1, y=playerpos.y, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y, z=playerpos.z+1}, minvel = {x=0,y=0.5,z=0}, maxvel = {x=0,y=0.6,z=0}, minacc = {x=0,y=-0.5,z=0}, maxacc = {x=0,y=0.5,z=0}, minexptime = 1, maxexptime = 3, minsize = 10, maxsize = 15, collisiondetection = false, texture = "witchcraft_smoke.png^[colorize:magenta:50" }) itemstack:replace("vessels:glass_bottle") return itemstack end, }) if minetest.get_modpath("hud_hunger") ~= nil then local register_food = hunger.register_food minetest.register_node("witchcraft:potion_gpurple", { description = "Filling Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_gpurple.png"}, wield_image = "witchcraft_potion_gpurple.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_gpurple.png", on_use = function(itemstack, placer, pointed_thing) itemstack:replace("vessels:glass_bottle") return itemstack end, }) minetest.register_node("witchcraft:potion_gred", { description = "Hunger Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_gred.png"}, wield_image = "witchcraft_potion_gred.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_gred.png", on_use = function(itemstack, placer, pointed_thing) itemstack:replace("vessels:glass_bottle") return itemstack end, }) register_food("witchcraft:potion_gpurple", 10) register_food("witchcraft:potion_gred", -4) else minetest.register_node("witchcraft:potion_gpurple", { description = "Filling Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_gpurple.png"}, wield_image = "witchcraft_potion_gpurple.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_purple.png", on_use = minetest.item_eat(20, "vessels:glass_bottle"), }) minetest.register_node("witchcraft:potion_gred", { description = "Hunger Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_gred.png"}, wield_image = "witchcraft_potion_gred.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_gred.png", on_use = minetest.item_eat(-10, "vessels:glass_bottle"), }) if minetest.get_modpath("hunger_ng") then local register_food = hunger_ng.add_hunger_data register_food('witchcraft:potion_gpurple', { satiates = 10, returns = 'vessels:glass_bottle' }) register_food('witchcraft:potion_gred', { satiates = -4, returns = 'vessels:glass_bottle' }) end end minetest.register_node("witchcraft:potion_purple_2", { description = "Smokey Potion (lv2)", drawtype = "plantlike", tiles = {"witchcraft_potion_purple.png^[colorize:black:50"}, wield_image = "witchcraft_potion_purple.png^[colorize:black:50", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_purple.png^[colorize:black:20", on_use = function(itemstack, placer, pointed_thing) local dir = placer:get_look_dir() local playerpos = placer:get_pos() local vec = {x=dir.x*2,y=dir.y*2.5,z=dir.z*2} minetest.add_particlespawner({ amount = 20, time = 0.5, minpos = {x=playerpos.x-1, y=playerpos.y, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y, z=playerpos.z+1}, minvel = {x=0,y=0.2,z=0}, maxvel = {x=0,y=0.2,z=0}, minacc = {x=0,y=-0.1,z=0}, maxacc = {x=0,y=0.1,z=0}, minexptime = 5, maxexptime = 10, minsize = 10, maxsize = 15, collisiondetection = false, texture = "witchcraft_smoke.png^[colorize:magenta:50" }) itemstack:replace("vessels:glass_bottle") return itemstack end, }) minetest.register_node("witchcraft:potion_grey", { description = "Evil Potion", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_grey.png"}, wield_image = "witchcraft_potion_grey.png", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_grey.png", on_use = minetest.item_eat(-100, "vessels:glass_bottle"), }) minetest.register_node("witchcraft:potion_grey_2", { description = "Evil Potion (lv2)", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_grey.png^[colorize:black:50"}, wield_image = "witchcraft_potion_grey.png^[colorize:black:50", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_grey.png^[colorize:black:50", on_use = minetest.item_eat(-200, "vessels:glass_bottle"), }) minetest.register_node("witchcraft:potion_blue", { description = "Bottle of Water", drawtype = "plantlike", tiles = {"witchcraft_potion_blue.png"}, wield_image = "witchcraft_potion_blue.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_blue.png", on_use = function(itemstack, user, pointed_thing) local player = user:get_player_name() if pointed_thing.type == "node" and minetest.get_node(pointed_thing.above).name == "air" then if not minetest.is_protected(pointed_thing.above, player) then minetest.set_node(pointed_thing.above, {name="default:water_source"}) else minetest.chat_send_player(player, "This area is protected.") end end itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_silver", { description = "Cold potion", drawtype = "plantlike", tiles = {"witchcraft_potion_silver.png"}, wield_image = "witchcraft_potion_silver.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_silver.png", on_use = function(itemstack, user, pointed_thing) playereffects.apply_effect_type("potion_silver", 15, user) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_silver_2", { description = "Cold potion lv2", drawtype = "plantlike", tiles = {"witchcraft_potion_silver.png^[colorize:black:50"}, wield_image = "witchcraft_potion_silver.png^[colorize:black:50", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_silver.png^[colorize:black:50", on_use = function(itemstack, user, pointed_thing) playereffects.apply_effect_type("potion_silver", 60, user) itemstack:replace("vessels:glass_bottle") return itemstack end }) if minetest.get_modpath("farming") and farming.mod == "redo" then minetest.register_node("witchcraft:potion_green", { description = "Melon Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_green.png"}, wield_image = "witchcraft_potion_green.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_green.png", on_use = function(itemstack, user, pointed_thing) local player = user:get_player_name() if pointed_thing.type == "node" and minetest.get_node(pointed_thing.above).name == "air" then if not minetest.is_protected(pointed_thing.above, player) then minetest.set_node(pointed_thing.above, {name="farming:melon_8"}) else minetest.chat_send_player(player, "This area is protected.") end end local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) else minetest.register_node("witchcraft:potion_green", { description = "Plant Potion (destructive!)", drawtype = "plantlike", tiles = {"witchcraft_potion_green.png"}, wield_image = "witchcraft_potion_green.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_green.png", on_use = function(itemstack, user, pointed_thing) local player = user:get_player_name() if pointed_thing.type == "node" and minetest.get_node(pointed_thing.above).name == "air" then if not minetest.is_protected(pointed_thing.above, player) then default.grow_new_jungle_tree(pointed_thing.above) else minetest.chat_send_player(player, "This area is protected.") end end local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) end minetest.register_node("witchcraft:potion_gold", { description = "Alchemy Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_gold.png"}, wield_image = "witchcraft_potion_gold.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_gold.png", on_use = function(itemstack, user, pointed_thing) local player = user:get_player_name() if pointed_thing.type == "node" and minetest.get_node(pointed_thing.above).name == "air" then if not minetest.is_protected(pointed_thing.above, player) then minetest.set_node(pointed_thing.above, {name="default:goldblock"}) else minetest.chat_send_player(player, "This area is protected.") end end local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_gold_2", { description = "Alchemy Potion (lv2)", drawtype = "plantlike", tiles = {"witchcraft_potion_gold.png^[colorize:black:50"}, wield_image = "witchcraft_potion_gold.png^[colorize:black:50", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_gold.png^[colorize:black:50", on_use = function(itemstack, user, pointed_thing) local player = user:get_player_name() if pointed_thing.type == "node" and minetest.get_node(pointed_thing.above).name == "air" then if not minetest.is_protected(pointed_thing.above, player) then minetest.set_node(pointed_thing.above, {name="default:diamondblock"}) else minetest.chat_send_player(player, "This area is protected.") end end local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) if minetest.get_modpath("experience") then minetest.register_node("witchcraft:potion_aqua", { description = "Complex Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_aqua.png"}, wield_image = "witchcraft_potion_aqua.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_aqua.png", on_use = function(itemstack, placer, pointed_thing) local pos = placer:get_pos() minetest.add_particlespawner({ amount = 6, time = 0.1, minpos = {x=pos.x-1, y=pos.y+0.5, z=pos.z-1}, maxpos = {x=pos.x+1, y=pos.y+1, z=pos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=2,z=-0.5}, maxacc = {x=0.5,y=2,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "orb.png" }) minetest.add_entity(pos, "experience:orb") minetest.add_entity(pos, "experience:orb") minetest.add_entity(pos, "experience:orb") minetest.add_entity(pos, "experience:orb") minetest.add_entity(pos, "experience:orb") itemstack:replace("vessels:glass_bottle") return itemstack end }) else minetest.register_node("witchcraft:potion_aqua", { description = "Complex Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_aqua.png"}, wield_image = "witchcraft_potion_aqua.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_aqua.png", on_use = function(itemstack, placer, pointed_thing) local pos = placer:get_pos() minetest.add_particlespawner({ amount = 6, time = 0.1, minpos = {x=pos.x-1, y=pos.y+0.5, z=pos.z-1}, maxpos = {x=pos.x+1, y=pos.y+1, z=pos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=2,z=-0.5}, maxacc = {x=0.5,y=2,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) minetest.add_item(pos, "default:steel_ingot") minetest.add_item(pos, "witchcraft:herb") minetest.add_item(pos, "default:mese_crystal") minetest.add_item(pos, "default:gold_lump") minetest.add_item(pos, "farming:bread") minetest.add_item(pos, "default:copper_ingot") itemstack:replace("vessels:glass_bottle") return itemstack end }) >>>>>>> upstream/master end minetest.register_node("witchcraft:potion_magenta", { description = "Fast Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_magenta.png"}, wield_image = "witchcraft_potion_magenta.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_magenta.png", on_use = function(itemstack, user, pointed_thing) local breath_change = user:set_breath(5) playereffects.apply_effect_type("witchcraft:potion_speed_lv1", 10, user) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_magenta_2", { description = "Fast Potion (lv2)", drawtype = "plantlike", tiles = {"witchcraft_potion_magenta.png^[colorize:black:50"}, wield_image = "witchcraft_potion_magenta.png^[colorize:black:50", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_magenta.png^[colorize:black:50", on_use = function(itemstack, user, pointed_thing) local breath_change = user:set_breath(5) playereffects.apply_effect_type("witchcraft:potion_speed_lv2", 10, user) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_cyan", { description = "Light Potion", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_cyan.png"}, wield_image = "witchcraft_potion_cyan.png", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_cyan.png", on_use = function(itemstack, user, pointed_thing) local breath_change = user:set_breath(5) playereffects.apply_effect_type("witchcraft:potion_antigrav_lvx", 10, user) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_gcyan", { description = "Air Potion", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_gcyan.png"}, wield_image = "witchcraft_potion_gcyan.png", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_gcyan.png", on_use = function(itemstack, user, pointed_thing) local player = user:get_player_name() local breath_change = user:set_breath(12) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_cyan_2", { description = "Light Potion (lv2)", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_cyan.png^[colorize:black:50"}, wield_image = "witchcraft_potion_cyan.png^[colorize:black:50", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_cyan.png^[colorize:black:50", on_use = function(itemstack, user, pointed_thing) local breath_change = user:set_breath(5) playereffects.apply_effect_type("witchcraft:potion_antigrav_lvx", 20, user) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_green2", { description = "Volatile Potion", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_green2.png"}, wield_image = "witchcraft_potion_green2.png", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_green2.png", on_use = function(itemstack, user, pointed_thing) local breath_change = user:set_breath(5) playereffects.apply_effect_type("witchcraft:potion_jump_lvx", 6, user) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_ggreen", { description = "Darkness Potion", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_ggreen.png"}, wield_image = "witchcraft_potion_ggreen.png", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_ggreen.png", on_use = function(itemstack, user, pointed_thing) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 2000, time = 1, minpos = {x=playerpos.x-20, y=playerpos.y-3, z=playerpos.z-20}, maxpos = {x=playerpos.x+20, y=playerpos.y+3, z=playerpos.z+20}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.1,y=0,z=-0.1}, maxacc = {x=0.1,y=0,z=0.1}, minexptime = 5, maxexptime = 10, minsize = 10, maxsize = 20, collisiondetection = false, texture = "witchcraft_pot_bottom.png^[colorize:black:200" }) local mtime = minetest.get_timeofday() if mtime >= 0.25 and mtime <= 0.75 then user:override_day_night_ratio(-mtime+0.5) minetest.after(10, function() user:override_day_night_ratio(nil) end) end itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_green2_2", { description = "Volatile Potion (lv2)", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_green2.png^[colorize:black:50"}, wield_image = "witchcraft_potion_green2.png^[colorize:black:50", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_green2.png^[colorize:black:50", on_use = function(itemstack, user, pointed_thing) local breath_change = user:set_breath(5) playereffects.apply_effect_type("witchcraft:potion_jump_lvx", 10, user) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_redbrown", { description = "Thick Potion", drawtype = "plantlike", tiles = {"witchcraft_potion_redbrown.png"}, wield_image = "witchcraft_potion_redbrown.png", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_redbrown.png", on_use = function(itemstack, user, pointed_thing) local breath_change = user:set_breath(5) playereffects.apply_effect_type("witchcraft:potion_slow_lv1", 11, user) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_redbrown_2", { description = "Thick Potion (lv2)", drawtype = "plantlike", tiles = {"witchcraft_potion_redbrown.png^[colorize:black:50"}, wield_image = "witchcraft_potion_redbrown.png^[colorize:black:50", paramtype = "light", stack_max = 1, is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_redbrown.png^[colorize:black:50", on_use = function(itemstack, user, pointed_thing) local breath_change = user:set_breath(5) playereffects.apply_effect_type("witchcraft:potion_slow_lv2", 15, user) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_blue2", { description = "Watery Potion", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_blue2.png"}, wield_image = "witchcraft_potion_blue2.png", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_blue2.png", on_use = function(itemstack, user, pointed_thing) local breath = user:get_breath() if breath <= 10 then playereffects.apply_effect_type("witchcraft:potion_swim_lv1", 15, user) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end end }) minetest.register_node("witchcraft:potion_blue2_2", { description = "Watery Potion (lv2)", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_blue2.png^[colorize:black:50"}, wield_image = "witchcraft_potion_blue2.png^[colorize:black:50", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_blue2.png^[colorize:black:50", on_use = function(itemstack, user, pointed_thing) local breath = user:get_breath() if breath <= 10 then playereffects.apply_effect_type("witchcraft:potion_swim_lv2", 15, user) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end end }) --light potion function lightchange(person, duration) local mtime = minetest.get_timeofday() if mtime <= 0.25 or mtime >= 0.75 then person:override_day_night_ratio(mtime+0.5) minetest.after(duration, function() person:override_day_night_ratio(nil) end) end end minetest.register_node("witchcraft:potion_yellow", { description = "Shiny Potion", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_yellow.png"}, wield_image = "witchcraft_potion_yellow.png", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_yellow.png", on_use = function(itemstack, user, pointed_thing) lightchange(user, 10) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) minetest.register_node("witchcraft:potion_yellow_2", { description = "Shiny Potion (lv2)", drawtype = "plantlike", stack_max = 1, tiles = {"witchcraft_potion_yellow.png^[colorize:black:50"}, wield_image = "witchcraft_potion_yellow.png^[colorize:black:50", paramtype = "light", is_ground_content = false, walkable = false, selection_box = { type = "fixed", fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} }, groups = {dig_immediate=3,attached_node=1, potion2=1}, sounds = default.node_sound_glass_defaults(), inventory_image = "witchcraft_potion_yellow.png^[colorize:black:50", on_use = function(itemstack, user, pointed_thing) lightchange(user, 20) local playerpos = user:get_pos() minetest.add_particlespawner({ amount = 5, time = 0.1, minpos = {x=playerpos.x-1, y=playerpos.y+1, z=playerpos.z-1}, maxpos = {x=playerpos.x+1, y=playerpos.y+1, z=playerpos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=4,z=-0.5}, maxacc = {x=0.5,y=4,z=0.5}, minexptime = 0.5, maxexptime = 1, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png" }) itemstack:replace("vessels:glass_bottle") return itemstack end }) --decorative nodes minetest.register_node("witchcraft:mortar", { description = "mortar and pestle", tiles = { "default_stone.png", "default_stone.png", "default_stone.png", "default_stone.png", "default_stone.png", "default_stone.png" }, drawtype = "nodebox", paramtype = "light", paramtype2 = "facedir", node_box = { type = "fixed", fixed = { {-0.25, -0.5, -0.25, 0.25, -0.4375, 0.25}, -- NodeBox1 {-0.1875, -0.4375, -0.1875, 0.1875, -0.375, 0.1875}, -- NodeBox2 {-0.3125, -0.375, -0.3125, -0.1875, 0.125, 0.3125}, -- NodeBox3 {0.1875, -0.375, -0.3125, 0.3125, 0.125, 0.3125}, -- NodeBox4 {-0.3125, -0.375, -0.3125, 0.3125, 0.125, -0.1875}, -- NodeBox5 {-0.3125, -0.375, 0.1875, 0.3125, 0.125, 0.3125}, -- NodeBox6 {-0.1875, -0.375, -0.1875, 0.25, -0.0625, 0.1875}, -- NodeBox7 {-0.3125, -0.5, -0.5, 0.3125, -0.375, -0.375}, -- NodeBox8 } }, groups = {cracky=1, oddly_breakable_by_hand=1} }) minetest.register_node("witchcraft:pentablock", { description = "Pentagram block", tiles = { "witchcraft_pentablock.png", }, groups = {cracky=1, oddly_breakable_by_hand=1} }) minetest.register_node("witchcraft:pentagram", { description = "pentagram", drawtype = "signlike", visual_scale = 3.0, tiles = {"witchcraft_pentagram.png"}, inventory_image = "witchcraft_pentagram.png", use_texture_alpha = "clip", paramtype = "light", paramtype2 = "wallmounted", sunlight_propagates = false, light_source = 14, walkable = false, is_ground_content = true, selection_box = { type = "wallmounted", fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5} }, on_rightclick = function(pos, node, _) if minetest.get_modpath("mobs") then minetest.after(0.5, function() minetest.set_node(pos, {name="witchcraft:portal", param2=node.param2}) minetest.add_particlespawner({ amount = 25, time = 1, minpos = {x=pos.x-1, y=pos.y, z=pos.z-1}, maxpos = {x=pos.x+1, y=pos.y, z=pos.z+1}, minvel = {x=-0, y=-0, z=-0}, maxvel = {x=0, y=0, z=0}, minacc = {x=-0.5,y=1,z=-0.5}, maxacc = {x=0.5,y=1,z=0.5}, minexptime = 1, maxexptime = 1.5, minsize = 1, maxsize = 2, collisiondetection = false, texture = "witchcraft_effect.png^[colorize:green:400" }) end) end end, groups = {cracky=3,dig_immediate=3}, }) minetest.register_node("witchcraft:portal", { description = "portal", drawtype = "signlike", visual_scale = 3.0, tiles = {"witchcraft_portal.png"}, inventory_image = "witchcraft_portal.png", use_texture_alpha = "blend", paramtype = "light", paramtype2 = "wallmounted", sunlight_propagates = false, light_source = 14, walkable = false, is_ground_content = true, selection_box = { type = "wallmounted", fixed = {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5} }, on_construct = function(pos, node, _) minetest.after(1, function() if minetest.get_modpath("mobs_animal") and minetest.get_modpath("mobs_monster") then if math.random(2) > 1 then minetest.add_entity(pos, "mobs_monster:oerkki") else minetest.add_entity(pos, "mobs_animal:kitten") end elseif minetest.get_modpath("horror") then minetest.add_entity(pos, "horror:werewolf") elseif minetest.get_modpath("dmobs") then minetest.add_entity(pos, "dmobs:owl") elseif minetest.get_modpath("mobs_animal") then minetest.add_entity(pos, "mobs_animal:kitten") elseif minetest.get_modpath("mobs_monster") then minetest.add_entity(pos, "mobs_monster:oerkki") elseif minetest.get_modpath("pmobs") then minetest.add_entity(pos, "pmobs:wolf") end minetest.remove_node(pos) end) end, groups = {cracky=3,dig_immediate=3, not_in_creative_inventory=1}, }) minetest.register_node("witchcraft:candle", { description = "red candle", tiles = { "witchcraft_candle_top.png", "witchcraft_candle_top.png", "witchcraft_candle.png", "witchcraft_candle.png", "witchcraft_candle.png", "witchcraft_candle.png" }, drawtype = "nodebox", paramtype = "light", node_box = { type = "fixed", fixed = { {-0.1875, -0.5, -0.1875, 0.1875, -0.0625, 0.1875}, -- NodeBox1 {-0.03125, -0.5, -0.03125, 0.03125, 0.0625, 0.03125}, -- NodeBox2 } }, groups = {fleshy=1, oddly_breakable_by_hand=1, dig_immediate=3}, }) --other stuff dofile(minetest.get_modpath("witchcraft").."/scrolls.lua") dofile(minetest.get_modpath("witchcraft").."/brewing_stand.lua") minetest.log("action", "[witchcraft] loaded.")