2019-03-08 00:22:28 +01:00
local S = minetest.get_translator ( " mcl_potions " )
2020-06-13 01:11:06 +02:00
mcl_potions = { }
local modpath = minetest.get_modpath ( " mcl_potions " )
2020-06-13 01:54:45 +02:00
dofile ( modpath .. " /functions.lua " )
dofile ( modpath .. " /splash.lua " )
2019-03-08 00:22:28 +01:00
local brewhelp = S ( " Put this item in an item frame for decoration. It's useless otherwise. " )
2017-03-18 17:52:41 +01:00
2017-01-12 03:04:58 +01:00
minetest.register_craftitem ( " mcl_potions:fermented_spider_eye " , {
2019-03-08 00:22:28 +01:00
description = S ( " Fermented Spider Eye " ) ,
2017-03-18 17:52:41 +01:00
_doc_items_longdesc = brewhelp ,
2017-01-12 03:04:58 +01:00
wield_image = " mcl_potions_spider_eye_fermented.png " ,
inventory_image = " mcl_potions_spider_eye_fermented.png " ,
2019-02-06 10:57:23 +01:00
-- TODO: Reveal item when it's actually useful
2020-05-27 03:16:52 +02:00
groups = { brewitem = 1 , not_in_creative_inventory = 0 , not_in_craft_guide = 0 } ,
2017-01-12 03:04:58 +01:00
stack_max = 64 ,
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " mcl_potions:fermented_spider_eye " ,
2017-03-01 01:16:52 +01:00
recipe = { " mcl_mushrooms:mushroom_brown " , " mcl_core:sugar " , " mcl_mobitems:spider_eye " } ,
2017-01-12 03:04:58 +01:00
} )
2017-01-20 11:11:33 +01:00
minetest.register_craftitem ( " mcl_potions:glass_bottle " , {
2019-03-08 00:22:28 +01:00
description = S ( " Glass Bottle " ) ,
2020-02-19 04:54:17 +01:00
_tt_help = S ( " Liquid container " ) ,
2019-03-08 00:22:28 +01:00
_doc_items_longdesc = S ( " A glass bottle is used as a container for liquids and can be used to collect water directly. " ) ,
_doc_items_usagehelp = S ( " To collect water, it on a cauldron with water (which removes a level of water) or any water source (which removes no water). " ) ,
2017-03-01 16:36:26 +01:00
inventory_image = " mcl_potions_potion_bottle_empty.png " ,
wield_image = " mcl_potions_potion_bottle_empty.png " ,
2017-01-20 11:11:33 +01:00
groups = { brewitem = 1 } ,
2017-03-01 16:53:03 +01:00
liquids_pointable = true ,
on_place = function ( itemstack , placer , pointed_thing )
if pointed_thing.type == " node " then
local node = minetest.get_node ( pointed_thing.under )
local def = minetest.registered_nodes [ node.name ]
2017-03-01 16:55:48 +01:00
-- Call on_rightclick if the pointed node defines it
2020-06-08 23:47:53 +02:00
if placer and not placer : get_player_control ( ) . sneak then
2017-03-01 16:55:48 +01:00
if def and def.on_rightclick then
return def.on_rightclick ( pointed_thing.under , node , placer , itemstack ) or itemstack
end
end
2017-03-01 16:53:03 +01:00
-- Try to fill glass bottle with water
2017-03-01 18:06:09 +01:00
local get_water = false
2019-02-09 00:05:00 +01:00
local from_liquid_source = false
2017-11-30 19:27:57 +01:00
local river_water = false
2017-06-29 13:02:53 +02:00
if not def then
-- Unknown node: no-op
elseif def.groups and def.groups . water and def.liquidtype == " source " then
2017-03-01 18:06:09 +01:00
-- Water source
get_water = true
2019-02-09 00:05:00 +01:00
from_liquid_source = true
2017-11-30 19:27:57 +01:00
river_water = node.name == " mclx_core:river_water_source "
2017-03-01 18:06:09 +01:00
-- Or reduce water level of cauldron by 1
2019-02-08 22:17:51 +01:00
elseif string.sub ( node.name , 1 , 14 ) == " mcl_cauldrons: " then
local pname = placer : get_player_name ( )
if minetest.is_protected ( pointed_thing.under , pname ) then
minetest.record_protection_violation ( pointed_thing.under , pname )
return itemstack
end
if node.name == " mcl_cauldrons:cauldron_3 " then
get_water = true
minetest.set_node ( pointed_thing.under , { name = " mcl_cauldrons:cauldron_2 " } )
elseif node.name == " mcl_cauldrons:cauldron_2 " then
get_water = true
minetest.set_node ( pointed_thing.under , { name = " mcl_cauldrons:cauldron_1 " } )
elseif node.name == " mcl_cauldrons:cauldron_1 " then
get_water = true
minetest.set_node ( pointed_thing.under , { name = " mcl_cauldrons:cauldron " } )
elseif node.name == " mcl_cauldrons:cauldron_3r " then
get_water = true
river_water = true
minetest.set_node ( pointed_thing.under , { name = " mcl_cauldrons:cauldron_2r " } )
elseif node.name == " mcl_cauldrons:cauldron_2r " then
get_water = true
river_water = true
minetest.set_node ( pointed_thing.under , { name = " mcl_cauldrons:cauldron_1r " } )
elseif node.name == " mcl_cauldrons:cauldron_1r " then
get_water = true
river_water = true
minetest.set_node ( pointed_thing.under , { name = " mcl_cauldrons:cauldron " } )
end
2017-03-01 18:06:09 +01:00
end
if get_water then
2019-02-09 00:05:00 +01:00
local creative = minetest.settings : get_bool ( " creative_mode " ) == true
if from_liquid_source or creative then
2019-02-08 23:55:49 +01:00
-- Replace with water bottle, if possible, otherwise
-- place the water potion at a place where's space
local water_bottle
if river_water then
water_bottle = ItemStack ( " mcl_potions:potion_river_water " )
2017-03-01 16:53:03 +01:00
else
2019-02-08 23:55:49 +01:00
water_bottle = ItemStack ( " mcl_potions:potion_water " )
end
2019-02-09 00:05:00 +01:00
local inv = placer : get_inventory ( )
if creative then
-- Don't replace empty bottle in creative for convenience reasons
if not inv : contains_item ( " main " , water_bottle ) then
inv : add_item ( " main " , water_bottle )
end
elseif itemstack : get_count ( ) == 1 then
2019-02-08 23:55:49 +01:00
return water_bottle
else
if inv : room_for_item ( " main " , water_bottle ) then
inv : add_item ( " main " , water_bottle )
else
minetest.add_item ( placer : get_pos ( ) , water_bottle )
end
itemstack : take_item ( )
2017-03-01 16:53:03 +01:00
end
end
2020-04-07 00:55:45 +02:00
minetest.sound_play ( " mcl_potions_bottle_fill " , { pos = pointed_thing.under , gain = 0.5 , max_hear_range = 16 } , true )
2017-03-01 16:53:03 +01:00
end
end
return itemstack
end ,
2017-01-20 11:11:33 +01:00
} )
minetest.register_craft ( {
output = " mcl_potions:glass_bottle 3 " ,
recipe = {
2017-01-31 23:32:56 +01:00
{ " mcl_core:glass " , " " , " mcl_core:glass " } ,
{ " " , " mcl_core:glass " , " " }
2017-01-20 11:11:33 +01:00
}
} )
2017-11-30 20:35:21 +01:00
-- Template function for creating images of filled potions
2017-03-01 16:36:26 +01:00
-- - colorstring must be a ColorString of form “#RRGGBB”, e.g. “#0000FF” for blue.
-- - opacity is optional opacity from 0-255 (default: 127)
local potion_image = function ( colorstring , opacity )
if not opacity then
opacity = 127
end
2020-06-08 23:47:53 +02:00
return " mcl_potions_potion_overlay.png^[colorize: " .. colorstring .. " : " .. tostring ( opacity ) .. " ^mcl_potions_potion_bottle_drinkable.png "
end
2020-06-13 01:54:45 +02:00
2017-03-01 16:36:26 +01:00
2017-11-30 20:35:21 +01:00
-- Cauldron fill up rules:
-- Adding any water increases the water level by 1, preserving the current water type
2017-11-30 19:27:57 +01:00
local cauldron_levels = {
2017-11-30 20:35:21 +01:00
-- start = { add water, add river water }
{ " " , " _1 " , " _1r " } ,
{ " _1 " , " _2 " , " _2 " } ,
{ " _2 " , " _3 " , " _3 " } ,
{ " _1r " , " _2r " , " _2r " } ,
{ " _2r " , " _3r " , " _3r " } ,
2017-11-30 19:27:57 +01:00
}
local fill_cauldron = function ( cauldron , water_type )
local base = " mcl_cauldrons:cauldron "
for i = 1 , # cauldron_levels do
if cauldron == base .. cauldron_levels [ i ] [ 1 ] then
if water_type == " mclx_core:river_water_source " then
return base .. cauldron_levels [ i ] [ 3 ]
else
return base .. cauldron_levels [ i ] [ 2 ]
end
end
end
end
2017-03-01 16:36:26 +01:00
-- Itemstring of potions is “mcl_potions:potion_<NBT Potion Tag>”
minetest.register_craftitem ( " mcl_potions:potion_water " , {
2019-03-08 00:22:28 +01:00
description = S ( " Water Bottle " ) ,
2020-02-19 04:54:17 +01:00
_tt_help = S ( " No effect " ) ,
2019-03-08 00:22:28 +01:00
_doc_items_longdesc = S ( " Water bottles can be used to fill cauldrons. Drinking water has no effect. " ) ,
2019-03-25 12:05:57 +01:00
_doc_items_usagehelp = S ( " Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron. " ) ,
2017-03-01 16:36:26 +01:00
stack_max = 1 ,
inventory_image = potion_image ( " #0000FF " ) ,
wield_image = potion_image ( " #0000FF " ) ,
2017-11-30 19:27:57 +01:00
groups = { brewitem = 1 , food = 3 , can_eat_when_full = 1 , water_bottle = 1 } ,
2017-03-01 18:06:09 +01:00
on_place = function ( itemstack , placer , pointed_thing )
if pointed_thing.type == " node " then
local node = minetest.get_node ( pointed_thing.under )
local def = minetest.registered_nodes [ node.name ]
-- Call on_rightclick if the pointed node defines it
if placer and not placer : get_player_control ( ) . sneak then
if def and def.on_rightclick then
return def.on_rightclick ( pointed_thing.under , node , placer , itemstack ) or itemstack
end
end
2017-11-30 19:27:57 +01:00
local cauldron = fill_cauldron ( node.name , " mcl_core:water_source " )
if cauldron then
2019-02-08 22:17:51 +01:00
local pname = placer : get_player_name ( )
if minetest.is_protected ( pointed_thing.under , pname ) then
minetest.record_protection_violation ( pointed_thing.under , pname )
return itemstack
end
-- Increase water level of cauldron by 1
2017-11-30 19:27:57 +01:00
minetest.set_node ( pointed_thing.under , { name = cauldron } )
2020-04-07 00:55:45 +02:00
minetest.sound_play ( " mcl_potions_bottle_pour " , { pos = pointed_thing.under , gain = 0.5 , max_hear_range = 16 } , true )
2019-02-08 23:55:49 +01:00
if minetest.settings : get_bool ( " creative_mode " ) == true then
return itemstack
else
return " mcl_potions:glass_bottle "
end
2017-11-30 19:27:57 +01:00
end
end
-- Drink the water by default
return minetest.do_item_eat ( 0 , " mcl_potions:glass_bottle " , itemstack , placer , pointed_thing )
end ,
on_secondary_use = minetest.item_eat ( 0 , " mcl_potions:glass_bottle " ) ,
} )
minetest.register_craftitem ( " mcl_potions:potion_river_water " , {
2019-03-08 00:22:28 +01:00
description = S ( " River Water Bottle " ) ,
2020-02-19 04:54:17 +01:00
_tt_help = S ( " No effect " ) ,
2019-03-08 00:22:28 +01:00
_doc_items_longdesc = S ( " River water bottles can be used to fill cauldrons. Drinking it has no effect. " ) ,
2019-03-25 12:05:57 +01:00
_doc_items_usagehelp = S ( " Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron. " ) ,
2017-11-30 19:27:57 +01:00
stack_max = 1 ,
inventory_image = potion_image ( " #0044FF " ) ,
wield_image = potion_image ( " #0044FF " ) ,
groups = { brewitem = 1 , food = 3 , can_eat_when_full = 1 , water_bottle = 1 } ,
on_place = function ( itemstack , placer , pointed_thing )
if pointed_thing.type == " node " then
local node = minetest.get_node ( pointed_thing.under )
local def = minetest.registered_nodes [ node.name ]
-- Call on_rightclick if the pointed node defines it
if placer and not placer : get_player_control ( ) . sneak then
if def and def.on_rightclick then
return def.on_rightclick ( pointed_thing.under , node , placer , itemstack ) or itemstack
end
end
local cauldron = fill_cauldron ( node.name , " mclx_core:river_water_source " )
if cauldron then
2019-02-08 22:17:51 +01:00
local pname = placer : get_player_name ( )
if minetest.is_protected ( pointed_thing.under , pname ) then
minetest.record_protection_violation ( pointed_thing.under , pname )
return itemstack
end
-- Increase water level of cauldron by 1
2017-11-30 19:27:57 +01:00
minetest.set_node ( pointed_thing.under , { name = cauldron } )
2020-04-07 00:55:45 +02:00
minetest.sound_play ( " mcl_potions_bottle_pour " , { pos = pointed_thing.under , gain = 0.5 , max_hear_range = 16 } , true )
2019-02-08 23:55:49 +01:00
if minetest.settings : get_bool ( " creative_mode " ) == true then
return itemstack
else
return " mcl_potions:glass_bottle "
end
2017-03-01 18:06:09 +01:00
end
end
-- Drink the water by default
return minetest.do_item_eat ( 0 , " mcl_potions:glass_bottle " , itemstack , placer , pointed_thing )
end ,
2017-03-01 16:36:26 +01:00
on_secondary_use = minetest.item_eat ( 0 , " mcl_potions:glass_bottle " ) ,
} )
2017-03-18 17:18:12 +01:00
2017-11-30 19:27:57 +01:00
2019-03-25 12:05:57 +01:00
local how_to_drink = S ( " Use the “Place” key to drink it. " )
2017-03-18 17:18:12 +01:00
2017-03-01 16:36:26 +01:00
minetest.register_craftitem ( " mcl_potions:potion_awkward " , {
2019-03-08 00:22:28 +01:00
description = S ( " Awkward Potion " ) ,
2020-02-19 04:54:17 +01:00
_tt_help = S ( " No effect " ) ,
2019-03-08 00:22:28 +01:00
_doc_items_longdesc = S ( " This potion has an awkward taste and is used for brewing more potions. Drinking it has no effect. " ) ,
2017-03-18 17:18:12 +01:00
_doc_items_usagehelp = how_to_drink ,
2017-03-01 16:36:26 +01:00
stack_max = 1 ,
inventory_image = potion_image ( " #0000FF " ) ,
wield_image = potion_image ( " #0000FF " ) ,
2019-02-06 10:57:23 +01:00
-- TODO: Reveal item when it's actually useful
groups = { brewitem = 1 , food = 3 , can_eat_when_full = 1 , not_in_creative_inventory = 1 } ,
2017-03-01 16:36:26 +01:00
on_place = minetest.item_eat ( 0 , " mcl_potions:glass_bottle " ) ,
on_secondary_use = minetest.item_eat ( 0 , " mcl_potions:glass_bottle " ) ,
} )
minetest.register_craftitem ( " mcl_potions:potion_mundane " , {
2019-03-08 00:22:28 +01:00
description = S ( " Mundane Potion " ) ,
2020-02-19 04:54:17 +01:00
_tt_help = S ( " No effect " ) ,
2019-03-08 00:22:28 +01:00
_doc_items_longdesc = S ( " This potion has a clean taste and is used for brewing more potions. Drinking it has no effect. " ) ,
2017-03-18 17:18:12 +01:00
_doc_items_usagehelp = how_to_drink ,
2017-03-01 16:36:26 +01:00
stack_max = 1 ,
inventory_image = potion_image ( " #0000FF " ) ,
wield_image = potion_image ( " #0000FF " ) ,
2019-02-06 10:57:23 +01:00
-- TODO: Reveal item when it's actually useful
groups = { brewitem = 1 , food = 3 , can_eat_when_full = 1 , not_in_creative_inventory = 1 } ,
2017-03-01 16:36:26 +01:00
on_place = minetest.item_eat ( 0 , " mcl_potions:glass_bottle " ) ,
on_secondary_use = minetest.item_eat ( 0 , " mcl_potions:glass_bottle " ) ,
} )
2020-05-23 22:39:55 +02:00
2017-03-01 16:36:26 +01:00
minetest.register_craftitem ( " mcl_potions:potion_thick " , {
2019-03-08 00:22:28 +01:00
description = S ( " Thick Potion " ) ,
2020-02-19 04:54:17 +01:00
_tt_help = S ( " No effect " ) ,
2019-03-08 00:22:28 +01:00
_doc_items_longdesc = S ( " This potion has a bitter taste and is used for brewing more potions. Drinking it has no effect. " ) ,
2017-03-18 17:18:12 +01:00
_doc_items_usagehelp = how_to_drink ,
2017-03-01 16:36:26 +01:00
stack_max = 1 ,
inventory_image = potion_image ( " #0000FF " ) ,
wield_image = potion_image ( " #0000FF " ) ,
2019-02-06 10:57:23 +01:00
-- TODO: Reveal item when it's actually useful
2020-05-27 00:10:20 +02:00
groups = { brewitem = 1 , food = 3 , can_eat_when_full = 1 , not_in_creative_inventory = 0 } ,
2017-03-01 16:36:26 +01:00
on_place = minetest.item_eat ( 0 , " mcl_potions:glass_bottle " ) ,
on_secondary_use = minetest.item_eat ( 0 , " mcl_potions:glass_bottle " ) ,
} )
2017-01-20 11:21:55 +01:00
minetest.register_craftitem ( " mcl_potions:speckled_melon " , {
2019-03-08 00:22:28 +01:00
description = S ( " Glistering Melon " ) ,
_doc_items_longdesc = S ( " This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else. " ) ,
2017-01-20 11:21:55 +01:00
stack_max = 64 ,
2020-05-27 00:10:20 +02:00
groups = { brewitem = 1 , not_in_creative_inventory = 0 , not_in_craft_guide = 1 } ,
2017-01-20 11:21:55 +01:00
inventory_image = " mcl_potions_melon_speckled.png " ,
} )
minetest.register_craft ( {
output = " mcl_potions:speckled_melon " ,
recipe = {
2017-01-31 23:32:56 +01:00
{ ' mcl_core:gold_nugget ' , ' mcl_core:gold_nugget ' , ' mcl_core:gold_nugget ' } ,
{ ' mcl_core:gold_nugget ' , ' mcl_farming:melon_item ' , ' mcl_core:gold_nugget ' } ,
{ ' mcl_core:gold_nugget ' , ' mcl_core:gold_nugget ' , ' mcl_core:gold_nugget ' } ,
2017-01-20 11:21:55 +01:00
}
} )
2017-01-12 03:04:58 +01:00
minetest.register_craftitem ( " mcl_potions:dragon_breath " , {
2019-03-08 00:22:28 +01:00
description = S ( " Dragon's Breath " ) ,
2017-03-18 17:52:41 +01:00
_doc_items_longdesc = brewhelp ,
2017-01-12 03:04:58 +01:00
wield_image = " mcl_potions_dragon_breath.png " ,
inventory_image = " mcl_potions_dragon_breath.png " ,
2020-05-27 00:10:20 +02:00
groups = { brewitem = 1 , not_in_creative_inventory = 0 } ,
2020-05-27 00:15:50 +02:00
stack_max = 1 ,
2017-01-12 03:04:58 +01:00
} )
2020-05-25 21:31:35 +02:00
2020-06-08 23:47:53 +02:00
2020-05-25 21:31:35 +02:00
minetest.register_craftitem ( " mcl_potions:healing " , {
description = S ( " Healing Potion " ) ,
_doc_items_longdesc = brewhelp ,
2020-06-08 23:47:53 +02:00
wield_image = potion_image ( " #CC0000 " ) ,
inventory_image = potion_image ( " #CC0000 " ) ,
groups = { brewitem = 1 , food = 3 , can_eat_when_full = 1 } ,
2020-05-27 00:10:20 +02:00
stack_max = 1 ,
2020-06-08 23:47:53 +02:00
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.healing_func ( user , 4 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.healing_func ( user , 4 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
2020-05-27 00:10:20 +02:00
} )
2020-06-08 23:47:53 +02:00
minetest.register_craftitem ( " mcl_potions:healing_2 " , {
description = S ( " Healing Potion II " ) ,
2020-05-27 00:10:20 +02:00
_doc_items_longdesc = brewhelp ,
2020-06-08 23:47:53 +02:00
wield_image = potion_image ( " #DD0000 " ) ,
inventory_image = potion_image ( " #DD0000 " ) ,
groups = { brewitem = 1 , food = 3 , can_eat_when_full = 1 } ,
2020-05-27 00:10:20 +02:00
stack_max = 1 ,
2020-06-08 23:47:53 +02:00
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.healing_func ( user , 8 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.healing_func ( user , 8 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
2020-05-25 21:31:35 +02:00
} )
2020-05-28 00:36:10 +02:00
2020-06-08 23:47:53 +02:00
minetest.register_craftitem ( " mcl_potions:harming " , {
description = S ( " Harming Potion " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #660099 " ) ,
inventory_image = potion_image ( " #660099 " ) ,
groups = { brewitem = 1 , food = 3 , can_eat_when_full = 1 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.healing_func ( user , - 6 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.healing_func ( user , - 6 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
} )
minetest.register_craftitem ( " mcl_potions:harming_2 " , {
description = S ( " Harming Potion II " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #330066 " ) ,
inventory_image = potion_image ( " #330066 " ) ,
groups = { brewitem = 1 , food = 3 , can_eat_when_full = 1 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.healing_func ( user , - 12 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.healing_func ( user , - 12 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
} )
2020-05-28 00:36:10 +02:00
minetest.register_craftitem ( " mcl_potions:night_vision " , {
description = S ( " Night Vision Potion " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = " mcl_potions_night_vision.png " ,
inventory_image = " mcl_potions_night_vision.png " ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
} )
2020-06-08 23:47:53 +02:00
2020-05-28 00:36:10 +02:00
minetest.register_craftitem ( " mcl_potions:swiftness " , {
description = S ( " Swiftness Potion " ) ,
_doc_items_longdesc = brewhelp ,
2020-06-08 23:47:53 +02:00
wield_image = potion_image ( " #009999 " ) ,
inventory_image = potion_image ( " #009999 " ) ,
2020-05-28 00:36:10 +02:00
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
2020-06-08 23:47:53 +02:00
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.swiftness_func ( user , 1.2 , 180 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.swiftness_func ( user , 1.2 , 180 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
2020-05-28 00:36:10 +02:00
} )
2020-06-08 23:47:53 +02:00
minetest.register_craftitem ( " mcl_potions:swiftness_2 " , {
description = S ( " Swiftness Potion II " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #00BBBB " ) ,
inventory_image = potion_image ( " #00BBBB " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.swiftness_func ( user , 1.4 , 90 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.swiftness_func ( user , 1.4 , 90 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
} )
minetest.register_craftitem ( " mcl_potions:swiftness_plus " , {
description = S ( " Swiftness Potion + " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #00AAAA " ) ,
inventory_image = potion_image ( " #00AAAA " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.swiftness_func ( user , 1.2 , 480 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.swiftness_func ( user , 1.2 , 480 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
} )
minetest.register_craftitem ( " mcl_potions:slowness " , {
description = S ( " Slowness Potion " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #000080 " ) ,
inventory_image = potion_image ( " #000080 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.swiftness_func ( user , 0.85 , 90 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.swiftness_func ( user , 0.85 , 90 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
} )
minetest.register_craftitem ( " mcl_potions:slowness_plus " , {
description = S ( " Slowness Potion + " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #000066 " ) ,
inventory_image = potion_image ( " #000066 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.swiftness_func ( user , 0.85 , 240 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.swiftness_func ( user , 0.85 , 240 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
} )
minetest.register_craftitem ( " mcl_potions:leaping " , {
description = S ( " Leaping Potion " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #00CC33 " ) ,
inventory_image = potion_image ( " #00CC33 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.leaping_func ( user , 1.2 , 180 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.leaping_func ( user , 1.2 , 180 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
} )
2020-05-28 00:36:10 +02:00
2020-06-08 23:47:53 +02:00
minetest.register_craftitem ( " mcl_potions:leaping_2 " , {
description = S ( " Leaping Potion II " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #00EE33 " ) ,
inventory_image = potion_image ( " #00EE33 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.leaping_func ( user , 1.4 , 90 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.leaping_func ( user , 1.4 , 90 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
} )
minetest.register_craftitem ( " mcl_potions:leaping_plus " , {
description = S ( " Leaping Potion + " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #00DD33 " ) ,
inventory_image = potion_image ( " #00DD33 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.leaping_func ( user , 1.2 , 480 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.leaping_func ( user , 1.2 , 480 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
} )
2020-06-13 01:54:45 +02:00
2020-06-08 23:47:53 +02:00
minetest.register_craftitem ( " mcl_potions:weakness " , {
description = S ( " Weakness Potion " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #6600AA " ) ,
inventory_image = potion_image ( " #6600AA " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.weakness_func ( user , 1.2 , 180 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.weakness_func ( user , 1.2 , 180 )
mcl_potions._use_potion ( )
2020-06-08 23:47:53 +02:00
return itemstack
end
} )
2020-06-13 01:54:45 +02:00
2020-06-10 02:09:32 +02:00
minetest.register_craftitem ( " mcl_potions:poison " , {
description = S ( " Poison Potion " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #225533 " ) ,
inventory_image = potion_image ( " #225533 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.poison_func ( user , 2.5 , 45 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.poison_func ( user , 2.5 , 45 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end
} )
minetest.register_craftitem ( " mcl_potions:poison_2 " , {
description = S ( " Poison Potion II " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #447755 " ) ,
inventory_image = potion_image ( " #447755 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.poison_func ( user , 1.2 , 21 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.poison_func ( user , 1.2 , 21 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end
} )
minetest.register_craftitem ( " mcl_potions:poison_plus " , {
description = S ( " Poison Potion + " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #336644 " ) ,
inventory_image = potion_image ( " #336644 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.poison_func ( user , 2.5 , 90 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.poison_func ( user , 2.5 , 90 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end
} )
2020-06-13 01:54:45 +02:00
2020-06-10 02:09:32 +02:00
minetest.register_craftitem ( " mcl_potions:regeneration " , {
description = S ( " Regeneration Potion " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #A52BB2 " ) ,
inventory_image = potion_image ( " #A52BB2 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.regeneration_func ( user , 2.5 , 45 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.regeneration_func ( user , 2.5 , 45 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end
} )
minetest.register_craftitem ( " mcl_potions:regeneration_2 " , {
description = S ( " Regeneration Potion II " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #B52CC2 " ) ,
inventory_image = potion_image ( " #B52CC2 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.regeneration_func ( user , 1.2 , 21 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.regeneration_func ( user , 1.2 , 21 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end
} )
minetest.register_craftitem ( " mcl_potions:regeneration_plus " , {
description = S ( " Regeneration Potion + " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #C53DD3 " ) ,
inventory_image = potion_image ( " #C53DD3 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.regeneration_func ( user , 2.5 , 90 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.regeneration_func ( user , 2.5 , 90 )
mcl_potions._use_potion ( )
2020-06-10 02:09:32 +02:00
return itemstack
end
} )
2020-06-13 01:11:06 +02:00
minetest.register_craftitem ( " mcl_potions:invisibility " , {
description = S ( " Invisibility Potion " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #B0B0B0 " ) ,
inventory_image = potion_image ( " #B0B0B0 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.invisiblility_func ( user , 180 )
mcl_potions._use_potion ( )
2020-06-13 01:11:06 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.invisiblility_func ( user , 180 )
mcl_potions._use_potion ( )
2020-06-13 01:11:06 +02:00
return itemstack
end
} )
minetest.register_craftitem ( " mcl_potions:invisibility_plus " , {
description = S ( " Invisibility Potion + " ) ,
_doc_items_longdesc = brewhelp ,
wield_image = potion_image ( " #A0A0A0 " ) ,
inventory_image = potion_image ( " #A0A0A0 " ) ,
groups = { brewitem = 1 , food = 0 } ,
stack_max = 1 ,
on_place = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.invisiblility_func ( user , 480 )
mcl_potions._use_potion ( )
2020-06-13 01:11:06 +02:00
return itemstack
end ,
on_secondary_use = function ( itemstack , user , pointed_thing )
2020-06-13 01:54:45 +02:00
mcl_potions.invisiblility_func ( user , 480 )
mcl_potions._use_potion ( )
2020-06-13 01:11:06 +02:00
return itemstack
end
} )
2020-06-08 23:47:53 +02:00
-- Look into reducing attack on punch
minetest.register_on_punchnode ( function ( pos , node , puncher , pointed_thing )
if puncher : get_attribute ( " weakness " ) then
print ( " Weakness Active " )
end
end )
2020-06-13 01:11:06 +02:00
2020-06-08 23:47:53 +02:00
-- duration effects of redstone are a factor of 8/3
-- duration effects of glowstone are a time factor of 1/2 and effect of 14/12
-- splash potion effects are reduced by a factor of 3/4
2020-05-28 03:15:46 +02:00
local water_table = {
[ " mcl_nether:nether_wart_item " ] = " mcl_potions:potion_awkward " ,
[ " mcl_potions:fermented_spider_eye " ] = " mcl_potions:weakness " ,
}
2020-06-08 23:47:53 +02:00
2020-05-28 03:15:46 +02:00
local awkward_table = {
[ " mcl_potions:speckled_melon " ] = " mcl_potions:healing " ,
[ " mcl_farming:carrot_item_gold " ] = " mcl_potions:night_vision " ,
[ " mcl_core:sugar " ] = " mcl_potions:swiftness " ,
2020-06-08 23:47:53 +02:00
[ " mcl_mobitems:magma_cream " ] = " mcl_potions:fire_resistance " , --add craft
[ " mcl_mobitems:blaze_powder " ] = " mcl_potions:strength " , --add craft
[ " mcl_fishing:pufferfish_raw " ] = " mcl_potions:water_breathing " , --add craft
[ " mcl_mobitems:ghast_tear " ] = " mcl_potions:regeneration " , --add craft
[ " mcl_mobitems:spider_eye " ] = " mcl_potions:poison " , --add craft
[ " mcl_mobitems:rabbit_foot " ] = " mcl_potions:leaping " , --add craft
2020-05-28 03:15:46 +02:00
}
2020-06-08 23:47:53 +02:00
2020-05-28 03:15:46 +02:00
local output_table = {
[ " mcl_potions:potion_river_water " ] = water_table ,
[ " mcl_potions:potion_water " ] = water_table ,
[ " mcl_potions:potion_awkward " ] = awkward_table ,
}
2020-06-08 23:47:53 +02:00
2020-06-10 02:09:32 +02:00
local enhancement_table = { }
local extension_table = { }
local potions = { }
for i , potion in ipairs ( { " healing " , " harming " , " swiftness " , " leaping " , " poison " , " regeneration " } ) do
enhancement_table [ " mcl_potions: " .. potion ] = " mcl_potions: " .. potion .. " _2 "
table.insert ( potions , potion )
table.insert ( potions , potion .. " _2 " )
if potion ~= " healing " and potion ~= " harming " then
extension_table [ " mcl_potions: " .. potion ] = " mcl_potions: " .. potion .. " _plus "
table.insert ( potions , potion .. " _plus " )
end
end
2020-06-08 23:47:53 +02:00
local inversion_table = {
[ " mcl_potions:healing " ] = " mcl_potions:harming " ,
[ " mcl_potions:healing_2 " ] = " mcl_potions:harming_2 " ,
[ " mcl_potions:swiftness " ] = " mcl_potions:slowness " ,
[ " mcl_potions:swiftness_2 " ] = " mcl_potions:slowness_plus " ,
[ " mcl_potions:swiftness_plus " ] = " mlc_potions:slowness_plus " ,
[ " mcl_potions:leaping " ] = " mcl_potions:slowness " ,
[ " mcl_potions:leaping_2 " ] = " mcl_potions:slowness_plus " ,
2020-06-13 01:11:06 +02:00
[ " mcl_potions:leaping_plus " ] = " mcl_potions:slowness_plus " ,
[ " mcl_potions:night_vision " ] = " mcl_potions:invisibility " ,
2020-06-08 23:47:53 +02:00
}
local splash_table = { }
for i , potion in ipairs ( potions ) do
splash_table [ " mcl_potions: " .. potion ] = " mcl_potions: " .. potion .. " _splash "
end
local mod_table = {
2020-06-10 02:09:32 +02:00
[ " mesecons:wire_00000000_off " ] = extension_table ,
2020-06-08 23:47:53 +02:00
[ " mcl_potions:fermented_spider_eye " ] = inversion_table ,
[ " mcl_nether:glowstone_dust " ] = enhancement_table ,
[ " mcl_mobitems:gunpowder " ] = splash_table ,
}
2020-05-28 00:36:10 +02:00
-- Compare two ingredients for compatable alchemy
function mcl_potions . get_alchemy ( ingr , pot )
2020-05-28 03:15:46 +02:00
if output_table [ pot ] ~= nil then
local brew_table = output_table [ pot ]
if brew_table [ ingr ] ~= nil then
return brew_table [ ingr ]
2020-05-28 00:36:10 +02:00
end
2020-06-08 23:47:53 +02:00
elseif mod_table [ ingr ] ~= nil then
local brew_table = mod_table [ ingr ]
if brew_table [ pot ] ~= nil then
return brew_table [ pot ]
end
elseif splash_table [ ingr ] ~= nil then
local brew_table = mod_table [ ingr ]
if brew_table [ pot ] ~= nil then
return brew_table [ pot ]
end
2020-05-28 00:36:10 +02:00
end
2020-06-08 23:47:53 +02:00
2020-05-28 03:15:46 +02:00
return false
2020-05-28 00:36:10 +02:00
end