forked from VoxeLibre/VoxeLibre
new buckets fixes
This commit is contained in:
parent
f70dbb8cfa
commit
40f4287ff2
|
@ -18,7 +18,8 @@ local string = string
|
|||
local raycast = minetest.raycast
|
||||
local get_node = minetest.get_node
|
||||
local add_node = minetest.add_node
|
||||
local get_node_group = minetest.get_node_group
|
||||
local add_item = minetest.add_item
|
||||
|
||||
|
||||
if mod_mcl_core then
|
||||
minetest.register_craft({
|
||||
|
@ -26,7 +27,7 @@ if mod_mcl_core then
|
|||
recipe = {
|
||||
{"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"},
|
||||
{"", "mcl_core:iron_ingot", ""},
|
||||
}
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -34,42 +35,47 @@ mcl_buckets = {}
|
|||
mcl_buckets.liquids = {}
|
||||
|
||||
-- Sound helper functions for placing and taking liquids
|
||||
local sound_place = function(itemname, pos)
|
||||
local function sound_place(itemname, pos)
|
||||
local def = minetest.registered_nodes[itemname]
|
||||
if def and def.sounds and def.sounds.place then
|
||||
minetest.sound_play(def.sounds.place, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true)
|
||||
end
|
||||
end
|
||||
|
||||
local sound_take = function(itemname, pos)
|
||||
local function sound_take(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
|
||||
|
||||
local place_liquid = function(pos, itemstring)
|
||||
local function place_liquid(pos, itemstring)
|
||||
local fullness = minetest.registered_nodes[itemstring].liquid_range
|
||||
sound_place(itemstring, pos)
|
||||
minetest.add_node(pos, {name=itemstring, param2=fullness})
|
||||
end
|
||||
local function give_bucket(new_bucket, itemstack, user)
|
||||
if itemstack:get_count() == 1 then
|
||||
return new_bucket
|
||||
else
|
||||
local inv = user:get_inventory()
|
||||
if inv:room_for_item("main", new_bucket) then
|
||||
inv:add_item("main", new_bucket)
|
||||
else
|
||||
minetest.add_item(user:get_pos(), new_bucket)
|
||||
end
|
||||
if not minetest.is_creative_enabled(user:get_player_name()) then
|
||||
itemstack:take_item()
|
||||
end
|
||||
local inv = user:get_inventory()
|
||||
if minetest.is_creative_enabled(user:get_player_name()) then
|
||||
--TODO: is a full bucket added if inv doesn't contain one?
|
||||
return itemstack
|
||||
else
|
||||
if itemstack:get_count() == 1 then
|
||||
return new_bucket
|
||||
else
|
||||
if inv:room_for_item("main", new_bucket) then
|
||||
inv:add_item("main", new_bucket)
|
||||
else
|
||||
add_item(user:get_pos(), new_bucket)
|
||||
end
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local pointable_sources = {}
|
||||
|
||||
local function bucket_raycast(user)
|
||||
local pos = user:get_pos()
|
||||
pos.y = pos.y + user:get_properties().eye_height
|
||||
|
@ -77,10 +83,10 @@ local function bucket_raycast(user)
|
|||
look_dir = vector.multiply(look_dir, 6)
|
||||
local pos2 = vector.add(pos, look_dir)
|
||||
|
||||
local ray = raycast(pos, pos2, false, true)
|
||||
local ray = raycast(pos, pos2, false, true)
|
||||
if ray then
|
||||
for pointed_thing in ray do
|
||||
if pointed_thing and get_node_group(get_node(pointed_thing.above).name, "_mcl_bucket_pointable") == 1 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}
|
||||
end
|
||||
|
@ -97,6 +103,7 @@ function mcl_buckets.register_liquid(def)
|
|||
on_take = def.on_take,
|
||||
itemname = def.itemname,
|
||||
}
|
||||
pointable_sources[source] = true
|
||||
if type(def.source_place) == "string" then
|
||||
mcl_buckets.liquids[def.source_place] = mcl_buckets.liquids[source]
|
||||
end
|
||||
|
@ -137,7 +144,7 @@ function mcl_buckets.register_liquid(def)
|
|||
node_place = def.source_place
|
||||
end
|
||||
-- Check if pointing to a buildable node
|
||||
local item = itemstack:get_name()
|
||||
--local item = itemstack:get_name()
|
||||
|
||||
if def.extra_check and def.extra_check(place_pos, user) == false then
|
||||
-- Fail placement of liquid
|
||||
|
@ -308,7 +315,7 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", {
|
|||
return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack
|
||||
end
|
||||
end
|
||||
|
||||
local new_bucket
|
||||
local liquid_node = bucket_raycast(user)
|
||||
if liquid_node then
|
||||
if minetest.is_protected(liquid_node.above, user:get_player_name()) then
|
||||
|
@ -318,7 +325,6 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", {
|
|||
if liquid_name then
|
||||
local liquid_def = mcl_buckets.liquids[liquid_name]
|
||||
if liquid_def then
|
||||
local new_bucket
|
||||
--minetest.chat_send_all("test")
|
||||
-- Fill bucket, but not in Creative Mode
|
||||
-- FIXME: remove this line
|
||||
|
|
|
@ -3,7 +3,7 @@ local mod_mcl_core = minetest.get_modpath("mcl_core")
|
|||
local mod_mclx_core = minetest.get_modpath("mclx_core")
|
||||
local has_awards = minetest.get_modpath("awards")
|
||||
|
||||
local sound_place = function(itemname, pos)
|
||||
local function sound_place(itemname, pos)
|
||||
local def = minetest.registered_nodes[itemname]
|
||||
if def and def.sounds and def.sounds.place then
|
||||
minetest.sound_play(def.sounds.place, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true)
|
||||
|
|
|
@ -95,7 +95,7 @@ S("• When water is directly below lava, the water turns into stone."),
|
|||
liquid_range = 7,
|
||||
post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C},
|
||||
stack_max = 64,
|
||||
groups = { water=3, liquid=3, puts_out_fire=1, freezes=1, not_in_creative_inventory=1, dig_by_piston=1, _mcl_bucket_pointable=1},
|
||||
groups = { water=3, liquid=3, puts_out_fire=1, freezes=1, not_in_creative_inventory=1, dig_by_piston=1},
|
||||
_mcl_blast_resistance = 100,
|
||||
-- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode
|
||||
_mcl_hardness = -1,
|
||||
|
@ -196,7 +196,7 @@ S("• When lava is directly above water, the water turns into stone."),
|
|||
damage_per_second = 4*2,
|
||||
post_effect_color = {a=245, r=208, g=73, b=10},
|
||||
stack_max = 64,
|
||||
groups = { lava=3, lava_source=1, liquid=2, destroys_items=1, not_in_creative_inventory=1, dig_by_piston=1, set_on_fire=15, fire_damage=1, _mcl_bucket_pointable=1},
|
||||
groups = { lava=3, lava_source=1, liquid=2, destroys_items=1, not_in_creative_inventory=1, dig_by_piston=1, set_on_fire=15, fire_damage=1},
|
||||
_mcl_blast_resistance = 100,
|
||||
-- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode
|
||||
_mcl_hardness = -1,
|
||||
|
|
Loading…
Reference in New Issue