From 5ba70edb7eae56622188807174aa2b409fd6ac2f Mon Sep 17 00:00:00 2001 From: FaceDeer Date: Thu, 9 Mar 2017 20:27:01 -0700 Subject: [PATCH] add clang and sparks --- init.lua | 88 ++++++++++++++++++++++++++------------- sounds/anvil_clang.ogg | Bin 0 -> 9445 bytes sounds/license.txt | 1 + textures/anvil_spark.png | Bin 0 -> 185 bytes 4 files changed, 59 insertions(+), 30 deletions(-) create mode 100644 sounds/anvil_clang.ogg create mode 100644 sounds/license.txt create mode 100644 textures/anvil_spark.png diff --git a/init.lua b/init.lua index 69187f9..87d2ade 100644 --- a/init.lua +++ b/init.lua @@ -11,7 +11,6 @@ minetest.register_alias("castle:anvil", "anvil:anvil") local MP = minetest.get_modpath(minetest.get_current_modname()) local S, NS = dofile(MP.."/intllib.lua") - local item_displacement = 7/16 -- the hammer for the anvil @@ -93,6 +92,14 @@ local update_item = function(pos, node) end end +local metal_sounds +-- Apparently node_sound_metal_defaults is a newer thing, I ran into games using an older version of the default mod without it. +if default.node_sound_metal_defaults ~= nil then + metal_sounds = default.node_sound_metal_defaults() +else + metal_sounds = default.node_sound_stone_defaults() +end + minetest.register_node("anvil:anvil", { drawtype = "nodebox", description = S("Anvil"), @@ -102,6 +109,7 @@ minetest.register_node("anvil:anvil", { paramtype = "light", paramtype2 = "facedir", groups = {cracky=2}, + sounds = metal_sounds, -- the nodebox model comes from realtest node_box = { type = "fixed", @@ -145,14 +153,14 @@ minetest.register_node("anvil:anvil", { allow_metadata_inventory_put = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) if listname~="input" then - return 0; + return 0 end if (listname=='input' and(stack:get_wear() == 0 or stack:get_name() == "technic:water_can" or stack:get_name() == "technic:lava_can" )) then - minetest.chat_send_player( player:get_player_name(), S('This anvil is for damaged tools only.')); + minetest.chat_send_player( player:get_player_name(), S('This anvil is for damaged tools only.')) return 0 end @@ -194,12 +202,12 @@ minetest.register_node("anvil:anvil", { on_punch = function(pos, node, puncher) if( not( pos ) or not( node ) or not( puncher )) then - return; + return end - local wielded = puncher:get_wielded_item(); - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory(); + local wielded = puncher:get_wielded_item() + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() if wielded:get_count() == 0 then if not inv:is_empty("input") then @@ -212,26 +220,26 @@ minetest.register_node("anvil:anvil", { -- only punching with the hammer is supposed to work if wielded:get_name() ~= 'anvil:hammer' then - return; + return end - local input = inv:get_stack('input',1); + local input = inv:get_stack('input',1) -- only tools can be repaired if( not( input ) or input:is_empty() or input:get_name() == "technic:water_can" or input:get_name() == "technic:lava_can" ) then - return; + return end -- 65535 is max damage - local damage_state = 40-math.floor(input:get_wear()/1638); + local damage_state = 40-math.floor(input:get_wear()/1638) - local tool_name = input:get_name(); + local tool_name = input:get_name() - local hud2 = nil; - local hud3 = nil; + local hud2 = nil + local hud3 = nil if( input:get_wear()>0 ) then hud2 = puncher:hud_add({ hud_elem_type = "statbar", @@ -252,41 +260,60 @@ minetest.register_node("anvil:anvil", { alignment = {x = 0, y = 0}, offset = {x = -320, y = 0}, size = {x=32, y=32}, - }); + }) end minetest.after(2, function() if( puncher ) then - puncher:hud_remove(hud2); - puncher:hud_remove(hud3); + puncher:hud_remove(hud2) + puncher:hud_remove(hud3) end end) -- tell the player when the job is done if( input:get_wear() == 0 ) then - minetest.chat_send_player( puncher:get_player_name(), - S('Your @1 has been repaired successfully.', tool_name)); - return; + minetest.chat_send_player( puncher:get_player_name(), S('Your @1 has been repaired successfully.', tool_name)) + return + else + pos.y = pos.y + item_displacement + minetest.sound_play({name="anvil_clang"}, {pos=pos}) + minetest.add_particlespawner({ + amount = 10, + time = 0.1, + minpos = pos, + maxpos = pos, + minvel = {x=2, y=3, z=2}, + maxvel = {x=-2, y=1, z=-2}, + minacc = {x=0, y= -10, z=0}, + maxacc = {x=0, y= -10, z=0}, + minexptime = 0.5, + maxexptime = 1, + minsize = 1, + maxsize = 1, + collisiondetection = true, + vertical = false, + texture = "anvil_spark.png", + }) end -- do the actual repair - input:add_wear( -5000 ); -- equals to what technic toolshop does in 5 seconds + input:add_wear( -5000 ) -- equals to what technic toolshop does in 5 seconds inv:set_stack("input", 1, input) -- damage the hammer slightly - wielded:add_wear( 100 ); - puncher:set_wielded_item( wielded ); + wielded:add_wear( 100 ) + puncher:set_wielded_item( wielded ) end, is_ground_content = false, }) -- automatically restore entities lost due to /clearobjects or similar -minetest.register_abm({ +minetest.register_lbm({ + name = "anvil:anvil_item_restoration", nodenames = { "anvil:anvil" }, - interval = 15, - chance = 1, + run_at_every_load = true, action = function(pos, node, active_object_count, active_object_count_wider) - pos.y = pos.y + item_displacement - if #minetest.get_objects_inside_radius(pos, 0.5) > 0 then return end + test_pos = {x=pos.x, y=pos.y + item_displacement, z=pos.z} + if #minetest.get_objects_inside_radius(test_pos, 0.5) > 0 then return end update_item(pos, node) end }) @@ -295,9 +322,10 @@ minetest.register_abm({ minetest.register_lbm({ name = "anvil:hammer_ejection", nodenames = "anvil:anvil", + run_at_every_load = false, action = function(pos, node) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory(); + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() if not inv:is_empty("hammer") then local hammer = inv:get_stack("hammer", 1) inv:set_stack("hammer", 1, nil) diff --git a/sounds/anvil_clang.ogg b/sounds/anvil_clang.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f960a28312e7644059efdbbde9e40d4541e4291e GIT binary patch literal 9445 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 R*j(W1yDJAS8qA;P|9^SJ7iRzf literal 0 HcmV?d00001 diff --git a/sounds/license.txt b/sounds/license.txt new file mode 100644 index 0000000..b719c14 --- /dev/null +++ b/sounds/license.txt @@ -0,0 +1 @@ +anvil_clang.ogg - from https://freesound.org/people/Benboncan/sounds/103631/ by Benboncan under the CC BY 3.0 license \ No newline at end of file diff --git a/textures/anvil_spark.png b/textures/anvil_spark.png new file mode 100644 index 0000000000000000000000000000000000000000..a18643a66beeab4339246aab5aa023e734996aab GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~Y)RhkEUnfx)>bHL)Z$ zMWH;iBtya7(>EYRFO?mn(9^{+gyXvJ$&H*03>*hG)V=*#D0GL3)9?c0Vta1yeA$DR ScaGl!nc(T_=d#Wzp$P!KpDtej literal 0 HcmV?d00001