Dropper + Dispenser inventory

This commit is contained in:
AFCMS 2022-09-10 11:39:10 +02:00
parent 1065eb4d8c
commit 37176976b6
No known key found for this signature in database
GPG key ID: 8720389A25B652E3
2 changed files with 117 additions and 88 deletions

View file

@ -8,23 +8,36 @@ All node definitions share a lot of code, so this is the reason why there
are so many weird tables below. are so many weird tables below.
]] ]]
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
local C = minetest.colorize
local F = minetest.formspec_escape
-- For after_place_node local dispenser_formspec = table.concat({
"formspec_version[4]",
"size[11.75,10.425]",
"label[4.125,0.375;" .. F(C(mcl_formspec.label_color, S("Dispenser"))) .. "]",
mcl_formspec.get_itemslot_bg_v4(4.125, 0.75, 3, 3),
"list[context;main;4.125,0.75;3,3;]",
"label[0.375,4.7;" .. F(C(mcl_formspec.label_color, S("Inventory"))) .. "]",
mcl_formspec.get_itemslot_bg_v4(0.375, 5.1, 9, 3),
"list[current_player;main;0.375,5.1;9,3;9]",
mcl_formspec.get_itemslot_bg_v4(0.375, 9.05, 9, 1),
"list[current_player;main;0.375,9.05;9,1;]",
"listring[context;main]",
"listring[current_player;main]",
})
---For after_place_node
---@param pos Vector
local function setup_dispenser(pos) local function setup_dispenser(pos)
-- Set formspec and inventory -- Set formspec and inventory
local form = "size[9,8.75]"..
"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
"list[current_player;main;0,4.5;9,3;9]"..
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
"list[current_player;main;0,7.74;9,1;]"..
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
"label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dispenser"))).."]"..
"list[context;main;3,0.5;3,3;]"..
mcl_formspec.get_itemslot_bg(3,0.5,3,3)..
"listring[context;main]"..
"listring[current_player;main]"
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("formspec", form) meta:set_string("formspec", dispenser_formspec)
local inv = meta:get_inventory() local inv = meta:get_inventory()
inv:set_size("main", 9) inv:set_size("main", 9)
end end
@ -38,9 +51,9 @@ local function orientate_dispenser(pos, placer)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
if pitch > 55 then if pitch > 55 then
minetest.swap_node(pos, {name="mcl_dispensers:dispenser_up", param2 = node.param2}) minetest.swap_node(pos, { name = "mcl_dispensers:dispenser_up", param2 = node.param2 })
elseif pitch < -55 then elseif pitch < -55 then
minetest.swap_node(pos, {name="mcl_dispensers:dispenser_down", param2 = node.param2}) minetest.swap_node(pos, { name = "mcl_dispensers:dispenser_down", param2 = node.param2 })
end end
end end
@ -85,10 +98,10 @@ local dispenserdef = {
local meta2 = meta:to_table() local meta2 = meta:to_table()
meta:from_table(oldmetadata) meta:from_table(oldmetadata)
local inv = meta:get_inventory() local inv = meta:get_inventory()
for i=1, inv:get_size("main") do for i = 1, inv:get_size("main") do
local stack = inv:get_stack("main", i) local stack = inv:get_stack("main", i)
if not stack:is_empty() then if not stack:is_empty() then
local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} local p = { x = pos.x + math.random(0, 10) / 10 - 0.5, y = pos.y, z = pos.z + math.random(0, 10) / 10 - 0.5 }
minetest.add_item(p, stack) minetest.add_item(p, stack)
end end
end end
@ -107,19 +120,19 @@ local dispenserdef = {
dropdir = vector.multiply(minetest.facedir_to_dir(node.param2), -1) dropdir = vector.multiply(minetest.facedir_to_dir(node.param2), -1)
droppos = vector.add(pos, dropdir) droppos = vector.add(pos, dropdir)
elseif node.name == "mcl_dispensers:dispenser_up" then elseif node.name == "mcl_dispensers:dispenser_up" then
dropdir = {x=0, y=1, z=0} dropdir = { x = 0, y = 1, z = 0 }
droppos = {x=pos.x, y=pos.y+1, z=pos.z} droppos = { x = pos.x, y = pos.y + 1, z = pos.z }
elseif node.name == "mcl_dispensers:dispenser_down" then elseif node.name == "mcl_dispensers:dispenser_down" then
dropdir = {x=0, y=-1, z=0} dropdir = { x = 0, y = -1, z = 0 }
droppos = {x=pos.x, y=pos.y-1, z=pos.z} droppos = { x = pos.x, y = pos.y - 1, z = pos.z }
end end
local dropnode = minetest.get_node(droppos) local dropnode = minetest.get_node(droppos)
local dropnodedef = minetest.registered_nodes[dropnode.name] local dropnodedef = minetest.registered_nodes[dropnode.name]
local stacks = {} local stacks = {}
for i=1,inv:get_size("main") do for i = 1, inv:get_size("main") do
local stack = inv:get_stack("main", i) local stack = inv:get_stack("main", i)
if not stack:is_empty() then if not stack:is_empty() then
table.insert(stacks, {stack = stack, stackpos = i}) table.insert(stacks, { stack = stack, stackpos = i })
end end
end end
if #stacks >= 1 then if #stacks >= 1 then
@ -143,9 +156,10 @@ local dispenserdef = {
-- Armor, mob heads and pumpkins -- Armor, mob heads and pumpkins
if igroups.armor then if igroups.armor then
local droppos_below = {x = droppos.x, y = droppos.y - 1, z = droppos.z} local droppos_below = { x = droppos.x, y = droppos.y - 1, z = droppos.z }
for _, objs in ipairs({minetest.get_objects_inside_radius(droppos, 1), minetest.get_objects_inside_radius(droppos_below, 1)}) do for _, objs in ipairs({ minetest.get_objects_inside_radius(droppos, 1),
minetest.get_objects_inside_radius(droppos_below, 1) }) do
for _, obj in ipairs(objs) do for _, obj in ipairs(objs) do
stack = mcl_armor.equip(stack, obj) stack = mcl_armor.equip(stack, obj)
if stack:is_empty() then if stack:is_empty() then
@ -157,11 +171,11 @@ local dispenserdef = {
end end
end end
-- Place head or pumpkin as node, if equipping it as armor has failed -- Place head or pumpkin as node, if equipping it as armor has failed
if not stack:is_empty() then if not stack:is_empty() then
if igroups.head or iname == "mcl_farming:pumpkin_face" then if igroups.head or iname == "mcl_farming:pumpkin_face" then
if dropnodedef.buildable_to then if dropnodedef.buildable_to then
minetest.set_node(droppos, {name = iname, param2 = node.param2}) minetest.set_node(droppos, { name = iname, param2 = node.param2 })
stack:take_item() stack:take_item()
end end
end end
@ -169,7 +183,7 @@ local dispenserdef = {
inv:set_stack("main", stack_id, stack) inv:set_stack("main", stack_id, stack)
-- Use shears on sheeps -- Use shears on sheeps
elseif igroups.shears then elseif igroups.shears then
for _, obj in pairs(minetest.get_objects_inside_radius(droppos, 1)) do for _, obj in pairs(minetest.get_objects_inside_radius(droppos, 1)) do
local entity = obj:get_luaentity() local entity = obj:get_luaentity()
@ -220,7 +234,7 @@ local dispenserdef = {
end end
end end
-- Spawn Egg -- Spawn Egg
elseif igroups.spawn_egg then elseif igroups.spawn_egg then
-- Spawn mob -- Spawn mob
if not dropnodedef.walkable then if not dropnodedef.walkable then
@ -231,7 +245,7 @@ local dispenserdef = {
inv:set_stack("main", stack_id, stack) inv:set_stack("main", stack_id, stack)
end end
-- Generalized dispension -- Generalized dispension
elseif (not dropnodedef.walkable or stackdef._dispense_into_walkable) then elseif (not dropnodedef.walkable or stackdef._dispense_into_walkable) then
--[[ _on_dispense(stack, pos, droppos, dropnode, dropdir) --[[ _on_dispense(stack, pos, droppos, dropnode, dropdir)
* stack: Itemstack which is dispense * stack: Itemstack which is dispense
@ -263,7 +277,7 @@ local dispenserdef = {
local item_entity = minetest.add_item(droppos, dropitem) local item_entity = minetest.add_item(droppos, dropitem)
local drop_vel = vector.subtract(droppos, pos) local drop_vel = vector.subtract(droppos, pos)
local speed = 3 local speed = 3
item_entity:set_velocity(vector.multiply(drop_vel,speed)) item_entity:set_velocity(vector.multiply(drop_vel, speed))
end end
else else
stack:take_item() stack:take_item()
@ -280,7 +294,7 @@ local dispenserdef = {
local item_entity = minetest.add_item(droppos, dropitem) local item_entity = minetest.add_item(droppos, dropitem)
local drop_vel = vector.subtract(droppos, pos) local drop_vel = vector.subtract(droppos, pos)
local speed = 3 local speed = 3
item_entity:set_velocity(vector.multiply(drop_vel,speed)) item_entity:set_velocity(vector.multiply(drop_vel, speed))
stack:take_item() stack:take_item()
inv:set_stack("main", stack_id, stack) inv:set_stack("main", stack_id, stack)
end end
@ -299,27 +313,28 @@ local dispenserdef = {
local horizontal_def = table.copy(dispenserdef) local horizontal_def = table.copy(dispenserdef)
horizontal_def.description = S("Dispenser") horizontal_def.description = S("Dispenser")
horizontal_def._tt_help = S("9 inventory slots").."\n"..S("Launches item when powered by redstone power") horizontal_def._tt_help = S("9 inventory slots") .. "\n" .. S("Launches item when powered by redstone power")
horizontal_def._doc_items_longdesc = S("A dispenser is a block which acts as a redstone component which, when powered with redstone power, dispenses an item. It has a container with 9 inventory slots.") horizontal_def._doc_items_longdesc = S("A dispenser is a block which acts as a redstone component which, when powered with redstone power, dispenses an item. It has a container with 9 inventory slots.")
horizontal_def._doc_items_usagehelp = S("Place the dispenser in one of 6 possible directions. The “hole” is where items will fly out of the dispenser. Use the dispenser to access its inventory. Insert the items you wish to dispense. Supply the dispenser with redstone energy once to dispense a random item.").."\n\n".. horizontal_def._doc_items_usagehelp = S("Place the dispenser in one of 6 possible directions. The “hole” is where items will fly out of the dispenser. Use the dispenser to access its inventory. Insert the items you wish to dispense. Supply the dispenser with redstone energy once to dispense a random item.")
.. "\n\n" ..
S("The dispenser will do different things, depending on the dispensed item:").."\n\n".. S("The dispenser will do different things, depending on the dispensed item:") .. "\n\n" ..
S("• Arrows: Are launched").."\n".. S("• Arrows: Are launched") .. "\n" ..
S("• Eggs and snowballs: Are thrown").."\n".. S("• Eggs and snowballs: Are thrown") .. "\n" ..
S("• Fire charges: Are fired in a straight line").."\n".. S("• Fire charges: Are fired in a straight line") .. "\n" ..
S("• Armor: Will be equipped to players and armor stands").."\n".. S("• Armor: Will be equipped to players and armor stands") .. "\n" ..
S("• Boats: Are placed on water or are dropped").."\n".. S("• Boats: Are placed on water or are dropped") .. "\n" ..
S("• Minecart: Are placed on rails or are dropped").."\n".. S("• Minecart: Are placed on rails or are dropped") .. "\n" ..
S("• Bone meal: Is applied on the block it is facing").."\n".. S("• Bone meal: Is applied on the block it is facing") .. "\n" ..
S("• Empty buckets: Are used to collect a liquid source").."\n".. S("• Empty buckets: Are used to collect a liquid source") .. "\n" ..
S("• Filled buckets: Are used to place a liquid source").."\n".. S("• Filled buckets: Are used to place a liquid source") .. "\n" ..
S("• Heads, pumpkins: Equipped to players and armor stands, or placed as a block").."\n".. S("• Heads, pumpkins: Equipped to players and armor stands, or placed as a block") .. "\n" ..
S("• Shulker boxes: Are placed as a block").."\n".. S("• Shulker boxes: Are placed as a block") .. "\n" ..
S("• TNT: Is placed and ignited").."\n".. S("• TNT: Is placed and ignited") .. "\n" ..
S("• Flint and steel: Is used to ignite a fire in air and to ignite TNT").."\n".. S("• Flint and steel: Is used to ignite a fire in air and to ignite TNT") .. "\n" ..
S("• Spawn eggs: Will summon the mob they contain").."\n".. S("• Spawn eggs: Will summon the mob they contain") .. "\n" ..
S("• Other items: Are simply dropped") S("• Other items: Are simply dropped")
function horizontal_def.after_place_node(pos, placer, itemstack, pointed_thing) function horizontal_def.after_place_node(pos, placer, itemstack, pointed_thing)
setup_dispenser(pos) setup_dispenser(pos)
@ -332,7 +347,7 @@ horizontal_def.tiles = {
"default_furnace_side.png", "mcl_dispensers_dispenser_front_horizontal.png" "default_furnace_side.png", "mcl_dispensers_dispenser_front_horizontal.png"
} }
horizontal_def.paramtype2 = "facedir" horizontal_def.paramtype2 = "facedir"
horizontal_def.groups = {pickaxey=1, container=2, material_stone=1} horizontal_def.groups = { pickaxey = 1, container = 2, material_stone = 1 }
minetest.register_node("mcl_dispensers:dispenser", horizontal_def) minetest.register_node("mcl_dispensers:dispenser", horizontal_def)
@ -345,7 +360,7 @@ down_def.tiles = {
"default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png",
"default_furnace_side.png", "default_furnace_side.png" "default_furnace_side.png", "default_furnace_side.png"
} }
down_def.groups = {pickaxey=1, container=2,not_in_creative_inventory=1, material_stone=1} down_def.groups = { pickaxey = 1, container = 2, not_in_creative_inventory = 1, material_stone = 1 }
down_def._doc_items_create_entry = false down_def._doc_items_create_entry = false
down_def.drop = "mcl_dispensers:dispenser" down_def.drop = "mcl_dispensers:dispenser"
minetest.register_node("mcl_dispensers:dispenser_down", down_def) minetest.register_node("mcl_dispensers:dispenser_down", down_def)
@ -365,9 +380,9 @@ minetest.register_node("mcl_dispensers:dispenser_up", up_def)
minetest.register_craft({ minetest.register_craft({
output = "mcl_dispensers:dispenser", output = "mcl_dispensers:dispenser",
recipe = { recipe = {
{"mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble",}, { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble", },
{"mcl_core:cobble", "mcl_bows:bow", "mcl_core:cobble",}, { "mcl_core:cobble", "mcl_bows:bow", "mcl_core:cobble", },
{"mcl_core:cobble", "mesecons:redstone", "mcl_core:cobble",}, { "mcl_core:cobble", "mesecons:redstone", "mcl_core:cobble", },
} }
}) })
@ -384,6 +399,6 @@ minetest.register_lbm({
nodenames = { "mcl_dispensers:dispenser", "mcl_dispensers:dispenser_down", "mcl_dispensers:dispenser_up" }, nodenames = { "mcl_dispensers:dispenser", "mcl_dispensers:dispenser_down", "mcl_dispensers:dispenser_up" },
action = function(pos, node) action = function(pos, node)
setup_dispenser(pos) setup_dispenser(pos)
minetest.log("action", "[mcl_dispenser] Node formspec updated at "..minetest.pos_to_string(pos)) minetest.log("action", "[mcl_dispenser] Node formspec updated at " .. minetest.pos_to_string(pos))
end, end,
}) })

View file

@ -9,23 +9,36 @@ are so many weird tables below.
]] ]]
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
local C = minetest.colorize
local F = minetest.formspec_escape
-- For after_place_node local dropper_formspec = table.concat({
"formspec_version[4]",
"size[11.75,10.425]",
"label[4.125,0.375;" .. F(C(mcl_formspec.label_color, S("Dropper"))) .. "]",
mcl_formspec.get_itemslot_bg_v4(4.125, 0.75, 3, 3),
"list[context;main;4.125,0.75;3,3;]",
"label[0.375,4.7;" .. F(C(mcl_formspec.label_color, S("Inventory"))) .. "]",
mcl_formspec.get_itemslot_bg_v4(0.375, 5.1, 9, 3),
"list[current_player;main;0.375,5.1;9,3;9]",
mcl_formspec.get_itemslot_bg_v4(0.375, 9.05, 9, 1),
"list[current_player;main;0.375,9.05;9,1;]",
"listring[context;main]",
"listring[current_player;main]",
})
---For after_place_node
---@param pos Vector
local function setup_dropper(pos) local function setup_dropper(pos)
-- Set formspec and inventory -- Set formspec and inventory
local form = "size[9,8.75]"..
"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
"list[current_player;main;0,4.5;9,3;9]"..
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
"list[current_player;main;0,7.74;9,1;]"..
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
"label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dropper"))).."]"..
"list[context;main;3,0.5;3,3;]"..
mcl_formspec.get_itemslot_bg(3,0.5,3,3)..
"listring[context;main]"..
"listring[current_player;main]"
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("formspec", form) meta:set_string("formspec", dropper_formspec)
local inv = meta:get_inventory() local inv = meta:get_inventory()
inv:set_size("main", 9) inv:set_size("main", 9)
end end
@ -38,9 +51,9 @@ local function orientate_dropper(pos, placer)
local pitch = placer:get_look_vertical() * (180 / math.pi) local pitch = placer:get_look_vertical() * (180 / math.pi)
if pitch > 55 then if pitch > 55 then
minetest.swap_node(pos, {name="mcl_droppers:dropper_up"}) minetest.swap_node(pos, { name = "mcl_droppers:dropper_up" })
elseif pitch < -55 then elseif pitch < -55 then
minetest.swap_node(pos, {name="mcl_droppers:dropper_down"}) minetest.swap_node(pos, { name = "mcl_droppers:dropper_down" })
end end
end end
@ -58,10 +71,10 @@ local dropperdef = {
local meta2 = meta:to_table() local meta2 = meta:to_table()
meta:from_table(oldmetadata) meta:from_table(oldmetadata)
local inv = meta:get_inventory() local inv = meta:get_inventory()
for i=1, inv:get_size("main") do for i = 1, inv:get_size("main") do
local stack = inv:get_stack("main", i) local stack = inv:get_stack("main", i)
if not stack:is_empty() then if not stack:is_empty() then
local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} local p = { x = pos.x + math.random(0, 10) / 10 - 0.5, y = pos.y, z = pos.z + math.random(0, 10) / 10 - 0.5 }
minetest.add_item(p, stack) minetest.add_item(p, stack)
end end
end end
@ -96,7 +109,7 @@ local dropperdef = {
end, end,
_mcl_blast_resistance = 3.5, _mcl_blast_resistance = 3.5,
_mcl_hardness = 3.5, _mcl_hardness = 3.5,
mesecons = {effector = { mesecons = { effector = {
-- Drop random item when triggered -- Drop random item when triggered
action_on = function(pos, node) action_on = function(pos, node)
if not pos then return end if not pos then return end
@ -104,11 +117,11 @@ local dropperdef = {
local inv = meta:get_inventory() local inv = meta:get_inventory()
local droppos local droppos
if node.name == "mcl_droppers:dropper" then if node.name == "mcl_droppers:dropper" then
droppos = vector.subtract(pos, minetest.facedir_to_dir(node.param2)) droppos = vector.subtract(pos, minetest.facedir_to_dir(node.param2))
elseif node.name == "mcl_droppers:dropper_up" then elseif node.name == "mcl_droppers:dropper_up" then
droppos = {x=pos.x, y=pos.y+1, z=pos.z} droppos = { x = pos.x, y = pos.y + 1, z = pos.z }
elseif node.name == "mcl_droppers:dropper_down" then elseif node.name == "mcl_droppers:dropper_down" then
droppos = {x=pos.x, y=pos.y-1, z=pos.z} droppos = { x = pos.x, y = pos.y - 1, z = pos.z }
end end
local dropnode = minetest.get_node(droppos) local dropnode = minetest.get_node(droppos)
-- Do not drop into solid nodes, unless they are containers -- Do not drop into solid nodes, unless they are containers
@ -117,10 +130,10 @@ local dropperdef = {
return return
end end
local stacks = {} local stacks = {}
for i=1,inv:get_size("main") do for i = 1, inv:get_size("main") do
local stack = inv:get_stack("main", i) local stack = inv:get_stack("main", i)
if not stack:is_empty() then if not stack:is_empty() then
table.insert(stacks, {stack = stack, stackpos = i}) table.insert(stacks, { stack = stack, stackpos = i })
end end
end end
if #stacks >= 1 then if #stacks >= 1 then
@ -144,14 +157,14 @@ local dropperdef = {
local item_entity = minetest.add_item(droppos, dropitem) local item_entity = minetest.add_item(droppos, dropitem)
local drop_vel = vector.subtract(droppos, pos) local drop_vel = vector.subtract(droppos, pos)
local speed = 3 local speed = 3
item_entity:set_velocity(vector.multiply(drop_vel,speed)) item_entity:set_velocity(vector.multiply(drop_vel, speed))
stack:take_item() stack:take_item()
inv:set_stack("main", stack_id, stack) inv:set_stack("main", stack_id, stack)
end end
end end
end, end,
rules = mesecon.rules.alldirs, rules = mesecon.rules.alldirs,
}}, } },
on_rotate = on_rotate, on_rotate = on_rotate,
} }
@ -159,20 +172,21 @@ local dropperdef = {
local horizontal_def = table.copy(dropperdef) local horizontal_def = table.copy(dropperdef)
horizontal_def.description = S("Dropper") horizontal_def.description = S("Dropper")
horizontal_def._tt_help = S("9 inventory slots").."\n"..S("Drops item when powered by redstone power") horizontal_def._tt_help = S("9 inventory slots") .. "\n" .. S("Drops item when powered by redstone power")
horizontal_def._doc_items_longdesc = S("A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.") horizontal_def._doc_items_longdesc = S("A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.")
horizontal_def._doc_items_usagehelp = S("Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.") horizontal_def._doc_items_usagehelp = S("Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.")
function horizontal_def.after_place_node(pos, placer, itemstack, pointed_thing) function horizontal_def.after_place_node(pos, placer, itemstack, pointed_thing)
setup_dropper(pos) setup_dropper(pos)
orientate_dropper(pos, placer) orientate_dropper(pos, placer)
end end
horizontal_def.tiles = { horizontal_def.tiles = {
"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_top.png", "default_furnace_bottom.png",
"default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png",
"default_furnace_side.png", "mcl_droppers_dropper_front_horizontal.png" "default_furnace_side.png", "mcl_droppers_dropper_front_horizontal.png"
} }
horizontal_def.paramtype2 = "facedir" horizontal_def.paramtype2 = "facedir"
horizontal_def.groups = {pickaxey=1, container=2, material_stone=1} horizontal_def.groups = { pickaxey = 1, container = 2, material_stone = 1 }
minetest.register_node("mcl_droppers:dropper", horizontal_def) minetest.register_node("mcl_droppers:dropper", horizontal_def)
@ -185,7 +199,7 @@ down_def.tiles = {
"default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png",
"default_furnace_side.png", "default_furnace_side.png" "default_furnace_side.png", "default_furnace_side.png"
} }
down_def.groups = {pickaxey=1, container=2,not_in_creative_inventory=1, material_stone=1} down_def.groups = { pickaxey = 1, container = 2, not_in_creative_inventory = 1, material_stone = 1 }
down_def._doc_items_create_entry = false down_def._doc_items_create_entry = false
down_def.drop = "mcl_droppers:dropper" down_def.drop = "mcl_droppers:dropper"
minetest.register_node("mcl_droppers:dropper_down", down_def) minetest.register_node("mcl_droppers:dropper_down", down_def)
@ -207,9 +221,9 @@ minetest.register_node("mcl_droppers:dropper_up", up_def)
minetest.register_craft({ minetest.register_craft({
output = "mcl_droppers:dropper", output = "mcl_droppers:dropper",
recipe = { recipe = {
{"mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble",}, { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble", },
{"mcl_core:cobble", "", "mcl_core:cobble",}, { "mcl_core:cobble", "", "mcl_core:cobble", },
{"mcl_core:cobble", "mesecons:redstone", "mcl_core:cobble",}, { "mcl_core:cobble", "mesecons:redstone", "mcl_core:cobble", },
} }
}) })
@ -226,6 +240,6 @@ minetest.register_lbm({
nodenames = { "mcl_droppers:dropper", "mcl_droppers:dropper_down", "mcl_droppers:dropper_up" }, nodenames = { "mcl_droppers:dropper", "mcl_droppers:dropper_down", "mcl_droppers:dropper_up" },
action = function(pos, node) action = function(pos, node)
setup_dropper(pos) setup_dropper(pos)
minetest.log("action", "[mcl_droppers] Node formspec updated at "..minetest.pos_to_string(pos)) minetest.log("action", "[mcl_droppers] Node formspec updated at " .. minetest.pos_to_string(pos))
end, end,
}) })