Merge branch 'bzoss_brew' of https://git.minetest.land/Wuzzy/MineClone2 into bzoss_brew

This commit is contained in:
Brandon 2020-06-17 22:24:18 -04:00
commit 69d93d362d
35 changed files with 2008 additions and 57 deletions

View File

@ -201,7 +201,11 @@ There are so many people to list (sorry). Check out the respective mod directori
* [Rootyjr](https://github.com/Rootyjr): Fishing rod and bugfixes
* [aligator](https://github.com/aligator): Improvement of doors
* [ryvnf](https://github.com/ryvnf): Explosion mechanics
<<<<<<< HEAD
* MysticTempest: Bugfixes
=======
* bzoss <brandonzoss@gmail.com>: Brewing Stand
>>>>>>> 56a89405107fd3cd9c913a3284f8c9974aa51f62
* Lots of other people: TO BE WRITTEN (see mod directories for details)
#### Mod credits (summary)

View File

@ -343,7 +343,11 @@ local function trace_explode(pos, strength, raydirs, radius, drop_chance, fire,
minetest.bulk_set_node(airs, {name="air"})
end
if #fires > 0 then
<<<<<<< HEAD
minetest.bulk_set_node(fires, {name="mcl_fire:fire"})
=======
minetest.bulk_set_node(fires, {name="mcl_core:fire"})
>>>>>>> 56a89405107fd3cd9c913a3284f8c9974aa51f62
end
-- Update falling nodes
for a=1, #airs do

View File

@ -0,0 +1,7 @@
mcl_init
mcl_formspec
mcl_sounds
mcl_potions
mcl_mobitems
mcl_core?
screwdriver?

1066
mods/ITEMS/mcl_brewing/init.lua Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
# textdomain: mcl_brewing
Brewing Stand=
The brewing stand allows the creating of potions for the benefit of various effects. Stay tuned for developments, as you can only view the stand and interact with it, but not create potions.

View File

@ -0,0 +1 @@
name = mcl_brewing

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

View File

@ -1,3 +1,5 @@
mcl_core
mcl_farming
mcl_mobitems
mcl_fishing
playerphysics

View File

@ -0,0 +1,67 @@
local 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)
function mcl_potions.invisible(player, toggle)
if not player then return false end
invisibility[player:get_player_name()] = toggle
if toggle then -- hide player
player:set_properties({visual_size = {x = 0, y = 0}})
player:set_nametag_attributes({color = {a = 0}})
else -- show player
player:set_properties({visual_size = {x = 1, y = 1}})
player:set_nametag_attributes({color = {a = 255}})
end
end
function mcl_potions._use_potion(item)
item:replace("mcl_potions:glass_bottle")
minetest.sound_play("mcl_potions_drinking")
end
function mcl_potions.healing_func(player, hp) player:set_hp(player:get_hp() + hp) end
function mcl_potions.swiftness_func(player, factor, duration)
playerphysics.add_physics_factor(player, "speed", "swiftness", factor)
minetest.after(duration, function() playerphysics.remove_physics_factor(player, "speed", "swiftness") end )
end
function mcl_potions.leaping_func(player, factor, duration)
playerphysics.add_physics_factor(player, "jump", "leaping", factor)
minetest.after(duration, function() playerphysics.remove_physics_factor(player, "jump", "leaping") end )
end
function mcl_potions.weakness_func(player, factor, duration)
player:set_attribute("weakness", tostring(factor))
print(player:get_player_name().." ".."weakness = "..player:get_attribute("weakness"))
minetest.after(duration, function() player:set_attribute("weakness", tostring(0)) end )
end
function mcl_potions.poison_func(player, factor, duration)
player:set_attribute("poison", tostring(factor))
print(player:get_player_name().." ".."poison = "..player:get_attribute("poison"))
minetest.after(duration, function() player:set_attribute("poison", tostring(0)) end )
end
function mcl_potions.regeneration_func(player, factor, duration)
player:set_attribute("regeneration", tostring(factor))
print(player:get_player_name().." ".."regeneration = "..player:get_attribute("regeneration"))
minetest.after(duration, function() player:set_attribute("regeneration", tostring(0)) end )
end
function mcl_potions.invisiblility_func(player, duration)
mcl_potions.invisible(player, true)
minetest.after(duration, function() mcl_potions.invisible(player, false) end )
end

View File

@ -1,4 +1,10 @@
local S = minetest.get_translator("mcl_potions")
mcl_potions = {}
local modpath = minetest.get_modpath("mcl_potions")
dofile(modpath .. "/functions.lua")
dofile(modpath .. "/splash.lua")
dofile(modpath .. "/potions.lua")
local brewhelp = S("Put this item in an item frame for decoration. It's useless otherwise.")
@ -8,7 +14,7 @@ minetest.register_craftitem("mcl_potions:fermented_spider_eye", {
wield_image = "mcl_potions_spider_eye_fermented.png",
inventory_image = "mcl_potions_spider_eye_fermented.png",
-- TODO: Reveal item when it's actually useful
groups = { brewitem = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1 },
groups = { brewitem = 1, not_in_creative_inventory = 0, not_in_craft_guide = 0 },
stack_max = 64,
})
@ -33,7 +39,7 @@ minetest.register_craftitem("mcl_potions:glass_bottle", {
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 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
@ -130,9 +136,11 @@ local potion_image = function(colorstring, opacity)
if not opacity then
opacity = 127
end
return "mcl_potions_potion_bottle_drinkable.png^(mcl_potions_potion_overlay.png^[colorize:"..colorstring..":"..tostring(opacity)..")"
return "mcl_potions_potion_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_potion_bottle_drinkable.png"
end
-- Cauldron fill up rules:
-- Adding any water increases the water level by 1, preserving the current water type
local cauldron_levels = {
@ -250,55 +258,11 @@ minetest.register_craftitem("mcl_potions:potion_river_water", {
})
local how_to_drink = S("Use the “Place” key to drink it.")
minetest.register_craftitem("mcl_potions:potion_awkward", {
description = S("Awkward Potion"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("This potion has an awkward taste and is used for brewing more potions. Drinking it has no effect."),
_doc_items_usagehelp = how_to_drink,
stack_max = 1,
inventory_image = potion_image("#0000FF"),
wield_image = potion_image("#0000FF"),
-- TODO: Reveal item when it's actually useful
groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=1},
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", {
description = S("Mundane Potion"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("This potion has a clean taste and is used for brewing more potions. Drinking it has no effect."),
_doc_items_usagehelp = how_to_drink,
stack_max = 1,
inventory_image = potion_image("#0000FF"),
wield_image = potion_image("#0000FF"),
-- TODO: Reveal item when it's actually useful
groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=1 },
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_thick", {
description = S("Thick Potion"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("This potion has a bitter taste and is used for brewing more potions. Drinking it has no effect."),
_doc_items_usagehelp = how_to_drink,
stack_max = 1,
inventory_image = potion_image("#0000FF"),
wield_image = potion_image("#0000FF"),
-- TODO: Reveal item when it's actually useful
groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=1 },
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:speckled_melon", {
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."),
stack_max = 64,
-- TODO: Reveal item when it's actually useful
groups = { brewitem = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1 },
groups = { brewitem = 1, not_in_creative_inventory = 0, not_in_craft_guide = 1 },
inventory_image = "mcl_potions_melon_speckled.png",
})
@ -311,12 +275,121 @@ minetest.register_craft({
}
})
minetest.register_craftitem("mcl_potions:dragon_breath", {
description = S("Dragon's Breath"),
_doc_items_longdesc = brewhelp,
wield_image = "mcl_potions_dragon_breath.png",
inventory_image = "mcl_potions_dragon_breath.png",
-- TODO: Reveal item when it's actually useful
groups = { brewitem = 1, not_in_creative_inventory = 1 },
stack_max = 64,
})
-- 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
local water_table = {
["mcl_nether:nether_wart_item"] = "mcl_potions:awkward",
["mcl_potions:fermented_spider_eye"] = "mcl_potions:weakness",
["mcl_potions:speckled_melon"] = "mcl_potions:mundane",
["mcl_core:sugar"] = "mcl_potions:mundane",
["mcl_mobitems:magma_cream"] = "mcl_potions:mundane",
["mcl_mobitems:blaze_powder"] = "mcl_potions:mundane",
["mesecons:wire_00000000_off"] = "mcl_potions:mundane",
["mcl_mobitems:ghast_tear"] = "mcl_potions:mundane",
["mcl_mobitems:spider_eye"] = "mcl_potions:mundane",
["mcl_mobitems:rabbit_foot"] = "mcl_potions:mundane"
}
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",
["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
}
local output_table = {
["mcl_potions:potion_river_water"] = water_table,
["mcl_potions:potion_water"] = water_table,
["mcl_potions:awkward"] = awkward_table,
}
local enhancement_table = {}
local extension_table = {}
local potions = {"awkward", "mundane", "thick"}
for i, potion in ipairs({"healing","harming","swiftness","leaping","poison","regeneration","invisibility","weakness"}) do
table.insert(potions, potion)
if potion ~= "invisibility" and potion ~= "night_vision" and potion ~= "weakness" then
enhancement_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_2"
enhancement_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_2_splash"
table.insert(potions, potion.."_2")
end
if potion ~= "healing" and potion ~= "harming" then
extension_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_plus_splash"
extension_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_plus"
table.insert(potions, potion.."_plus")
end
end
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_plus"] = "mlc_potions:slowness_plus",
["mcl_potions:leaping"] = "mcl_potions:slowness",
["mcl_potions:leaping_plus"] = "mcl_potions:slowness_plus",
["mcl_potions:night_vision"] = "mcl_potions:invisibility",
["mcl_potions:night_vision_plus"] = "mcl_potions:invisibility_plus",
["mcl_potions:poison"] = "mcl_potions:harming",
["mcl_potions:poison_2"] = "mcl_potions:harming_2",
["mcl_potions:healing_splash"] = "mcl_potions:harming_splash",
["mcl_potions:healing_2_splash"] = "mcl_potions:harming_2_splash",
["mcl_potions:swiftness_splash"] = "mcl_potions:slowness_splash",
["mcl_potions:swiftness_plus_splash"] = "mlc_potions:slowness_plus_splash",
["mcl_potions:leaping_splash"] = "mcl_potions:slowness_splash",
["mcl_potions:leaping_plus_splash"] = "mcl_potions:slowness_plus_splash",
["mcl_potions:night_vision_splash"] = "mcl_potions:invisibility_splash",
["mcl_potions:night_vision_plus_splash"] = "mcl_potions:invisibility_plus_splash",
["mcl_potions:poison_splash"] = "mcl_potions:harming_splash",
["mcl_potions:poison_2_splash"] = "mcl_potions:harming_2_splash",
}
local splash_table = {}
local lingering_table = {}
for i, potion in ipairs(potions) do
splash_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_splash"
lingering_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_lingering"
end
local mod_table = {
["mesecons:wire_00000000_off"] = extension_table,
["mcl_potions:fermented_spider_eye"] = inversion_table,
["mcl_nether:glowstone_dust"] = enhancement_table,
["mcl_mobitems:gunpowder"] = splash_table,
["mcl_potions:dragon_breath"] = lingering_table,
}
-- Compare two ingredients for compatable alchemy
function mcl_potions.get_alchemy(ingr, pot)
if output_table[pot] ~= nil then
local brew_table = output_table[pot]
if brew_table[ingr] ~= nil then
return brew_table[ingr]
end
elseif mod_table[ingr] ~= nil then
local brew_table = mod_table[ingr]
if brew_table[pot] ~= nil then
return brew_table[pot]
end
end
return false
end

View File

@ -0,0 +1,549 @@
local S = minetest.get_translator("mcl_potions")
local potion_image = function(colorstring, opacity)
if not opacity then
opacity = 127
end
return "mcl_potions_potion_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_potion_bottle_drinkable.png"
end
local how_to_drink = S("Use the “Place” key to drink it.")
minetest.register_craftitem("mcl_potions:awkward", {
description = S("Awkward Potion"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("This potion has an awkward taste and is used for brewing more potions. Drinking it has no effect."),
_doc_items_usagehelp = how_to_drink,
stack_max = 1,
inventory_image = potion_image("#0000FF"),
wield_image = potion_image("#0000FF"),
-- TODO: Reveal item when it's actually useful
groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=1},
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:mundane", {
description = S("Mundane Potion"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("This potion has a clean taste and is used for brewing more potions. Drinking it has no effect."),
_doc_items_usagehelp = how_to_drink,
stack_max = 1,
inventory_image = potion_image("#0000FF"),
wield_image = potion_image("#0000FF"),
-- TODO: Reveal item when it's actually useful
groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=1 },
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:thick", {
description = S("Thick Potion"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("This potion has a bitter taste and is used for brewing more potions. Drinking it has no effect."),
_doc_items_usagehelp = how_to_drink,
stack_max = 1,
inventory_image = potion_image("#0000FF"),
wield_image = potion_image("#0000FF"),
-- TODO: Reveal item when it's actually useful
groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0 },
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:dragon_breath", {
description = S("Dragon's Breath"),
_doc_items_longdesc = brewhelp,
wield_image = "mcl_potions_dragon_breath.png",
inventory_image = "mcl_potions_dragon_breath.png",
groups = { brewitem = 1, not_in_creative_inventory = 0 },
stack_max = 1,
})
minetest.register_craftitem("mcl_potions:healing", {
description = S("Healing Potion"),
_doc_items_longdesc = brewhelp,
wield_image = potion_image("#CC0000"),
inventory_image = potion_image("#CC0000"),
groups = { brewitem = 1, food=3, can_eat_when_full=1 },
stack_max = 1,
on_place = function(itemstack, user, pointed_thing)
mcl_potions.healing_func(user, 4)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.healing_func(user, 4)
mcl_potions._use_potion(itemstack)
return itemstack
end,
})
minetest.register_craftitem("mcl_potions:healing_2", {
description = S("Healing Potion II"),
_doc_items_longdesc = brewhelp,
wield_image = potion_image("#DD0000"),
inventory_image = potion_image("#DD0000"),
groups = { brewitem = 1, food=3, can_eat_when_full=1 },
stack_max = 1,
on_place = function(itemstack, user, pointed_thing)
mcl_potions.healing_func(user, 8)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.healing_func(user, 8)
mcl_potions._use_potion(itemstack)
return itemstack
end,
})
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)
mcl_potions.healing_func(user, -6)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.healing_func(user, -6)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.healing_func(user, -12)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.healing_func(user, -12)
mcl_potions._use_potion(itemstack)
return itemstack
end,
})
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,
})
minetest.register_craftitem("mcl_potions:swiftness", {
description = S("Swiftness Potion"),
_doc_items_longdesc = brewhelp,
wield_image = potion_image("#009999"),
inventory_image = potion_image("#009999"),
groups = { brewitem = 1, food=0},
stack_max = 1,
on_place = function(itemstack, user, pointed_thing)
mcl_potions.swiftness_func(user, 1.2, 180)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.swiftness_func(user, 1.2, 180)
mcl_potions._use_potion(itemstack)
return itemstack
end,
})
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)
mcl_potions.swiftness_func(user, 1.4, 90)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.swiftness_func(user, 1.4, 90)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.swiftness_func(user, 1.2, 480)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.swiftness_func(user, 1.2, 480)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.swiftness_func(user, 0.85, 90)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.swiftness_func(user, 0.85, 90)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.swiftness_func(user, 0.85, 240)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.swiftness_func(user, 0.85, 240)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.leaping_func(user, 1.2, 180)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.leaping_func(user, 1.2, 180)
mcl_potions._use_potion(itemstack)
return itemstack
end,
})
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)
mcl_potions.leaping_func(user, 1.4, 90)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.leaping_func(user, 1.4, 90)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.leaping_func(user, 1.2, 480)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.leaping_func(user, 1.2, 480)
mcl_potions._use_potion(itemstack)
return itemstack
end,
})
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)
mcl_potions.weakness_func(user, 1.2, 90)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.weakness_func(user, 1.2, 90)
mcl_potions._use_potion(itemstack)
return itemstack
end
})
minetest.register_craftitem("mcl_potions:weakness_plus", {
description = S("Weakness Potion +"),
_doc_items_longdesc = brewhelp,
wield_image = potion_image("#7700BB"),
inventory_image = potion_image("#7700BB"),
groups = { brewitem = 1, food=0},
stack_max = 1,
on_place = function(itemstack, user, pointed_thing)
mcl_potions.weakness_func(user, 1.4, 240)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.weakness_func(user, 1.4, 240)
mcl_potions._use_potion(itemstack)
return itemstack
end
})
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)
mcl_potions.poison_func(user, 2.5, 45)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.poison_func(user, 2.5, 45)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.poison_func(user, 1.2, 21)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.poison_func(user, 1.2, 21)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.poison_func(user, 2.5, 90)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.poison_func(user, 2.5, 90)
mcl_potions._use_potion(itemstack)
return itemstack
end
})
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)
mcl_potions.regeneration_func(user, 2.5, 45)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.regeneration_func(user, 2.5, 45)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.regeneration_func(user, 1.2, 21)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.regeneration_func(user, 1.2, 21)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.regeneration_func(user, 2.5, 90)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.regeneration_func(user, 2.5, 90)
mcl_potions._use_potion(itemstack)
return itemstack
end
})
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)
mcl_potions.invisiblility_func(user, 180)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.invisiblility_func(user, 180)
mcl_potions._use_potion(itemstack)
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)
mcl_potions.invisiblility_func(user, 480)
mcl_potions._use_potion(itemstack)
return itemstack
end,
on_secondary_use = function(itemstack, user, pointed_thing)
mcl_potions.invisiblility_func(user, 480)
mcl_potions._use_potion(itemstack)
return itemstack
end
})
-- 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)

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,175 @@
local splash_image = function(colorstring, opacity)
if not opacity then
opacity = 127
end
return "mcl_potions_splash_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_splash_bottle.png"
end
local function register_splash(name, descr, color, def)
local id = "mcl_potions:"..name.."_splash"
minetest.register_craftitem(id, {
description = descr,
inventory_image = splash_image(color),
on_use = function(item, placer, pointed_thing)
--weapons_shot(itemstack, placer, pointed_thing, def.velocity, name)
local velocity = 10
local dir = placer:get_look_dir();
local pos = placer:getpos();
local obj = minetest.env:add_entity({x=pos.x+dir.x,y=pos.y+2+dir.y,z=pos.z+dir.z}, id.."_flying")
obj:setvelocity({x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity})
obj:setacceleration({x=0, y=-9.8, z=0})
item:take_item()
return item
end,
stack_max = 1,
})
local w = 0.7
minetest.register_entity(id.."_flying",{
textures = {splash_image(color)},
hp_max = 1,
visual_size = {x=w/2,y=w/2},
collisionbox = {0,0,0,0,0,0},
on_step = function(self, dtime)
local pos = self.object:getpos()
local node = minetest.get_node(pos)
local n = node.name
local d = 2
local redux_map = {7/8,0.5,0.25}
if n ~= "air" then
minetest.sound_play("mcl_potions_breaking_glass")
minetest.add_particlespawner({
amount = 40,
time = 2,
minpos = {x=pos.x-d, y=pos.y, z=pos.z-d},
maxpos = {x=pos.x+d, y=pos.y+1, z=pos.z+d},
minvel = {x=-1, y=0, z=-1},
maxvel = {x=1, y=0.5, z=1},
minacc = {x=-0.5, y=0, z=-0.5},
maxacc = {x=0.5, y=.2, z=0.5},
minexptime = 1,
maxexptime = 5,
minsize = 2,
maxsize = 4,
collisiondetection = false,
vertical = false,
texture = "mcl_potions_sprite.png^[colorize:"..color..":127",
})
self.object:remove()
for i, obj in ipairs(minetest.get_objects_inside_radius(pos, 4)) do
if minetest.is_player(obj) then
pos2 = obj:get_pos()
local rad = math.floor(math.sqrt((pos2.x-pos.x)^2 + (pos2.y-pos.y)^2 + (pos2.z-pos.z)^2))
if rad > 0 then def.potion_fun(obj, redux_map[rad]) else def.potion_fun(obj, 1) end
end
end
end
end,
})
end
register_splash("awkward", "Splash Awkward Potion", "#0000FF", {
potion_fun = function(player, redx) end,
})
register_splash("mundane", "Splash Mundane Potion", "#0000FF", {
potion_fun = function(player, redx) end,
})
register_splash("thick", "Splash Thick Potion", "#0000FF", {
potion_fun = function(player, redx) end,
})
register_splash("healing", "Splash Healing", "#AA0000", {
potion_fun = function(player, redx) player:set_hp(player:get_hp() + 3*redx) end,
})
register_splash("healing_2", "Splash Healing II", "#DD0000", {
potion_fun = function(player, redx) player:set_hp(player:get_hp() + 6*redx) end,
})
register_splash("harming", "Splash Harming", "#660099", {
potion_fun = function(player, redx) mcl_potions.healing_func(player, -4*redx) end,
})
register_splash("harming_2", "Splash Harming II", "#330066", {
potion_fun = function(player, redx) mcl_potions.healing_func(player, -6*redx) end,
})
register_splash("leaping", "Splash Leaping", "#00CC33", {
potion_fun = function(player, redx) mcl_potions.leaping_func(player, 1.2, 135*redx) end
})
register_splash("leaping_2", "Splash Leaping II", "#00EE33", {
potion_fun = function(player, redx) mcl_potions.leaping_func(player, 1.4, 135*redx) end
})
register_splash("leaping_plus", "Splash Leaping +", "#00DD33", {
potion_fun = function(player, redx) mcl_potions.leaping_func(player, 1.2, 360*redx) end
})
register_splash("swiftness", "Splash Swiftness", "#009999", {
potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 1.2, 135*redx) end
})
register_splash("swiftness_2", "Splash Swiftness II", "#00BBBB", {
potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 1.4, 135*redx) end
})
register_splash("swiftness_plus", "Splash Swiftness +", "#00BBBB", {
potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 1.2, 360*redx) end
})
register_splash("slowness", "Splash Slowness ", "#000080", {
potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 0.85, 68*redx) end
})
register_splash("slowness_plus", "Splash Slowness +", "#000066", {
potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 0.85, 180*redx) end
})
register_splash("poison", "Splash Poison", "#335544", {
potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end
})
register_splash("poison_2", "Splash Poison II", "#446655", {
potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end
})
register_splash("poison_plus", "Splash Poison +", "#557766", {
potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end
})
register_splash("regeneration", "Splash Regeneration", "#A52BB2", {
potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 180*redx) end
})
register_splash("regeneration_2", "Splash Regeneration II", "#B52CC2", {
potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 180*redx) end
})
register_splash("regeneration_plus", "Splash Regeneration +", "#C53DD3", {
potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 300*redx) end
})
register_splash("invisibility", "Splash Invisibility", "#B0B0B0", {
potion_fun = function(player, redx) mcl_potions.invisiblility_func(player, 135*redx) end
})
register_splash("invisibility_plus", "Splash Invisibility +", "#A0A0A0", {
potion_fun = function(player, redx) mcl_potions.invisiblility_func(player, 300*redx) end
})
register_splash("weakness", "Splash Weakness", "#6600AA", {
potion_fun = function(player, redx) mcl_potions.weakness_func(player, 1.2, 68*redx) end
})
register_splash("weakness_plus", "Splash Weakness +", "#7700BB", {
potion_fun = function(player, redx) mcl_potions.weakness_func(player, 1.4, 180*redx) end
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB