forked from VoxeLibre/VoxeLibre
Merge pull request 'Piston-breakable nodes don't fill up the push limit, items properly drop' (#3813) from seventeenthShulker/MineClone2:piston_digs_properly into master
Reviewed-on: MineClone2/MineClone2#3813
This commit is contained in:
commit
5a069af072
|
@ -741,12 +741,14 @@ if minetest.is_creative_enabled("") then
|
||||||
for _, item in ipairs(drops) do
|
for _, item in ipairs(drops) do
|
||||||
minetest.add_item(pos, item)
|
minetest.add_item(pos, item)
|
||||||
end
|
end
|
||||||
end
|
else
|
||||||
local inv = digger:get_inventory()
|
-- If there is a player
|
||||||
if inv then
|
local inv = digger:get_inventory()
|
||||||
for _, item in ipairs(drops) do
|
if inv then
|
||||||
if not inv:contains_item("main", item, true) then
|
for _, item in ipairs(drops) do
|
||||||
inv:add_item("main", item)
|
if not inv:contains_item("main", item, true) then
|
||||||
|
inv:add_item("main", item)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -246,6 +246,15 @@ function mesecon.mergetable(source, dest)
|
||||||
return rval
|
return rval
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--
|
||||||
|
function mesecon.join_table(t1, t2)
|
||||||
|
local rval = mesecon.tablecopy(t2)
|
||||||
|
for i, v in ipairs(t1) do
|
||||||
|
table.insert(rval, mesecon.tablecopy(v))
|
||||||
|
end
|
||||||
|
return rval
|
||||||
|
end
|
||||||
|
|
||||||
function mesecon.register_node(name, spec_common, spec_off, spec_on)
|
function mesecon.register_node(name, spec_common, spec_off, spec_on)
|
||||||
spec_common.drop = spec_common.drop or name .. "_off"
|
spec_common.drop = spec_common.drop or name .. "_off"
|
||||||
spec_common.on_blast = spec_common.on_blast or mesecon.on_blastnode
|
spec_common.on_blast = spec_common.on_blast or mesecon.on_blastnode
|
||||||
|
|
|
@ -211,6 +211,11 @@ function mesecon.register_button(basename, description, texture, recipeitem, sou
|
||||||
output = "mesecons_button:button_"..basename.."_off",
|
output = "mesecons_button:button_"..basename.."_off",
|
||||||
recipe = {{ recipeitem }},
|
recipe = {{ recipeitem }},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if minetest.get_modpath("mesecons_mvps") then
|
||||||
|
mesecon.register_mvps_unsticky("mesecons_button:button_"..basename.."_off")
|
||||||
|
mesecon.register_mvps_unsticky("mesecons_button:button_"..basename.."_on")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
mesecon.register_button(
|
mesecon.register_button(
|
||||||
|
|
|
@ -117,7 +117,7 @@ local function is_available(pos)
|
||||||
return false, n
|
return false, n
|
||||||
end
|
end
|
||||||
if minetest.registered_nodes[name] then
|
if minetest.registered_nodes[name] then
|
||||||
return minetest.registered_nodes[name].buildable_to, n or false, n
|
return minetest.registered_nodes[name].buildable_to or minetest.get_item_group(name, "dig_by_piston") == 1, n or false, n
|
||||||
end
|
end
|
||||||
return false, n
|
return false, n
|
||||||
end
|
end
|
||||||
|
@ -126,6 +126,7 @@ end
|
||||||
function mesecon.mvps_get_stack(pos, dir, maximum, piston_pos)
|
function mesecon.mvps_get_stack(pos, dir, maximum, piston_pos)
|
||||||
-- determine the number of nodes to be pushed
|
-- determine the number of nodes to be pushed
|
||||||
local nodes = {}
|
local nodes = {}
|
||||||
|
local dig_nodes = {}
|
||||||
local frontiers = {pos}
|
local frontiers = {pos}
|
||||||
|
|
||||||
while #frontiers > 0 do
|
while #frontiers > 0 do
|
||||||
|
@ -140,47 +141,50 @@ function mesecon.mvps_get_stack(pos, dir, maximum, piston_pos)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if not node_replaceable(nn.name) then
|
if minetest.get_item_group(nn.name, "dig_by_piston") == 1 then
|
||||||
if #nodes >= maximum then return nil, false end
|
-- if we want the node to drop, e.g. sugar cane, do not count towards push limit
|
||||||
table.insert(nodes, {node = nn, pos = {x=np.x, y=np.y, z=np.z}})
|
table.insert(dig_nodes, {node = nn, pos = {x=np.x, y=np.y, z=np.z}})
|
||||||
|
else
|
||||||
-- add connected nodes to frontiers, connected is a vector list
|
if not node_replaceable(nn.name) then
|
||||||
-- the vectors must be absolute positions
|
table.insert(nodes, {node = nn, pos = {x=np.x, y=np.y, z=np.z}})
|
||||||
local connected = {}
|
if #nodes > maximum then return nil, nil, false, true end
|
||||||
local has_loop
|
|
||||||
if minetest.registered_nodes[nn.name]
|
-- add connected nodes to frontiers, connected is a vector list
|
||||||
and minetest.registered_nodes[nn.name].mvps_sticky then
|
-- the vectors must be absolute positions
|
||||||
connected, has_loop = minetest.registered_nodes[nn.name].mvps_sticky(np, nn, piston_pos)
|
local connected = {}
|
||||||
if has_loop then
|
local has_loop
|
||||||
return {}, true
|
if minetest.registered_nodes[nn.name] and minetest.registered_nodes[nn.name].mvps_sticky then
|
||||||
end
|
connected, has_loop = minetest.registered_nodes[nn.name].mvps_sticky(np, nn, piston_pos)
|
||||||
end
|
if has_loop then
|
||||||
|
return {}, {}, true, false
|
||||||
table.insert(connected, vector.add(np, dir))
|
|
||||||
|
|
||||||
-- Make sure there are no duplicates in frontiers / nodes before
|
|
||||||
-- adding nodes in "connected" to frontiers
|
|
||||||
for _, cp in ipairs(connected) do
|
|
||||||
local duplicate = false
|
|
||||||
for _, rp in ipairs(nodes) do
|
|
||||||
if vector.equals(cp, rp.pos) then
|
|
||||||
duplicate = true
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
for _, fp in ipairs(frontiers) do
|
table.insert(connected, vector.add(np, dir))
|
||||||
if vector.equals(cp, fp) then
|
|
||||||
duplicate = true
|
-- Make sure there are no duplicates in frontiers / nodes before
|
||||||
|
-- adding nodes in "connected" to frontiers
|
||||||
|
for _, cp in ipairs(connected) do
|
||||||
|
local duplicate = false
|
||||||
|
for _, rp in ipairs(nodes) do
|
||||||
|
if vector.equals(cp, rp.pos) then
|
||||||
|
duplicate = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for _, fp in ipairs(frontiers) do
|
||||||
|
if vector.equals(cp, fp) then
|
||||||
|
duplicate = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not duplicate and not mesecon.is_mvps_stopper(minetest.get_node(cp)) and minetest.get_item_group(nn.name, "dig_by_piston") == 0 then
|
||||||
|
table.insert(frontiers, cp)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
if not duplicate and not mesecon.is_mvps_stopper(minetest.get_node(cp)) then
|
|
||||||
table.insert(frontiers, cp)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
table.remove(frontiers, 1)
|
table.remove(frontiers, 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
return nodes, false
|
return nodes, dig_nodes, false, false
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.mvps_set_owner(pos, placer)
|
function mesecon.mvps_set_owner(pos, placer)
|
||||||
|
@ -203,6 +207,11 @@ local function are_protected(nodes, player_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon.mvps_push(pos, dir, maximum, player_name, piston_pos)
|
function mesecon.mvps_push(pos, dir, maximum, player_name, piston_pos)
|
||||||
|
-- check if the node in front of the piston is protected against player_name (to prevent replacing air)
|
||||||
|
if minetest.is_protected(pos, player_name) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
return mesecon.mvps_push_or_pull(pos, dir, dir, maximum, player_name, piston_pos)
|
return mesecon.mvps_push_or_pull(pos, dir, dir, maximum, player_name, piston_pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -222,9 +231,9 @@ end
|
||||||
-- movedir: direction of actual movement
|
-- movedir: direction of actual movement
|
||||||
-- maximum: maximum nodes to be pushed
|
-- maximum: maximum nodes to be pushed
|
||||||
function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name, piston_pos)
|
function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name, piston_pos)
|
||||||
local nodes, has_loop = mesecon.mvps_get_stack(pos, movedir, maximum, piston_pos)
|
local nodes, dig_nodes, has_loop, too_many = mesecon.mvps_get_stack(pos, movedir, maximum, piston_pos)
|
||||||
|
|
||||||
if has_loop then
|
if has_loop or too_many then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -237,6 +246,9 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
|
||||||
if (newpos[i].x == piston_pos.x) and (newpos[i].y == piston_pos.y) and (newpos[i].z == piston_pos.z) then
|
if (newpos[i].x == piston_pos.x) and (newpos[i].y == piston_pos.y) and (newpos[i].z == piston_pos.z) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
if minetest.is_protected(newpos[i], player_name) then
|
||||||
|
return
|
||||||
|
end
|
||||||
if not is_available(newpos[i]) then
|
if not is_available(newpos[i]) then
|
||||||
local available = false
|
local available = false
|
||||||
for j in ipairs(nodes) do
|
for j in ipairs(nodes) do
|
||||||
|
@ -253,18 +265,35 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if are_protected(nodes, player_name) then
|
local all_nodes = nodes
|
||||||
|
if dig_nodes and #dig_nodes > 0 then all_nodes = mesecon.join_table(dig_nodes, nodes) end
|
||||||
|
if are_protected(all_nodes, player_name) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local first_dropper = nil
|
local first_dropper = nil
|
||||||
-- remove all nodes
|
-- remove all nodes
|
||||||
for id, n in ipairs(nodes) do
|
for id, n in ipairs(all_nodes) do
|
||||||
n.meta = minetest.get_meta(n.pos):to_table()
|
n.meta = minetest.get_meta(n.pos):to_table()
|
||||||
local is_dropper = mesecon.is_mvps_dropper(n.node, movedir, nodes, id)
|
local is_dropper = mesecon.is_mvps_dropper(n.node, movedir, all_nodes, id)
|
||||||
if is_dropper then
|
if is_dropper then
|
||||||
--local drops = minetest.get_node_drops(n.node.name, "")
|
-- if current node has already been destroyed (e.g. chain reaction of sugar cane breaking), skip it
|
||||||
minetest.dig_node(n.pos)
|
if minetest.get_node(n.pos).name == n.node.name then
|
||||||
|
-- simulate dig_node using handle_node_drops
|
||||||
|
local drops = minetest.get_node_drops(n.node.name, "")
|
||||||
|
local counted_drops = {}
|
||||||
|
minetest.remove_node(n.pos)
|
||||||
|
for _, callback in pairs(minetest.registered_on_dignodes) do
|
||||||
|
callback(n.pos, n)
|
||||||
|
end
|
||||||
|
for _, item in ipairs(drops) do
|
||||||
|
if type(item) ~= "string" then
|
||||||
|
item = item:get_name() .. item:get_count()
|
||||||
|
end
|
||||||
|
table.insert(counted_drops, item)
|
||||||
|
end
|
||||||
|
minetest.handle_node_drops(n.pos, counted_drops)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
minetest.remove_node(n.pos)
|
minetest.remove_node(n.pos)
|
||||||
local node_timer = minetest.get_node_timer(n.pos)
|
local node_timer = minetest.get_node_timer(n.pos)
|
||||||
|
@ -273,13 +302,13 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if is_dropper then
|
if is_dropper then
|
||||||
first_dropper = id
|
-- get id of the first dropper, but we still let everything else drop, so don't break here
|
||||||
break
|
if not first_dropper then first_dropper = id end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- update mesecons for removed nodes ( has to be done after all nodes have been removed )
|
-- update mesecons for removed nodes ( has to be done after all nodes have been removed )
|
||||||
for id, n in ipairs(nodes) do
|
for id, n in ipairs(all_nodes) do
|
||||||
if first_dropper and id >= first_dropper then
|
if first_dropper and id >= first_dropper then
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
@ -287,7 +316,7 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
|
||||||
end
|
end
|
||||||
|
|
||||||
-- add nodes
|
-- add nodes
|
||||||
for id, n in ipairs(nodes) do
|
for id, n in ipairs(all_nodes) do
|
||||||
if first_dropper and id >= first_dropper then
|
if first_dropper and id >= first_dropper then
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
@ -394,6 +423,7 @@ mesecon.register_mvps_stopper("mcl_core:realm_barrier")
|
||||||
mesecon.register_mvps_stopper("mcl_core:void")
|
mesecon.register_mvps_stopper("mcl_core:void")
|
||||||
mesecon.register_mvps_stopper("mcl_core:bedrock")
|
mesecon.register_mvps_stopper("mcl_core:bedrock")
|
||||||
mesecon.register_mvps_stopper("mcl_core:obsidian")
|
mesecon.register_mvps_stopper("mcl_core:obsidian")
|
||||||
|
mesecon.register_mvps_stopper("mcl_core:crying_obsidian")
|
||||||
mesecon.register_mvps_stopper("mcl_chests:ender_chest")
|
mesecon.register_mvps_stopper("mcl_chests:ender_chest")
|
||||||
mesecon.register_mvps_stopper("mcl_chests:ender_chest_small")
|
mesecon.register_mvps_stopper("mcl_chests:ender_chest_small")
|
||||||
mesecon.register_mvps_stopper("mcl_mobspawners:spawner")
|
mesecon.register_mvps_stopper("mcl_mobspawners:spawner")
|
||||||
|
@ -411,10 +441,9 @@ mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_on")
|
||||||
mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_off")
|
mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_off")
|
||||||
mesecon.register_mvps_stopper("mcl_banners:hanging_banner")
|
mesecon.register_mvps_stopper("mcl_banners:hanging_banner")
|
||||||
mesecon.register_mvps_stopper("mcl_banners:standing_banner")
|
mesecon.register_mvps_stopper("mcl_banners:standing_banner")
|
||||||
mesecon.register_mvps_stopper("mcl_campfires:campfire")
|
mesecon.register_mvps_stopper("mcl_beehives:bee_nest")
|
||||||
mesecon.register_mvps_stopper("mcl_campfires:campfire_lit")
|
mesecon.register_mvps_stopper("mcl_beehives:beehive")
|
||||||
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire")
|
mesecon.register_mvps_stopper("mcl_compass:lodestone")
|
||||||
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire_lit")
|
|
||||||
|
|
||||||
-- Unmovable by technical restrictions.
|
-- Unmovable by technical restrictions.
|
||||||
-- Open formspec would screw up if node is destroyed (minor problem)
|
-- Open formspec would screw up if node is destroyed (minor problem)
|
||||||
|
@ -445,13 +474,14 @@ mesecon.register_mvps_stopper("mcl_chests:trapped_chest")
|
||||||
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_small")
|
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_small")
|
||||||
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_left")
|
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_left")
|
||||||
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_right")
|
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_right")
|
||||||
mesecon.register_mvps_stopper("mcl_signs:wall_sign")
|
|
||||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign")
|
|
||||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5")
|
|
||||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign45")
|
|
||||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5")
|
|
||||||
mesecon.register_mvps_stopper("mcl_barrels:barrel_open")
|
mesecon.register_mvps_stopper("mcl_barrels:barrel_open")
|
||||||
mesecon.register_mvps_stopper("mcl_barrels:barrel_closed")
|
mesecon.register_mvps_stopper("mcl_barrels:barrel_closed")
|
||||||
|
mesecon.register_mvps_stopper("mcl_campfires:campfire")
|
||||||
|
mesecon.register_mvps_stopper("mcl_campfires:campfire_lit")
|
||||||
|
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire")
|
||||||
|
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire_lit")
|
||||||
|
mesecon.register_mvps_stopper("mcl_lectern:lectern")
|
||||||
|
mesecon.register_mvps_stopper("mcl_grindstone:grindstone")
|
||||||
|
|
||||||
|
|
||||||
-- Unmovable by design: objects
|
-- Unmovable by design: objects
|
||||||
|
@ -495,8 +525,6 @@ mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_2")
|
||||||
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_3")
|
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_3")
|
||||||
|
|
||||||
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_door")
|
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_door")
|
||||||
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_trapdoor")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_signs:wall_sign_bamboo")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_bamboo:scaffolding")
|
mesecon.register_mvps_unsticky("mcl_bamboo:scaffolding")
|
||||||
|
|
||||||
-- Beds
|
-- Beds
|
||||||
|
@ -532,21 +560,6 @@ mesecon.register_mvps_unsticky("mcl_beds:bed_white_top")
|
||||||
mesecon.register_mvps_unsticky("mcl_beds:bed_white_bottom")
|
mesecon.register_mvps_unsticky("mcl_beds:bed_white_bottom")
|
||||||
mesecon.register_mvps_unsticky("mcl_beds:bed_yellow_top")
|
mesecon.register_mvps_unsticky("mcl_beds:bed_yellow_top")
|
||||||
mesecon.register_mvps_unsticky("mcl_beds:bed_yellow_bottom")
|
mesecon.register_mvps_unsticky("mcl_beds:bed_yellow_bottom")
|
||||||
-- Buttons
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_stone_off")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_stone_on")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_wood_off")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_wood_on")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_acaciawood_off")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_acaciawood_on")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_birchwood_off")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_birchwood_on")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_darkwood_off")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_darkwood_on")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_sprucewood_off")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_sprucewood_on")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_junglewood_off")
|
|
||||||
mesecon.register_mvps_unsticky("mesecons_button:button_junglewood_on")
|
|
||||||
-- Cactus, Sugarcane & Vines
|
-- Cactus, Sugarcane & Vines
|
||||||
mesecon.register_mvps_unsticky("mcl_core:cactus")
|
mesecon.register_mvps_unsticky("mcl_core:cactus")
|
||||||
mesecon.register_mvps_unsticky("mcl_core:reeds")
|
mesecon.register_mvps_unsticky("mcl_core:reeds")
|
||||||
|
@ -559,23 +572,6 @@ mesecon.register_mvps_unsticky("mcl_cake:cake_4")
|
||||||
mesecon.register_mvps_unsticky("mcl_cake:cake_5")
|
mesecon.register_mvps_unsticky("mcl_cake:cake_5")
|
||||||
mesecon.register_mvps_unsticky("mcl_cake:cake_6")
|
mesecon.register_mvps_unsticky("mcl_cake:cake_6")
|
||||||
mesecon.register_mvps_unsticky("mcl_cake:cake")
|
mesecon.register_mvps_unsticky("mcl_cake:cake")
|
||||||
-- Carpet
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:black_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:blue_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:brown_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:cyan_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:green_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:grey_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:light_blue_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:lime_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:orange_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:magenta_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:pink_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:purple_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:red_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:silver_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:white_carpet")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_wool:yellow_carpet")
|
|
||||||
-- Carved & Jack O'Lantern Pumpkins, Pumpkin & Melon
|
-- Carved & Jack O'Lantern Pumpkins, Pumpkin & Melon
|
||||||
mesecon.register_mvps_unsticky("mcl_farming:pumpkin_face")
|
mesecon.register_mvps_unsticky("mcl_farming:pumpkin_face")
|
||||||
mesecon.register_mvps_unsticky("mcl_farming:pumpkin_face_light")
|
mesecon.register_mvps_unsticky("mcl_farming:pumpkin_face_light")
|
||||||
|
@ -907,16 +903,16 @@ mesecon.register_mvps_unsticky("mcl_chests:black_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:blue_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:blue_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:brown_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:brown_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:cyan_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:cyan_shulker_box_small")
|
||||||
|
mesecon.register_mvps_unsticky("mcl_chests:dark_green_shulker_box_small")
|
||||||
|
mesecon.register_mvps_unsticky("mcl_chests:dark_grey_shulker_box_small")
|
||||||
|
mesecon.register_mvps_unsticky("mcl_chests:lightblue_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:green_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:green_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:grey_shulker_box_small")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:light_blue_shulker_box_small")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:lime_shulker_box_small")
|
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:orange_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:orange_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:magenta_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:magenta_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:pink_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:pink_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:purple_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:violet_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:red_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:red_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:silver_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:grey_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:white_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:white_shulker_box_small")
|
||||||
mesecon.register_mvps_unsticky("mcl_chests:yellow_shulker_box_small")
|
mesecon.register_mvps_unsticky("mcl_chests:yellow_shulker_box_small")
|
||||||
-- Snow
|
-- Snow
|
||||||
|
|
|
@ -138,14 +138,12 @@ local function piston_off(pos, node)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function piston_orientate(pos, placer)
|
local function piston_orientate(pos, placer)
|
||||||
mesecon.mvps_set_owner(pos, placer)
|
|
||||||
|
|
||||||
-- not placed by player
|
-- not placed by player
|
||||||
if not placer then return end
|
if not placer then return end
|
||||||
|
|
||||||
-- placer pitch in degrees
|
-- placer pitch in degrees
|
||||||
local pitch = placer:get_look_vertical() * (180 / math.pi)
|
local pitch = placer:get_look_vertical() * (180 / math.pi)
|
||||||
|
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
local pistonspec = minetest.registered_nodes[node.name].mesecons_piston
|
local pistonspec = minetest.registered_nodes[node.name].mesecons_piston
|
||||||
if pitch > 55 then
|
if pitch > 55 then
|
||||||
|
@ -153,6 +151,9 @@ local function piston_orientate(pos, placer)
|
||||||
elseif pitch < -55 then
|
elseif pitch < -55 then
|
||||||
minetest.add_node(pos, {name=pistonspec.piston_down})
|
minetest.add_node(pos, {name=pistonspec.piston_down})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- set owner meta after setting node, or it will not keep
|
||||||
|
mesecon.mvps_set_owner(pos, placer)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -251,7 +251,7 @@ local bamboo_def = {
|
||||||
minetest.register_node(BAMBOO, bamboo_def)
|
minetest.register_node(BAMBOO, bamboo_def)
|
||||||
|
|
||||||
local bamboo_top = table.copy(bamboo_def)
|
local bamboo_top = table.copy(bamboo_def)
|
||||||
bamboo_top.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
|
bamboo_top.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
|
||||||
bamboo_top.tiles = {"mcl_bamboo_endcap.png"}
|
bamboo_top.tiles = {"mcl_bamboo_endcap.png"}
|
||||||
bamboo_top.drawtype = "plantlike_rooted" --"plantlike"
|
bamboo_top.drawtype = "plantlike_rooted" --"plantlike"
|
||||||
--bamboo_top.paramtype2 = "meshoptions"
|
--bamboo_top.paramtype2 = "meshoptions"
|
||||||
|
@ -361,7 +361,7 @@ bamboo_one_def.selection_box = {
|
||||||
{-0.05, -0.5, 0.285, -0.275, 0.5, 0.06},
|
{-0.05, -0.5, 0.285, -0.275, 0.5, 0.06},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bamboo_one_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
|
bamboo_one_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
|
||||||
mcl_bamboo.mcl_log(dump(mcl_bamboo.bamboo_index))
|
mcl_bamboo.mcl_log(dump(mcl_bamboo.bamboo_index))
|
||||||
minetest.register_node(mcl_bamboo.bamboo_index[2], bamboo_one_def)
|
minetest.register_node(mcl_bamboo.bamboo_index[2], bamboo_one_def)
|
||||||
local bamboo_two_def = table.copy(bamboo_def)
|
local bamboo_two_def = table.copy(bamboo_def)
|
||||||
|
@ -385,7 +385,7 @@ bamboo_two_def.selection_box = {
|
||||||
{0.25, -0.5, 0.325, 0.025, 0.5, 0.100},
|
{0.25, -0.5, 0.325, 0.025, 0.5, 0.100},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bamboo_two_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
|
bamboo_two_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
|
||||||
minetest.register_node(mcl_bamboo.bamboo_index[3], bamboo_two_def)
|
minetest.register_node(mcl_bamboo.bamboo_index[3], bamboo_two_def)
|
||||||
local bamboo_three_def = table.copy(bamboo_def)
|
local bamboo_three_def = table.copy(bamboo_def)
|
||||||
|
|
||||||
|
@ -408,5 +408,5 @@ bamboo_three_def.selection_box = {
|
||||||
{-0.125, -0.5, 0.125, -0.3125, 0.5, 0.3125},
|
{-0.125, -0.5, 0.125, -0.3125, 0.5, 0.3125},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bamboo_three_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
|
bamboo_three_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
|
||||||
minetest.register_node(mcl_bamboo.bamboo_index[4], bamboo_three_def)
|
minetest.register_node(mcl_bamboo.bamboo_index[4], bamboo_three_def)
|
||||||
|
|
|
@ -67,7 +67,7 @@ end
|
||||||
|
|
||||||
local BAMBOO_ENDCAP_NAME = "mcl_bamboo:bamboo_endcap"
|
local BAMBOO_ENDCAP_NAME = "mcl_bamboo:bamboo_endcap"
|
||||||
|
|
||||||
-- For when I learn more about the pistons...
|
-- check if supporting block is broken. pistons now break the bamboo plant.
|
||||||
function mcl_bamboo.break_orphaned(pos)
|
function mcl_bamboo.break_orphaned(pos)
|
||||||
mcl_bamboo.mcl_log("Break_Orphaned called.")
|
mcl_bamboo.mcl_log("Break_Orphaned called.")
|
||||||
local node_below = minetest.get_node(vector.offset(pos, 0, -1, 0))
|
local node_below = minetest.get_node(vector.offset(pos, 0, -1, 0))
|
||||||
|
|
|
@ -33,7 +33,7 @@ minetest.register_node("mcl_bells:bell", {
|
||||||
"mcl_bells_bell_side.png",
|
"mcl_bells_bell_side.png",
|
||||||
},
|
},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
groups = {pickaxey=2, deco_block=1 },
|
groups = {pickaxey=2, deco_block=1, dig_by_piston=1 },
|
||||||
sounds = mcl_sounds.node_sound_metal_defaults(),
|
sounds = mcl_sounds.node_sound_metal_defaults(),
|
||||||
_mcl_blast_resistance = 5,
|
_mcl_blast_resistance = 5,
|
||||||
_mcl_hardness = 5,
|
_mcl_hardness = 5,
|
||||||
|
|
|
@ -139,8 +139,8 @@ minetest.register_node("mcl_core:deadbush", {
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
groups = {handy = 1, shearsy = 1, flammable = 3, attached_node = 1, plant = 1, non_mycelium_plant = 1, dig_by_water = 1,
|
groups = {handy = 1, shearsy = 1, flammable = 3, attached_node = 1, plant = 1, non_mycelium_plant = 1, dig_by_piston = 1,
|
||||||
destroy_by_lava_flow = 1, deco_block = 1, fire_encouragement = 60, fire_flammability = 100},
|
dig_by_water = 1, destroy_by_lava_flow = 1, deco_block = 1, fire_encouragement = 60, fire_flammability = 100},
|
||||||
drop = {
|
drop = {
|
||||||
max_items = 1,
|
max_items = 1,
|
||||||
items = {
|
items = {
|
||||||
|
|
|
@ -128,8 +128,6 @@ local fortune_wheat_seed_drop = {
|
||||||
overwrite = true,
|
overwrite = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
-- CHECKME: How does tall grass behave when pushed by a piston?
|
|
||||||
|
|
||||||
--- Tall Grass ---
|
--- Tall Grass ---
|
||||||
local def_tallgrass = {
|
local def_tallgrass = {
|
||||||
description = S("Tall Grass"),
|
description = S("Tall Grass"),
|
||||||
|
@ -155,7 +153,7 @@ local def_tallgrass = {
|
||||||
groups = {
|
groups = {
|
||||||
handy = 1, shearsy = 1, attached_node = 1, deco_block = 1,
|
handy = 1, shearsy = 1, attached_node = 1, deco_block = 1,
|
||||||
plant = 1, place_flowerlike = 2, non_mycelium_plant = 1,
|
plant = 1, place_flowerlike = 2, non_mycelium_plant = 1,
|
||||||
flammable = 3, fire_encouragement = 60, fire_flammability = 100,
|
flammable = 3, fire_encouragement = 60, fire_flammability = 10, dig_by_piston = 1,
|
||||||
dig_by_water = 1, destroy_by_lava_flow = 1, compostability = 30, grass_palette = 1
|
dig_by_water = 1, destroy_by_lava_flow = 1, compostability = 30, grass_palette = 1
|
||||||
},
|
},
|
||||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||||
|
@ -252,7 +250,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
||||||
paramtype2 = paramtype2,
|
paramtype2 = paramtype2,
|
||||||
palette = palette,
|
palette = palette,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
buildable_to = true,
|
buildable_to = false,
|
||||||
drop = drop_bottom,
|
drop = drop_bottom,
|
||||||
_mcl_shears_drop = shears_drop,
|
_mcl_shears_drop = shears_drop,
|
||||||
_mcl_fortune_drop = fortune_drop,
|
_mcl_fortune_drop = fortune_drop,
|
||||||
|
@ -354,7 +352,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
||||||
paramtype2 = paramtype2,
|
paramtype2 = paramtype2,
|
||||||
palette = palette,
|
palette = palette,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
buildable_to = true,
|
buildable_to = false,
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -selbox_radius, -0.5, -selbox_radius, selbox_radius, selbox_top_height, selbox_radius },
|
fixed = { -selbox_radius, -0.5, -selbox_radius, selbox_radius, selbox_top_height, selbox_radius },
|
||||||
|
|
|
@ -118,7 +118,7 @@ function mcl_lanterns.register_lantern(name, def)
|
||||||
node_placement_prediction = "",
|
node_placement_prediction = "",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
light_source = def.light_level,
|
light_source = def.light_level,
|
||||||
groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1},
|
groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1, dig_by_piston=1},
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
|
|
|
@ -85,7 +85,7 @@ end
|
||||||
mcl_signs = {}
|
mcl_signs = {}
|
||||||
|
|
||||||
-- GLOBALS
|
-- GLOBALS
|
||||||
mcl_signs.sign_groups = { handy = 1, axey = 1, deco_block = 1, material_wood = 1, attached_node = 1, dig_by_piston = 1, flammable = -1 }
|
mcl_signs.sign_groups = { handy = 1, axey = 1, deco_block = 1, material_wood = 1, attached_node = 1, flammable = -1 }
|
||||||
--- colors used for wools.
|
--- colors used for wools.
|
||||||
mcl_signs.mcl_wool_colors = {
|
mcl_signs.mcl_wool_colors = {
|
||||||
unicolor_white = "#FFFFFF",
|
unicolor_white = "#FFFFFF",
|
||||||
|
@ -764,6 +764,15 @@ function mcl_signs.register_sign (modname, color, _name, ttsign)
|
||||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign22_5" .. _name, 1 })
|
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign22_5" .. _name, 1 })
|
||||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
||||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
||||||
|
|
||||||
|
-- register as unpushable
|
||||||
|
if minetest.get_modpath("mesecons_mvps") then
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- The same as register_sign, except caller defines the textures. Note, there is a greyscale version of the sign,
|
--- The same as register_sign, except caller defines the textures. Note, there is a greyscale version of the sign,
|
||||||
|
@ -1002,6 +1011,14 @@ function mcl_signs.register_sign_custom (modname, _name, tiles, color, inventory
|
||||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
||||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
||||||
|
|
||||||
|
-- register as unpushable
|
||||||
|
if minetest.get_modpath("mesecons_mvps") then
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Override an existing sign, tint the textures, and gives it an unique node name. Creates both wall and standing signs.
|
--- Override an existing sign, tint the textures, and gives it an unique node name. Creates both wall and standing signs.
|
||||||
|
@ -1234,6 +1251,15 @@ function mcl_signs.reregister_sign (modname, color, _name, ttsign)
|
||||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign22_5" .. _name, 1 })
|
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign22_5" .. _name, 1 })
|
||||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
||||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
||||||
|
|
||||||
|
-- register as unpushable
|
||||||
|
if minetest.get_modpath("mesecons_mvps") then
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- The same as reregister_sign, except caller defines the textures. Note, there is a greyscale version of the sign,
|
--- The same as reregister_sign, except caller defines the textures. Note, there is a greyscale version of the sign,
|
||||||
|
@ -1469,6 +1495,14 @@ function mcl_signs.reregister_sign_custom (modname, _name, tiles, color, invento
|
||||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
||||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
||||||
|
|
||||||
|
-- register as unpushable
|
||||||
|
if minetest.get_modpath("mesecons_mvps") then
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
|
||||||
|
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Usage: Call this with the mod's name, the wood's item string (for the planks), and with the sign's suffix.
|
--- Usage: Call this with the mod's name, the wood's item string (for the planks), and with the sign's suffix.
|
||||||
|
|
Loading…
Reference in New Issue