Skip to content
This repository was archived by the owner on Aug 20, 2020. It is now read-only.

Commit 67dcb3f

Browse files
committed
remove dropondie and replace by bones mod
1 parent 2cb3a70 commit 67dcb3f

File tree

13 files changed

+244
-282
lines changed

13 files changed

+244
-282
lines changed

mods/bones/README.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Minetest 0.4 mod: bones
2+
=======================
3+
4+
License of source code:
5+
-----------------------
6+
Copyright (C) 2012 PilzAdam
7+
8+
WTFPL
9+
10+
License of media (textures and sounds)
11+
--------------------------------------
12+
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
13+
http://creativecommons.org/licenses/by-sa/3.0/
14+
15+
Authors of media files
16+
----------------------
17+
Bad_Command_

mods/bones/depends.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
default
2+
pclasses
3+
unified_inventory?
4+
3d_armor?

mods/bones/init.lua

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
-- Minetest 0.5 mod: bones
2+
-- See README.txt for licensing and other information.
3+
--REVISED 20151117 by maikerumine for adding bones to inventory after punch
4+
5+
6+
bones = {}
7+
local share_bones_time = (tonumber(minetest.setting_get("share_bones_time")) or 1800)
8+
9+
bones.bones_formspec =
10+
"size[14,9]"..
11+
default.gui_bg..
12+
default.gui_bg_img..
13+
default.gui_slots..
14+
"list[current_name;main;0,0.3;14,4;]"..
15+
"list[current_player;main;3,4.85;8,1;]"..
16+
"list[current_player;main;3,6.08;8,3;8]"..
17+
"listring[current_name;main]"..
18+
"listring[current_player;main]" ..
19+
default.get_hotbar_bg(3,4.85)
20+
21+
22+
minetest.register_node("bones:bones", {
23+
description = "Bones",
24+
tiles = {
25+
"bones_top.png",
26+
"bones_bottom.png",
27+
"bones_side.png",
28+
"bones_side.png",
29+
"bones_rear.png",
30+
"bones_front.png"
31+
},
32+
paramtype2 = "facedir",
33+
groups = {cracky = 2, oddly_breakable_by_hand = 2},
34+
stack_max = 999,
35+
sounds = default.node_sound_dirt_defaults({
36+
footstep = {name="default_gravel_footstep", gain=0.5},
37+
dug = {name="default_gravel_footstep", gain=1.0},
38+
}),
39+
40+
can_dig = function(pos, player)
41+
local inv = minetest.get_meta(pos):get_inventory()
42+
return inv:is_empty("main")
43+
end,
44+
45+
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
46+
return 0
47+
end,
48+
49+
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
50+
return 0
51+
end,
52+
53+
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
54+
return stack:get_count()
55+
end,
56+
57+
58+
on_punch = function(pos, node, player)
59+
-- only owner can punch bones to directly add to inventory
60+
local owner = minetest.get_meta(pos):get_string("owner")
61+
if owner ~= player:get_player_name() then
62+
return
63+
end
64+
65+
local inv = minetest.get_meta(pos):get_inventory()
66+
local player_inv = player:get_inventory()
67+
68+
for i=1, inv:get_size("main") do
69+
local stk = inv:get_stack("main", i)
70+
if player_inv:room_for_item("main", stk) then
71+
inv:set_stack("main", i, nil)
72+
player_inv:add_item("main", stk)
73+
end
74+
end
75+
76+
if inv:is_empty("main") then
77+
minetest.remove_node(pos)
78+
end
79+
end,
80+
81+
on_timer = function(pos, elapsed)
82+
local meta = minetest.get_meta(pos)
83+
if meta:get_inventory():is_empty("main") then
84+
minetest.remove_node(pos)
85+
return
86+
end
87+
88+
local time = meta:get_int("time") + elapsed
89+
if time < share_bones_time then
90+
meta:set_int("time", time)
91+
return true
92+
else
93+
minetest.remove_node(pos)
94+
end
95+
end,
96+
on_blast = function(pos)
97+
local drops = {}
98+
default.get_inventory_drops(pos, "main", drops)
99+
drops[#drops+1] = "bones:bones"
100+
minetest.remove_node(pos)
101+
return drops
102+
end,
103+
})
104+
105+
local find_best_node = function(pos)
106+
local nodes = minetest.find_nodes_in_area(
107+
{x=pos.x-2,y=pos.y, z=pos.z-2},
108+
{x=pos.x+2,y=pos.y+2, z=pos.z+2},
109+
{"air"}
110+
)
111+
if #nodes > 0 then
112+
return nodes[1]
113+
end
114+
115+
nodes = minetest.find_nodes_in_area(
116+
{x=pos.x-2,y=pos.y, z=pos.z-2},
117+
{x=pos.x+2,y=pos.y+2, z=pos.z+2},
118+
{"group:liquid"}
119+
)
120+
if #nodes > 0 then
121+
return nodes[1]
122+
end
123+
124+
nodes = minetest.find_nodes_in_area(
125+
{x=pos.x-2,y=pos.y, z=pos.z-2},
126+
{x=pos.x+2,y=pos.y+2, z=pos.z+2},
127+
{"group:leaves", "group:plant", "group:flower"}
128+
)
129+
if #nodes > 0 then
130+
return nodes[1]
131+
end
132+
return nil
133+
end
134+
135+
136+
minetest.register_on_dieplayer(function(player)
137+
if minetest.setting_getbool("creative_mode") or not player then
138+
return
139+
end
140+
local player_name = player:get_player_name()
141+
if player_name == "" then return end
142+
143+
local pos = player:getpos()
144+
pos.y = math.floor(pos.y + 0.5)
145+
146+
minetest.chat_send_player(player_name, 'Died at '..math.floor(pos.x)..','..math.floor(pos.y)..','..math.floor(pos.z))
147+
148+
local bones_pos = nil
149+
local node = minetest.get_node_or_nil(pos)
150+
if node and node.name == "air" then
151+
bones_pos = pos
152+
else
153+
bones_pos = find_best_node(pos)
154+
end
155+
if not bones_pos then return end -- no pos to place bones
156+
157+
minetest.set_node(bones_pos, {name="bones:bones"})
158+
159+
local meta = minetest.get_meta(bones_pos)
160+
meta:set_string("formspec", bones.bones_formspec)
161+
meta:set_string("owner", player_name)
162+
meta:set_string("infotext", player_name.."'s bones")
163+
local time = os.date("*t")
164+
meta:set_int("time", 0)
165+
166+
local bones_inv = meta:get_inventory()
167+
bones_inv:set_size("main", 14*4)
168+
169+
170+
local player_inv = player:get_inventory()
171+
-- main inventory
172+
for i=1, player_inv:get_size("main") do
173+
local stack = player_inv:get_stack("main", i)
174+
if stack then
175+
local stack_name = stack:get_name()
176+
if not pclasses.data.reserved_items[stack_name] or
177+
not pclasses.api.util.can_have_item(player_name, stack_name) then
178+
bones_inv:add_item("main", stack)
179+
player_inv:set_stack("main", i, nil)
180+
end
181+
end
182+
end
183+
184+
-- craft inventory
185+
for i=1, player_inv:get_size("craft") do
186+
local stack = player_inv:get_stack("craft", i)
187+
if stack then
188+
bones_inv:add_item("main", stack)
189+
player_inv:set_stack("craft", i, nil)
190+
end
191+
end
192+
193+
-- unified_inventory bags
194+
if minetest.get_modpath("unified_inventory") then
195+
for n = 1, 4 do
196+
local stack = unified_inventory.extract_bag(player, n)
197+
if stack then
198+
bones_inv:add_item("main", stack)
199+
end
200+
end
201+
end
202+
203+
--3d_armor
204+
if minetest.get_modpath("3d_armor") then
205+
local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]")
206+
if name then
207+
for i=1, player_inv:get_size("armor") do
208+
local stack = armor_inv:get_stack("armor", i)
209+
if stack:get_count() > 0 and (not pclasses.data.reserved_items[stack:get_name()] or
210+
not pclasses.api.util.can_have_item(name, stack:get_name())) then
211+
bones_inv:add_item("main", stack)
212+
armor_inv:set_stack("armor", i, nil)
213+
player_inv:set_stack("armor", i, nil)
214+
end
215+
end
216+
armor:set_player_armor(player)
217+
end
218+
end
219+
minetest.chat_send_player(player_name, 'Your bones is at '..math.floor(bones_pos.x)..','..math.floor(bones_pos.y)..','..math.floor(bones_pos.z))
220+
minetest.get_node_timer(bones_pos):start(10)
221+
end)
222+
180 Bytes
Loading
183 Bytes
Loading

mods/bones/textures/bones_rear.png

187 Bytes
Loading

mods/bones/textures/bones_side.png

188 Bytes
Loading

mods/bones/textures/bones_top.png

181 Bytes
Loading

0 commit comments

Comments
 (0)