mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-17 16:41:06 +01:00
Merge pull request 'Lava cauldrons and other cauldron/bucket fixes' (#2350) from lava_cauldron into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/2350 Reviewed-by: MysticTempest <mystictempest@noreply.git.minetest.land>
This commit is contained in:
commit
ecbc94e822
4 changed files with 76 additions and 60 deletions
|
@ -29,15 +29,15 @@ local is_creative_enabled = minetest.is_creative_enabled
|
||||||
local is_protected = minetest.is_protected
|
local is_protected = minetest.is_protected
|
||||||
local record_protection_violation = minetest.record_protection_violation
|
local record_protection_violation = minetest.record_protection_violation
|
||||||
|
|
||||||
if mod_mcl_core then
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "mcl_buckets:bucket_empty 1",
|
output = "mcl_buckets:bucket_empty 1",
|
||||||
recipe = {
|
recipe = {
|
||||||
{"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"},
|
{"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"},
|
||||||
{"", "mcl_core:iron_ingot", ""},
|
{"", "mcl_core:iron_ingot", ""},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
end
|
|
||||||
|
|
||||||
mcl_buckets = {
|
mcl_buckets = {
|
||||||
liquids = {},
|
liquids = {},
|
||||||
|
@ -88,9 +88,7 @@ end
|
||||||
local pointable_sources = {}
|
local pointable_sources = {}
|
||||||
|
|
||||||
local function bucket_raycast(user)
|
local function bucket_raycast(user)
|
||||||
--local pos = user:get_pos()
|
|
||||||
local pos = user:get_pos()
|
local pos = user:get_pos()
|
||||||
--local pos = vector.add(user:get_pos(), user:get_bone_position("Head_Control"))
|
|
||||||
pos.y = pos.y + user:get_properties().eye_height
|
pos.y = pos.y + user:get_properties().eye_height
|
||||||
local look_dir = user:get_look_dir()
|
local look_dir = user:get_look_dir()
|
||||||
look_dir = vector.multiply(look_dir, 5)
|
look_dir = vector.multiply(look_dir, 5)
|
||||||
|
@ -100,7 +98,6 @@ local function bucket_raycast(user)
|
||||||
if ray then
|
if ray then
|
||||||
for pointed_thing in ray do
|
for pointed_thing in ray do
|
||||||
if pointed_thing and pointable_sources[get_node(pointed_thing.above).name] then
|
if pointed_thing and pointable_sources[get_node(pointed_thing.above).name] then
|
||||||
--minetest.chat_send_all("found!")
|
|
||||||
return {under=pointed_thing.under,above=pointed_thing.above}
|
return {under=pointed_thing.under,above=pointed_thing.above}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -242,7 +239,6 @@ local function on_place_bucket_empty(itemstack, user, pointed_thing)
|
||||||
if liquid_name then
|
if liquid_name then
|
||||||
local liquid_def = mcl_buckets.liquids[liquid_name]
|
local liquid_def = mcl_buckets.liquids[liquid_name]
|
||||||
if liquid_def then
|
if liquid_def then
|
||||||
--minetest.chat_send_all("test")
|
|
||||||
-- Fill bucket, but not in Creative Mode
|
-- Fill bucket, but not in Creative Mode
|
||||||
-- FIXME: remove this line
|
-- FIXME: remove this line
|
||||||
--if not is_creative_enabled(user:get_player_name()) then
|
--if not is_creative_enabled(user:get_player_name()) then
|
||||||
|
@ -282,6 +278,12 @@ local function on_place_bucket_empty(itemstack, user, pointed_thing)
|
||||||
new_bucket = ItemStack("mcl_buckets:bucket_river_water")
|
new_bucket = ItemStack("mcl_buckets:bucket_river_water")
|
||||||
end
|
end
|
||||||
sound_take("mclx_core:river_water_source", pointed_thing.under)
|
sound_take("mclx_core:river_water_source", pointed_thing.under)
|
||||||
|
elseif nn == "mcl_cauldrons:cauldron_3_lava" then
|
||||||
|
set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"})
|
||||||
|
if not is_creative_enabled(user:get_player_name()) then
|
||||||
|
new_bucket = ItemStack("mcl_buckets:bucket_lava")
|
||||||
|
end
|
||||||
|
sound_take("mcl_core:lava_source", pointed_thing.under)
|
||||||
end
|
end
|
||||||
if new_bucket then
|
if new_bucket then
|
||||||
return give_bucket(new_bucket, itemstack, user)
|
return give_bucket(new_bucket, itemstack, user)
|
||||||
|
@ -366,7 +368,6 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", {
|
||||||
_doc_items_longdesc = S("A bucket can be used to collect and release liquids."),
|
_doc_items_longdesc = S("A bucket can be used to collect and release liquids."),
|
||||||
_doc_items_usagehelp = S("Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else."),
|
_doc_items_usagehelp = S("Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else."),
|
||||||
_tt_help = S("Collects liquids"),
|
_tt_help = S("Collects liquids"),
|
||||||
--liquids_pointable = true,
|
|
||||||
inventory_image = "bucket.png",
|
inventory_image = "bucket.png",
|
||||||
stack_max = 16,
|
stack_max = 16,
|
||||||
_on_dispense = function(stack, pos, droppos, dropnode, dropdir)
|
_on_dispense = function(stack, pos, droppos, dropnode, dropdir)
|
||||||
|
|
|
@ -10,13 +10,6 @@ local function sound_place(itemname, pos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[local sound_take = function(itemname, pos)
|
|
||||||
local def = minetest.registered_nodes[itemname]
|
|
||||||
if def and def.sounds and def.sounds.dug then
|
|
||||||
minetest.sound_play(def.sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true)
|
|
||||||
end
|
|
||||||
end]]
|
|
||||||
|
|
||||||
if mod_mcl_core then
|
if mod_mcl_core then
|
||||||
-- Lava bucket
|
-- Lava bucket
|
||||||
mcl_buckets.register_liquid({
|
mcl_buckets.register_liquid({
|
||||||
|
@ -29,11 +22,21 @@ if mod_mcl_core then
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
source_take = {"mcl_core:lava_source", "mcl_nether:nether_lava_source"},
|
source_take = {"mcl_core:lava_source", "mcl_nether:nether_lava_source"},
|
||||||
on_take = function(user)
|
on_take = function(user)
|
||||||
if has_awards and user and user:is_player() then
|
if has_awards and user and user:is_player() then
|
||||||
awards.unlock(user:get_player_name(), "mcl:hotStuff")
|
awards.unlock(user:get_player_name(), "mcl:hotStuff")
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
extra_check = function(pos, placer)
|
||||||
|
local nn = minetest.get_node(pos).name
|
||||||
|
if minetest.get_item_group(nn, "cauldron") ~= 0 then
|
||||||
|
if nn ~= "mcl_cauldrons:cauldron_3_lava" then
|
||||||
|
minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3_lava"})
|
||||||
|
end
|
||||||
|
sound_place("mcl_core:lava_source", pos)
|
||||||
|
return false, true
|
||||||
|
end
|
||||||
|
end,
|
||||||
bucketname = "mcl_buckets:bucket_lava",
|
bucketname = "mcl_buckets:bucket_lava",
|
||||||
inventory_image = "bucket_lava.png",
|
inventory_image = "bucket_lava.png",
|
||||||
name = S("Lava Bucket"),
|
name = S("Lava Bucket"),
|
||||||
|
|
|
@ -5,7 +5,7 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
-- TODO: Extinguish fire of burning entities
|
-- TODO: Extinguish fire of burning entities
|
||||||
|
|
||||||
-- Convenience function because the cauldron nodeboxes are very similar
|
-- Convenience function because the cauldron nodeboxes are very similar
|
||||||
local create_cauldron_nodebox = function(water_level)
|
local function create_cauldron_nodebox(water_level)
|
||||||
local floor_y
|
local floor_y
|
||||||
if water_level == 0 then -- empty
|
if water_level == 0 then -- empty
|
||||||
floor_y = -0.1875
|
floor_y = -0.1875
|
||||||
|
@ -36,12 +36,6 @@ local create_cauldron_nodebox = function(water_level)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
local cauldron_nodeboxes = {}
|
|
||||||
for w=0,3 do
|
|
||||||
cauldron_nodeboxes[w] = create_cauldron_nodebox(w)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- Empty cauldron
|
-- Empty cauldron
|
||||||
minetest.register_node("mcl_cauldrons:cauldron", {
|
minetest.register_node("mcl_cauldrons:cauldron", {
|
||||||
description = S("Cauldron"),
|
description = S("Cauldron"),
|
||||||
|
@ -55,7 +49,7 @@ minetest.register_node("mcl_cauldrons:cauldron", {
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {pickaxey=1, deco_block=1, cauldron=1},
|
groups = {pickaxey=1, deco_block=1, cauldron=1},
|
||||||
node_box = cauldron_nodeboxes[0],
|
node_box = create_cauldron_nodebox(0),
|
||||||
selection_box = { type = "regular" },
|
selection_box = { type = "regular" },
|
||||||
tiles = {
|
tiles = {
|
||||||
"mcl_cauldrons_cauldron_inner.png^mcl_cauldrons_cauldron_top.png",
|
"mcl_cauldrons_cauldron_inner.png^mcl_cauldrons_cauldron_top.png",
|
||||||
|
@ -68,12 +62,15 @@ minetest.register_node("mcl_cauldrons:cauldron", {
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Template function for cauldrons with water
|
-- Template function for cauldrons with water
|
||||||
local register_filled_cauldron = function(water_level, description, river_water)
|
local function register_filled_cauldron(water_level, description, liquid)
|
||||||
local id = "mcl_cauldrons:cauldron_"..water_level
|
local id = "mcl_cauldrons:cauldron_"..water_level
|
||||||
local water_tex
|
local water_tex
|
||||||
if river_water then
|
if liquid == "river_water" then
|
||||||
id = id .. "r"
|
id = id .. "r"
|
||||||
water_tex = "default_river_water_source_animated.png^[verticalframe:16:0"
|
water_tex = "default_river_water_source_animated.png^[verticalframe:16:0"
|
||||||
|
elseif liquid == "lava" then
|
||||||
|
id = id .. "_lava"
|
||||||
|
water_tex = "default_lava_source_animated.png^[verticalframe:16:0"
|
||||||
else
|
else
|
||||||
water_tex = "default_water_source_animated.png^[verticalframe:16:0"
|
water_tex = "default_water_source_animated.png^[verticalframe:16:0"
|
||||||
end
|
end
|
||||||
|
@ -85,8 +82,8 @@ local register_filled_cauldron = function(water_level, description, river_water)
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {pickaxey=1, not_in_creative_inventory=1, cauldron=(1+water_level), cauldron_filled=water_level, comparator_signal=water_level},
|
groups = {pickaxey=1, not_in_creative_inventory=1, cauldron=(1+water_level), cauldron_filled=water_level, comparator_signal=water_level},
|
||||||
node_box = cauldron_nodeboxes[water_level],
|
node_box = create_cauldron_nodebox(water_level),
|
||||||
collision_box = cauldron_nodeboxes[0],
|
collision_box = create_cauldron_nodebox(0),
|
||||||
selection_box = { type = "regular" },
|
selection_box = { type = "regular" },
|
||||||
tiles = {
|
tiles = {
|
||||||
"("..water_tex..")^mcl_cauldrons_cauldron_top.png",
|
"("..water_tex..")^mcl_cauldrons_cauldron_top.png",
|
||||||
|
@ -106,14 +103,12 @@ local register_filled_cauldron = function(water_level, description, river_water)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Filled cauldrons (3 levels)
|
-- Filled cauldrons (3 levels)
|
||||||
register_filled_cauldron(1, S("Cauldron (1/3 Water)"))
|
for i=1,3 do
|
||||||
register_filled_cauldron(2, S("Cauldron (2/3 Water)"))
|
register_filled_cauldron(i, S("Cauldron (" ..i .. "/3 Water)"))
|
||||||
register_filled_cauldron(3, S("Cauldron (3/3 Water)"))
|
register_filled_cauldron(i, S("Cauldron (" ..i .. "/3 Water)"),"lava")
|
||||||
|
if minetest.get_modpath("mclx_core") then
|
||||||
if minetest.get_modpath("mclx_core") then
|
register_filled_cauldron(i, S("Cauldron (" ..i .. "/3 Water)"),"river_water")
|
||||||
register_filled_cauldron(1, S("Cauldron (1/3 River Water)"), true)
|
end
|
||||||
register_filled_cauldron(2, S("Cauldron (2/3 River Water)"), true)
|
|
||||||
register_filled_cauldron(3, S("Cauldron (3/3 River Water)"), true)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
@ -125,19 +120,36 @@ minetest.register_craft({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_abm({
|
local function cauldron_extinguish(obj,pos)
|
||||||
label = "cauldrons",
|
local node = minetest.get_node(pos)
|
||||||
nodenames = {"group:cauldron_filled"},
|
if mcl_burning.is_burning(obj) then
|
||||||
interval = 0.5,
|
mcl_burning.extinguish(obj)
|
||||||
chance = 1,
|
local new_group = minetest.get_item_group(node.name, "cauldron_filled") - 1
|
||||||
action = function(pos, node)
|
minetest.swap_node(pos, {name = "mcl_cauldrons:cauldron" .. (new_group == 0 and "" or "_" .. new_group)})
|
||||||
for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0.4)) do
|
end
|
||||||
if mcl_burning.is_burning(obj) then
|
end
|
||||||
mcl_burning.extinguish(obj)
|
|
||||||
local new_group = minetest.get_item_group(node.name, "cauldron_filled") - 1
|
local etime = 0
|
||||||
minetest.swap_node(pos, {name = "mcl_cauldrons:cauldron" .. (new_group == 0 and "" or "_" .. new_group)})
|
minetest.register_globalstep(function(dtime)
|
||||||
break
|
etime = dtime + etime
|
||||||
|
if etime < 0.5 then return end
|
||||||
|
etime = 0
|
||||||
|
for _,pl in pairs(minetest.get_connected_players()) do
|
||||||
|
local n = minetest.find_node_near(pl:get_pos(),0.4,{"group:cauldron_filled"},true)
|
||||||
|
if n and not minetest.get_node(n).name:find("lava") then
|
||||||
|
cauldron_extinguish(pl,n)
|
||||||
|
elseif n and minetest.get_node(n).name:find("lava") then
|
||||||
|
mcl_burning.set_on_fire(pl, 5)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for _,ent in pairs(minetest.luaentities) do
|
||||||
|
if ent.object:get_pos() and ent.is_mob then
|
||||||
|
local n = minetest.find_node_near(ent.object:get_pos(),0.4,{"group:cauldron_filled"},true)
|
||||||
|
if n and not minetest.get_node(n).name:find("lava") then
|
||||||
|
cauldron_extinguish(ent.object,n)
|
||||||
|
elseif n and minetest.get_node(n).name:find("lava") then
|
||||||
|
mcl_burning.set_on_fire(ent.object, 5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
end)
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
name = mcl_cauldrons
|
name = mcl_cauldrons
|
||||||
depends = mcl_core, mcl_sounds
|
depends = mcl_core, mcl_sounds
|
||||||
optional_depends = mclx_core, doc
|
optional_depends = mclx_core, doc, mcl_burning
|
||||||
|
|
Loading…
Reference in a new issue