diff --git a/item/craft_item_nodes.lua b/item/craft_item_nodes.lua index 9ecbc15..a23c6bd 100644 --- a/item/craft_item_nodes.lua +++ b/item/craft_item_nodes.lua @@ -11,22 +11,22 @@ local sounds = default.node_sound_glass_defaults() items["logistica:silverin"] = { tiles = { - "logistica_silverin_nodebox.png", - "logistica_silverin_nodebox.png", - "logistica_silverin_nodebox.png^[transformFX", - "logistica_silverin_nodebox.png^[transformFX", - "logistica_silverin_nodebox.png", - "logistica_silverin_nodebox.png", - }, - drawtype = "nodebox", - paramtype = "light", + "logistica_silverin_nodebox.png", + "logistica_silverin_nodebox.png", + "logistica_silverin_nodebox.png^[transformFX", + "logistica_silverin_nodebox.png^[transformFX", + "logistica_silverin_nodebox.png", + "logistica_silverin_nodebox.png", + }, + drawtype = "nodebox", + paramtype = "light", paramtype2 = "facedir", - node_box = { - type = "fixed", - fixed = { - {-0.25, -0.50, -0.25, 0.25, 0.50, 0.25} - } - }, + node_box = { + type = "fixed", + fixed = { + {-0.25, -0.50, -0.25, 0.25, 0.50, 0.25} + } + }, use_texture_alpha = "blend", groups = crystalGroups, sounds = sounds, @@ -37,20 +37,43 @@ items["logistica:silverin"] = { items["logistica:silverin_plate"] = { tiles = { "logistica_silverin_plate.png" }, - drawtype = "nodebox", - paramtype = "light", + drawtype = "nodebox", + paramtype = "light", paramtype2 = "facedir", - node_box = { - type = "fixed", - fixed = { - {-0.50, -0.50, -0.50, 0.50, -7/16, 0.50} - } - }, + node_box = { + type = "fixed", + fixed = { + {-0.50, -0.50, -0.50, 0.50, -7/16, 0.50} + } + }, groups = { cracky = 2 }, sounds = logistica.node_sound_metallic(), description = S("Silverin Plate"), inventory_image = "logistica_silverin_plate_inv.png", + wield_image = "logistica_silverin_plate_inv.png", stack_max = 99, + after_place_node = function(pos, placer, itemstack, pointed_thing) + local rotNeeded = true + local node = minetest.get_node(pos) + if pointed_thing.type == "node" then + local pointedNode = minetest.get_node(pointed_thing.under) + if pointedNode.name == "logistica:silverin_plate" then + node.param2 = pointedNode.param2 + minetest.swap_node(pos, node) + rotNeeded = false + end + end + if rotNeeded then + if placer:is_player() then + local lookDir = placer:get_look_dir() + if placer:get_player_control().sneak then + lookDir = vector.multiply(lookDir, -1) + end + node.param2 = logistica.dir_to_facedir(lookDir) + minetest.swap_node(pos, node) + end + end + end, } -- items["logistica:silverin_block"] = { diff --git a/util/rotations.lua b/util/rotations.lua index 283a363..c588e69 100644 --- a/util/rotations.lua +++ b/util/rotations.lua @@ -82,4 +82,20 @@ function logistica.get_front_face_object_info(param2) rot.y = pos.forward.y rot.z = pos.forward.z return rot +end + +-- given a direction tries to return a facedir int such that the bottom of block would be facing that direction +function logistica.dir_to_facedir(dir) + local x,y,z = dir.x, dir.y, dir.z + local absX, absY, absZ = math.abs(x), math.abs(y), math.abs(z) + + local mostlyX = absX > absY and absX > absZ + local mostlyZ = absZ > absX and absZ > absY + if mostlyX then + if x > 0 then return 15 else return 12 end + elseif mostlyZ then + if z > 0 then return 8 else return 4 end + else -- mostlyY + if y > 0 then return 20 else return 0 end + end end \ No newline at end of file