summaryrefslogtreecommitdiff
path: root/anvil/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'anvil/init.lua')
-rw-r--r--anvil/init.lua33
1 files changed, 20 insertions, 13 deletions
diff --git a/anvil/init.lua b/anvil/init.lua
index 1567894..e4bc8bd 100644
--- a/anvil/init.lua
+++ b/anvil/init.lua
@@ -5,14 +5,18 @@
-- * the hammer gets dammaged a bit at each repair step
---------------------------------------------------------------------------------------
+anvil = {
+ setting = {
+ item_displacement = 7/16,
+ }
+}
+
minetest.register_alias("castle:anvil", "anvil:anvil")
-- internationalization boilerplate
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
minetest.register_tool("anvil:hammer", {
description = S("Steel blacksmithing hammer"),
@@ -69,7 +73,7 @@ minetest.register_entity("anvil:item",{
})
local remove_item = function(pos, node)
- local objs = minetest.env:get_objects_inside_radius({x = pos.x, y = pos.y + item_displacement, z = pos.z}, .5)
+ local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y + anvil.setting.item_displacement, z = pos.z}, .5)
if objs then
for _, obj in ipairs(objs) do
if obj and obj:get_luaentity() and obj:get_luaentity().name == "anvil:item" then
@@ -80,13 +84,13 @@ local remove_item = function(pos, node)
end
local update_item = function(pos, node)
- local meta = minetest.env:get_meta(pos)
+ local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if not inv:is_empty("input") then
- pos.y = pos.y + item_displacement
+ pos.y = pos.y + anvil.setting.item_displacement
tmp.nodename = node.name
tmp.texture = inv:get_stack("input", 1):get_name()
- local e = minetest.env:add_entity(pos,"anvil:item")
+ local e = minetest.add_entity(pos,"anvil:item")
local yaw = math.pi*2 - node.param2 * math.pi/2
e:setyaw(yaw)
end
@@ -157,6 +161,7 @@ minetest.register_node("anvil:anvil", {
end
if (listname=='input'
and(stack:get_wear() == 0
+ or minetest.get_item_group(stack:get_name(), "not_repaired_by_anvil") ~= 0
or stack:get_name() == "technic:water_can"
or stack:get_name() == "technic:lava_can" )) then
@@ -179,12 +184,13 @@ minetest.register_node("anvil:anvil", {
on_rightclick = function(pos, node, clicker, itemstack)
if itemstack:get_count() == 0 then
- local meta = minetest.env:get_meta(pos)
+ local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if not inv:is_empty("input") then
local return_stack = inv:get_stack("input", 1)
inv:set_stack("input", 1, nil)
- clicker:get_inventory():add_item("main", return_stack)
+ local wield_index = clicker:get_wield_index()
+ clicker:get_inventory():set_stack("main", wield_index, return_stack)
remove_item(pos, node)
return return_stack
end
@@ -192,7 +198,7 @@ minetest.register_node("anvil:anvil", {
local this_def = minetest.registered_nodes[node.name]
if this_def.allow_metadata_inventory_put(pos, "input", 1, itemstack:peek_item(), clicker) > 0 then
local s = itemstack:take_item()
- local meta = minetest.env:get_meta(pos)
+ local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:add_item("input", s)
update_item(pos,node)
@@ -213,7 +219,8 @@ minetest.register_node("anvil:anvil", {
if not inv:is_empty("input") then
local return_stack = inv:get_stack("input", 1)
inv:set_stack("input", 1, nil)
- puncher:get_inventory():add_item("main", return_stack)
+ local wield_index = puncher:get_wield_index()
+ puncher:get_inventory():set_stack("main", wield_index, return_stack)
remove_item(pos, node)
end
end
@@ -280,7 +287,7 @@ minetest.register_node("anvil:anvil", {
minetest.chat_send_player( puncher:get_player_name(), S('Your @1 has been repaired successfully.', tool_desc))
return
else
- pos.y = pos.y + item_displacement
+ pos.y = pos.y + anvil.setting.item_displacement
minetest.sound_play({name="anvil_clang"}, {pos=pos})
minetest.add_particlespawner({
amount = 10,
@@ -318,7 +325,7 @@ minetest.register_lbm({
nodenames = { "anvil:anvil" },
run_at_every_load = true,
action = function(pos, node, active_object_count, active_object_count_wider)
- local test_pos = {x=pos.x, y=pos.y + item_displacement, z=pos.z}
+ local test_pos = {x=pos.x, y=pos.y + anvil.setting.item_displacement, z=pos.z}
if #minetest.get_objects_inside_radius(test_pos, 0.5) > 0 then return end
update_item(pos, node)
end
@@ -361,6 +368,6 @@ minetest.register_craft({
recipe = {
{"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
{"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
- {'', "group:stick", '' } }
+ {"group:stick", '', ''} },
})