diff --git a/craftitems.lua b/craftitems.lua index 7f54d5d..fa271b6 100644 --- a/craftitems.lua +++ b/craftitems.lua @@ -57,7 +57,7 @@ minetest.register_craftitem("magicalities:tellium", { }) minetest.register_craftitem("magicalities:transterra", { - description = "Transterra", + description = "Transterra\nThis substance can change the world!", inventory_image = "magicalities_red_stone.png", groups = {shard = 1, transterra = 1} }) diff --git a/crystals.lua b/crystals.lua index b7848e5..ea370cf 100644 --- a/crystals.lua +++ b/crystals.lua @@ -71,6 +71,20 @@ function magicalities.crystals.generate_crystal_buffer(pos) return final end +-- If content goes to zero, remove element from crystal +local function update_contents(pos, contents) + local meta = minetest.get_meta(pos) + local keep = {} + + for name,data in pairs(contents) do + if data[1] > 0 then + keep[name] = data + end + end + + meta:set_string("contents", minetest.serialize(keep)) +end + local function crystal_rightclick(pos, node, clicker, itemstack, pointed_thing) local meta = minetest.get_meta(pos) @@ -86,10 +100,27 @@ local function crystal_rightclick(pos, node, clicker, itemstack, pointed_thing) return itemstack end + -- Check if player can preserve this crystal + local preserve = magicalities.player_has_ability(clicker:get_player_name(), "magicalities:crystal_preserve") + local mincheck = 0 + if preserve then mincheck = 1 end + + -- Check if we can take more than one + local draining = magicalities.player_has_ability(clicker:get_player_name(), "magicalities:crystal_draining") + local maxtake = 1 + if draining then maxtake = 5 end + local one_of_each = {} for name, count in pairs(contents) do - if count[1] > 0 then - one_of_each[name] = 1 + if count[1] > mincheck then + local take = maxtake + if count[1] <= maxtake then + take = count[1] - mincheck + end + + if take > 0 then + one_of_each[name] = take + end end end @@ -126,7 +157,7 @@ local function crystal_rightclick(pos, node, clicker, itemstack, pointed_thing) itemstack = magicalities.wands.wand_insert_contents(itemstack, can_put) magicalities.wands.update_wand_desc(itemstack) - meta:set_string("contents", minetest.serialize(contents)) + update_contents(pos, contents) return itemstack end diff --git a/register.lua b/register.lua index 86ec5a2..bad2a78 100644 --- a/register.lua +++ b/register.lua @@ -360,9 +360,24 @@ end -- Abilities +magicalities.register_ability_learnable({ + name = "magicalities:crystal_preserve", + description = "Crystal Preservation\nAvoid collecting every last drop of elements", + icon = "magicalities_crystal_preservation.png" +}) + +magicalities.register_ability_learnable({ + name = "magicalities:crystal_draining", + description = "Efficient Crystal Draining\nIncrease element drain rate", + depends = {"magicalities:crystal_preserve"}, + icon = "magicalities_crystal_draining.png" +}) + magicalities.register_ability_learnable({ name = "magicalities:pickup_jarred", - description = "Crystal Jarring" + description = "Crystal Jarring\nPick up intact crystals using jarring", + depends = {"magicalities:crystal_preserve"}, + icon = "magicalities_jarred.png" }) magicalities.register_recipe_learnable({ diff --git a/textures/magicalities_crystal_draining.png b/textures/magicalities_crystal_draining.png new file mode 100644 index 0000000..2f6ed95 Binary files /dev/null and b/textures/magicalities_crystal_draining.png differ diff --git a/textures/magicalities_crystal_preservation.png b/textures/magicalities_crystal_preservation.png new file mode 100644 index 0000000..125272d Binary files /dev/null and b/textures/magicalities_crystal_preservation.png differ diff --git a/textures/magicalities_jarred.png b/textures/magicalities_jarred.png new file mode 100644 index 0000000..315b396 Binary files /dev/null and b/textures/magicalities_jarred.png differ