Implement anvil inventory slot restrictions
[MineClone/MineClone2.git] / mods / ITEMS / mcl_anvils / falling_anvil.lua
blob5a315779419afdd033698eadfeeb569c641d171e
1 -- Hurt players hit by an anvil
3 local falling_node = minetest.registered_entities["__builtin:falling_node"]
4 local on_step_old = falling_node.on_step
5 local on_step_add = function(self, dtime)
6 if minetest.get_item_group(self.node.name, "anvil") == 0 then
7 return
8 end
9 local kill
10 local pos = self.object:getpos()
11 if not self._startpos then
12 self._startpos = pos
13 end
14 local objs = minetest.get_objects_inside_radius(pos, 1)
15 for _,v in ipairs(objs) do
16 local hp = v:get_hp()
17 if v:is_player() and hp ~= 0 then
18 if not self.hit_players then
19 self.hit_players = {}
20 end
21 local name = v:get_player_name()
22 local hit = false
23 for _,v in ipairs(self.hit_players) do
24 if name == v then
25 hit = true
26 end
27 end
28 if not hit then
29 table.insert(self.hit_players, name)
30 local way = self._startpos.y - pos.y
31 local damage = (way - 1) * 2
32 damage = math.min(40, math.max(0, damage))
33 if damage >= 1 then
34 hp = hp - damage
35 if hp < 0 then
36 hp = 0
37 end
38 if v:is_player() then
39 mcl_death_messages.player_damage(v, string.format("%s was smashed by a falling anvil.", v:get_player_name()))
40 mcl_hunger.exhaust(v:get_player_name(), mcl_hunger.EXHAUST_DAMAGE)
41 end
42 v:set_hp(hp)
43 if hp == 0 then
44 kill = true
45 end
46 end
47 end
48 end
49 end
50 if kill then
51 local pos = self.object:getpos()
52 local pos = {x = pos.x, y = pos.y + 0.3, z = pos.z}
53 if minetest.registered_nodes[self.node.name] then
54 minetest.add_node(pos, self.node)
55 end
56 self.object:remove()
57 core.check_for_falling(pos)
58 end
59 end
60 local on_step_table = {on_step_old, on_step_add}
61 local on_step_new = table.copy(on_step_table)
62 falling_node.on_step = function(self, dtime)
63 for _,v in ipairs(on_step_new) do
64 v(self, dtime)
65 end
66 end