mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-22 10:31: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 record_protection_violation = minetest.record_protection_violation
|
||||
|
||||
if mod_mcl_core then
|
||||
minetest.register_craft({
|
||||
output = "mcl_buckets:bucket_empty 1",
|
||||
recipe = {
|
||||
{"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"},
|
||||
{"", "mcl_core:iron_ingot", ""},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_buckets:bucket_empty 1",
|
||||
recipe = {
|
||||
{"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"},
|
||||
{"", "mcl_core:iron_ingot", ""},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
mcl_buckets = {
|
||||
liquids = {},
|
||||
|
@ -88,9 +88,7 @@ end
|
|||
local pointable_sources = {}
|
||||
|
||||
local function bucket_raycast(user)
|
||||
--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
|
||||
local look_dir = user:get_look_dir()
|
||||
look_dir = vector.multiply(look_dir, 5)
|
||||
|
@ -100,7 +98,6 @@ local function bucket_raycast(user)
|
|||
if ray then
|
||||
for pointed_thing in ray do
|
||||
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}
|
||||
end
|
||||
end
|
||||
|
@ -242,7 +239,6 @@ local function on_place_bucket_empty(itemstack, user, pointed_thing)
|
|||
if liquid_name then
|
||||
local liquid_def = mcl_buckets.liquids[liquid_name]
|
||||
if liquid_def then
|
||||
--minetest.chat_send_all("test")
|
||||
-- Fill bucket, but not in Creative Mode
|
||||
-- FIXME: remove this line
|
||||
--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")
|
||||
end
|
||||
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
|
||||
if new_bucket then
|
||||
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_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"),
|
||||
--liquids_pointable = true,
|
||||
inventory_image = "bucket.png",
|
||||
stack_max = 16,
|
||||
_on_dispense = function(stack, pos, droppos, dropnode, dropdir)
|
||||
|
|
|
@ -10,13 +10,6 @@ local function sound_place(itemname, pos)
|
|||
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
|
||||
-- Lava bucket
|
||||
mcl_buckets.register_liquid({
|
||||
|
@ -29,11 +22,21 @@ if mod_mcl_core then
|
|||
end
|
||||
end,
|
||||
source_take = {"mcl_core:lava_source", "mcl_nether:nether_lava_source"},
|
||||
on_take = function(user)
|
||||
if has_awards and user and user:is_player() then
|
||||
awards.unlock(user:get_player_name(), "mcl:hotStuff")
|
||||
end
|
||||
end,
|
||||
on_take = function(user)
|
||||
if has_awards and user and user:is_player() then
|
||||
awards.unlock(user:get_player_name(), "mcl:hotStuff")
|
||||
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",
|
||||
inventory_image = "bucket_lava.png",
|
||||
name = S("Lava Bucket"),
|
||||
|
|
|
@ -5,7 +5,7 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
|||
-- TODO: Extinguish fire of burning entities
|
||||
|
||||
-- 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
|
||||
if water_level == 0 then -- empty
|
||||
floor_y = -0.1875
|
||||
|
@ -36,12 +36,6 @@ local create_cauldron_nodebox = function(water_level)
|
|||
}
|
||||
end
|
||||
|
||||
local cauldron_nodeboxes = {}
|
||||
for w=0,3 do
|
||||
cauldron_nodeboxes[w] = create_cauldron_nodebox(w)
|
||||
end
|
||||
|
||||
|
||||
-- Empty cauldron
|
||||
minetest.register_node("mcl_cauldrons:cauldron", {
|
||||
description = S("Cauldron"),
|
||||
|
@ -55,7 +49,7 @@ minetest.register_node("mcl_cauldrons:cauldron", {
|
|||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {pickaxey=1, deco_block=1, cauldron=1},
|
||||
node_box = cauldron_nodeboxes[0],
|
||||
node_box = create_cauldron_nodebox(0),
|
||||
selection_box = { type = "regular" },
|
||||
tiles = {
|
||||
"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
|
||||
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 water_tex
|
||||
if river_water then
|
||||
if liquid == "river_water" then
|
||||
id = id .. "r"
|
||||
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
|
||||
water_tex = "default_water_source_animated.png^[verticalframe:16:0"
|
||||
end
|
||||
|
@ -85,8 +82,8 @@ local register_filled_cauldron = function(water_level, description, river_water)
|
|||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
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],
|
||||
collision_box = cauldron_nodeboxes[0],
|
||||
node_box = create_cauldron_nodebox(water_level),
|
||||
collision_box = create_cauldron_nodebox(0),
|
||||
selection_box = { type = "regular" },
|
||||
tiles = {
|
||||
"("..water_tex..")^mcl_cauldrons_cauldron_top.png",
|
||||
|
@ -106,14 +103,12 @@ local register_filled_cauldron = function(water_level, description, river_water)
|
|||
end
|
||||
|
||||
-- Filled cauldrons (3 levels)
|
||||
register_filled_cauldron(1, S("Cauldron (1/3 Water)"))
|
||||
register_filled_cauldron(2, S("Cauldron (2/3 Water)"))
|
||||
register_filled_cauldron(3, S("Cauldron (3/3 Water)"))
|
||||
|
||||
if minetest.get_modpath("mclx_core") then
|
||||
register_filled_cauldron(1, S("Cauldron (1/3 River Water)"), true)
|
||||
register_filled_cauldron(2, S("Cauldron (2/3 River Water)"), true)
|
||||
register_filled_cauldron(3, S("Cauldron (3/3 River Water)"), true)
|
||||
for i=1,3 do
|
||||
register_filled_cauldron(i, S("Cauldron (" ..i .. "/3 Water)"))
|
||||
register_filled_cauldron(i, S("Cauldron (" ..i .. "/3 Water)"),"lava")
|
||||
if minetest.get_modpath("mclx_core") then
|
||||
register_filled_cauldron(i, S("Cauldron (" ..i .. "/3 Water)"),"river_water")
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -125,19 +120,36 @@ minetest.register_craft({
|
|||
}
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
label = "cauldrons",
|
||||
nodenames = {"group:cauldron_filled"},
|
||||
interval = 0.5,
|
||||
chance = 1,
|
||||
action = function(pos, node)
|
||||
for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0.4)) do
|
||||
if mcl_burning.is_burning(obj) then
|
||||
mcl_burning.extinguish(obj)
|
||||
local new_group = minetest.get_item_group(node.name, "cauldron_filled") - 1
|
||||
minetest.swap_node(pos, {name = "mcl_cauldrons:cauldron" .. (new_group == 0 and "" or "_" .. new_group)})
|
||||
break
|
||||
local function cauldron_extinguish(obj,pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if mcl_burning.is_burning(obj) then
|
||||
mcl_burning.extinguish(obj)
|
||||
local new_group = minetest.get_item_group(node.name, "cauldron_filled") - 1
|
||||
minetest.swap_node(pos, {name = "mcl_cauldrons:cauldron" .. (new_group == 0 and "" or "_" .. new_group)})
|
||||
end
|
||||
end
|
||||
|
||||
local etime = 0
|
||||
minetest.register_globalstep(function(dtime)
|
||||
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)
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
name = mcl_cauldrons
|
||||
depends = mcl_core, mcl_sounds
|
||||
optional_depends = mclx_core, doc
|
||||
optional_depends = mclx_core, doc, mcl_burning
|
||||
|
|
Loading…
Reference in a new issue