Cracking of anvils

This commit is contained in:
Kotolegokot 2012-10-30 16:04:35 +06:00
parent 7d1ffea1b5
commit dc48b637a9
9 changed files with 220 additions and 174 deletions

View File

@ -1,2 +1,3 @@
default
metals
helper_functions

View File

@ -128,21 +128,42 @@ minetest.register_tool("anvil:tool_hammer_stone", {
})
local anvils = {
{'stone', 'Stone', 0},
{'copper', 'Copper', 1},
{'rose_gold', 'Rose Gold', 2},
{'bismuth_bronze', 'Bismuth Bronze', 2},
{'black_bronze', 'Black Bronze', 2},
{'bronze', 'Bronze', 2},
{'wrought_iron', 'Wrought Iron', 3},
{'steel', 'Steel', 4},
{'black_steel', 'Black Steel', 5}
{'stone', 'Stone', 0, 61},
{'copper', 'Copper', 1, 411},
{'rose_gold', 'Rose Gold', 2, 521},
{'bismuth_bronze', 'Bismuth Bronze', 2, 581},
{'black_bronze', 'Black Bronze', 2, 531},
{'bronze', 'Bronze', 2, 601},
{'wrought_iron', 'Wrought Iron', 3, 801},
{'steel', 'Steel', 4, 1101},
{'black_steel', 'Black Steel', 5, 1501}
}
for _, anvil in ipairs(anvils) do
minetest.register_node("anvil:"..anvil[1].."_anvil", {
if anvil[1] ~= "stone" then
minetest.register_craft({
output = "anvil:"..anvil[1].."_anvil",
recipe = {
{"metals:"..anvil[1].."_doubleingot","metals:"..anvil[1].."_doubleingot","metals:"..anvil[1].."_doubleingot"},
{"","metals:"..anvil[1].."_doubleingot",""},
{"metals:"..anvil[1].."_doubleingot","metals:"..anvil[1].."_doubleingot","metals:"..anvil[1].."_doubleingot"},
}
})
end
end
for i = 1, 2 do
for _, anvil in ipairs(anvils) do
local postfix = ""
local ttiles = {"anvil_"..anvil[1].."_top.png","anvil_"..anvil[1].."_top.png","anvil_"..anvil[1].."_side.png"}
if i == 2 then
ttiles = {"anvil_"..anvil[1].."_top.png^anvil_cracked.png","anvil_"..anvil[1].."_top.png^anvil_cracked.png",
"anvil_"..anvil[1].."_side.png^anvil_cracked.png"}
postfix = "_cracked"
end
minetest.register_node("anvil:"..anvil[1].."_anvil"..postfix, {
description = anvil[2] .. " Anvil",
tiles = {"anvil_"..anvil[1].."_top.png","anvil_"..anvil[1].."_top.png","anvil_"..anvil[1].."_side.png"},
tiles = ttiles,
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
@ -188,6 +209,12 @@ for _, anvil in ipairs(anvils) do
"list[current_name;flux;6,1.5;1,1;]"..
"list[current_player;main;0,3;8,4;]")
meta:set_string("infotext", anvil[2].." Anvil")
if i == 1 then
meta:set_int("durability", anvil[4])
else
meta:set_int("durability", anvil[4]/4)
end
meta:set_int("max_durability", anvil[4])
local inv = meta:get_inventory()
inv:set_size("src1", 1)
inv:set_size("src2", 1)
@ -221,6 +248,24 @@ for _, anvil in ipairs(anvils) do
inv:set_stack("output", 1, output)
hammer:add_wear(65535/30)
inv:set_stack("hammer", 1, hammer)
meta:set_int("durability", meta:get_int("durability") - 1)
if i == 1 and meta:get_int("durability") / meta:get_int("max_durability") <= 1/4 then
hacky_swap_node(pos, "anvil:"..anvil[1].."_anvil_cracked")
minetest.sound_play("default_dug_node", {pos = pos})
end
if meta:get_int("durability") <= 0 then
for _, name in ipairs({"src1", "src2", "hammer", "output", "flux"}) do
if not inv:is_empty(name) then
minetest.env:add_item(pos,
{name=inv:get_stack(name, 1):get_name(),
count=inv:get_stack(name, 1):get_count(),
wear=inv:get_stack(name, 1):get_wear(),
metadata=inv:get_stack(name, 1):get_metadata()})
end
end
minetest.env:remove_node(pos)
minetest.sound_play("default_dug_node", {pos = pos})
end
end
return
end
@ -246,6 +291,24 @@ for _, anvil in ipairs(anvils) do
inv:set_stack("flux", 1, flux)
hammer:add_wear(65535/60)
inv:set_stack("hammer", 1, hammer)
meta:set_int("durability", meta:get_int("durability") - 1)
if i == 1 and meta:get_int("durability") / meta:get_int("max_durability") <= 1/4 then
hacky_swap_node(pos, "anvil:"..anvil[1].."_anvil_cracked")
minetest.sound_play("default_dug_node", {pos = pos})
end
if meta:get_int("durability") <= 0 then
for _, name in ipairs({"src1", "src2", "hammer", "output", "flux"}) do
if not inv:is_empty(name) then
minetest.env:add_item(pos,
{name=inv:get_stack(name, 1):get_name(),
count=inv:get_stack(name, 1):get_count(),
wear=inv:get_stack(name, 1):get_wear(),
metadata=inv:get_stack(name, 1):get_metadata()})
end
end
minetest.env:remove_node(pos)
minetest.sound_play("default_dug_node", {pos = pos})
end
end
return
end
@ -255,14 +318,5 @@ for _, anvil in ipairs(anvils) do
end
end,
})
if anvil[1] ~= "stone" then
minetest.register_craft({
output = "anvil:"..anvil[1].."_anvil",
recipe = {
{"metals:"..anvil[1].."_doubleingot","metals:"..anvil[1].."_doubleingot","metals:"..anvil[1].."_doubleingot"},
{"","metals:"..anvil[1].."_doubleingot",""},
{"metals:"..anvil[1].."_doubleingot","metals:"..anvil[1].."_doubleingot","metals:"..anvil[1].."_doubleingot"},
}
})
end
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

View File

@ -1 +1,2 @@
default
helper_functions

View File

@ -89,20 +89,6 @@ minetest.register_node("bonfire:self_active", {
end,
})
function hacky_swap_node(pos,name)
local node = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
local meta0 = meta:to_table()
if node.name == name then
return
end
node.name = name
local meta0 = meta:to_table()
minetest.env:set_node(pos,node)
meta = minetest.env:get_meta(pos)
meta:from_table(meta0)
end
minetest.register_abm({
nodenames = {"bonfire:self","bonfire:self_active"},
interval = 1.0,

View File

@ -16,24 +16,6 @@ realtest = {}
dofile(minetest.get_modpath("default").."/mapgen.lua")
dofile(minetest.get_modpath("default").."/leafdecay.lua")
table.contains = function(t, v)
for _, i in ipairs(t) do
if i == v then
return true
end
end
return false
end
table.get_index = function(t, v)
for j, i in ipairs(t) do
if i == v then
return j
end
end
return false
end
--
-- Tool definition
--

View File

@ -1 +1,2 @@
default
helper_functions

View File

@ -122,20 +122,6 @@ minetest.register_node("furnace:self_active", {
end,
})
function hacky_swap_node(pos,name)
local node = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
local meta0 = meta:to_table()
if node.name == name then
return
end
node.name = name
local meta0 = meta:to_table()
minetest.env:set_node(pos,node)
meta = minetest.env:get_meta(pos)
meta:from_table(meta0)
end
minetest.register_abm({
nodenames = {"furnace:self","furnace:self_active"},
interval = 1.0,
@ -156,7 +142,11 @@ minetest.register_abm({
local name, size = v[1], v[2]
for n = 1,size do
if not inv:is_empty(name) then
minetest.env:add_item(pos, inv:get_stack(name, n):get_name() .. " " .. inv:get_stack(name, n):get_count())
minetest.env:add_item(pos,
{name=inv:get_stack(name, 1):get_name(),
count=inv:get_stack(name, 1):get_count(),
wear=inv:get_stack(name, 1):get_wear(),
metadata=inv:get_stack(name, n):get_metadata()})
end
end
end

View File

@ -0,0 +1,31 @@
table.contains = function(t, v)
for _, i in ipairs(t) do
if i == v then
return true
end
end
return false
end
table.get_index = function(t, v)
for j, i in ipairs(t) do
if i == v then
return j
end
end
return false
end
function hacky_swap_node(pos,name)
local node = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
local meta0 = meta:to_table()
if node.name == name then
return
end
node.name = name
local meta0 = meta:to_table()
minetest.env:set_node(pos,node)
meta = minetest.env:get_meta(pos)
meta:from_table(meta0)
end