From 5e5b3ebf757363361d4709dc5b5d6a9959b0ca05 Mon Sep 17 00:00:00 2001 From: AFCMS Date: Thu, 18 Mar 2021 19:18:35 +0100 Subject: [PATCH] WIP API for mcl_cauldrons --- mods/ITEMS/mcl_cauldrons/init.lua | 37 ++++++++++++++++++++++++++----- mods/ITEMS/mcl_potions/init.lua | 26 ++-------------------- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/mods/ITEMS/mcl_cauldrons/init.lua b/mods/ITEMS/mcl_cauldrons/init.lua index b72c608a0c..fb3e9d366b 100644 --- a/mods/ITEMS/mcl_cauldrons/init.lua +++ b/mods/ITEMS/mcl_cauldrons/init.lua @@ -77,6 +77,10 @@ function mcl_cauldrons.get_cauldron_level(pos) return minetest.get_item_group(nn.name, "cauldron") end +function mcl_cauldrons.is_cauldron(name) + return minetest.get_item_group(nn.name, "cauldron") ~= 0 +end + function mcl_cauldrons.take_cauldron(pos, itemstack, user, sounds) local nn = minetest.get_node(pos) if mcl_cauldrons.registered_cauldrons[nn.name] and mcl_cauldrons.registered_cauldrons[nn.name].bucket then @@ -96,6 +100,32 @@ function mcl_cauldrons.take_cauldron(pos, itemstack, user, sounds) end end +function mcl_cauldrons.take_small_cauldron(pos, itemstack, user, sounds) + local nn = minetest.get_node(pos) + if mcl_cauldrons.registered_cauldrons[nn.name] and mcl_cauldrons.registered_cauldrons[nn.name].bottle then + if user and not minetest.is_creative_enabled(user:get_player_name()) then + local number = mcl_cauldrons.add_cauldron_level(pos, mcl_cauldrons.registered_cauldrons[nn.name].name, -1) + if number ~= 0 then + if sounds then minetest.sound_play(sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end + return ItemStack(mcl_cauldrons.registered_cauldrons[nn.name].bottle) + end + return itemstack + else + local number = mcl_cauldrons.add_cauldron_level(pos, mcl_cauldrons.registered_cauldrons[nn.name].name, -1) + if number ~= 0 then + if sounds then minetest.sound_play(sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end + end + return itemstack + end + else + local number = mcl_cauldrons.add_cauldron_level(pos, mcl_cauldrons.registered_cauldrons[nn.name].name, -1) + if number ~= 0 then + if sounds then minetest.sound_play(sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end + end + return itemstack + end +end + function mcl_cauldrons.get_cauldron_string(type, level) if mcl_cauldrons.registered_cauldrons["mcl_cauldrons:cauldron_"..type.."_"..level] then return "mcl_cauldrons:cauldron_"..type.."_"..level @@ -112,12 +142,8 @@ function mcl_cauldrons.add_cauldron_level(pos, type, number) local number = mcl_cauldrons.get_cauldron_level(pos)+number if number > 4 then number = 4 end if number < 1 then number = 1 end - --if mcl_cauldrons.set_cauldron_level(pos, type, number) - --else - -- minetest.log("error", "[mcl_cauldrons] trying to add level to not cauldron node at "..minetest.serialize(pos)) - --end - return + return number end function mcl_cauldrons.register_cauldron_type(def) @@ -156,6 +182,7 @@ end mcl_cauldrons.register_cauldron_type({ name = "water", bucket = "mcl_buckets:bucket_water", + bottle = "mcl_potions:water", desc = S("Cauldron (%s/3 Water)"), texture = "default_water_source_animated.png" }) diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 65bb0d4de5..df9d2803cf 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -75,35 +75,13 @@ minetest.register_craftitem("mcl_potions:glass_bottle", { from_liquid_source = true river_water = node.name == "mclx_core:river_water_source" -- Or reduce water level of cauldron by 1 - elseif string.sub(node.name, 1, 14) == "mcl_cauldrons:" then + elseif mcl_cauldrons.is_cauldron(node.name) 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 - end + local itemstack = mcl_cauldrons.take_small_cauldron(pointed_thing.under, itemstack, placer, {dug = "mcl_potions_bottle_fill"}) if get_water then local water_bottle if river_water then