]> git.lizzy.rs Git - iblocks.git/blob - init.lua
Add files via upload
[iblocks.git] / init.lua
1 iblocks = {}
2 iblocks.activities = {}
3 minetest.register_privilege("iblocks", "Use the Interactive Blocks")
4 iblocks.get_activity = function(pos)
5         return iblocks.activities[minetest.serialize(pos)]
6 end
7 iblocks.set_activity = function(pos, activity)
8         iblocks.activities[minetest.serialize(pos)] = activity
9 end
10 iblocks.pos_to_str = function(pos)
11         return " Position: (" .. pos.x .. ", " .. pos.y .. ", " .. pos.z .. ")"
12 end
13 iblocks.error = function(name, message)
14         minetest.chat_send_player(name, minetest.colorize("#FF2E00", "Fehler: " .. message))
15 end
16 iblocks.protected = function(pos, name)
17         local meta = minetest.get_meta(pos)
18         if not minetest.check_player_privs(name, {protection_bypass}) and meta:get_string("owner") ~= "" and meta:get_string("owner") ~= name then
19                 iblocks.error(name, "Dieser Block gehört nicht dir!")
20                 return true
21         else
22                 return false
23         end
24 end
25 iblocks.lackspriv = function(name)
26         if minetest.check_player_privs(name, {iblocks = true}) then
27                 return false
28         else
29                 iblocks.error(name, "Dir fehlt das iblocks Privileg!")
30                 return true
31         end
32 end
33 iblocks.get_player_activity = function(name)
34         for _, a in pairs(iblocks.activities) do
35                 if a.player == name then
36                         return a
37                 end
38         end
39         return nil
40 end
41 iblocks.enable = function(activity)
42         local old_activity = iblocks.get_player_activity(activity.player)
43         if iblocks.protected(activity.pos, activity.player) or iblocks.lackspriv(activity.player) then
44                 return false
45         elseif iblocks.disable(activity.pos) then
46                 return false
47         elseif old_activity then
48                 iblocks.error(activity.player, old_activity.active .. iblocks.pos_to_str(old_activity.pos))
49                 return false
50         else
51                 iblocks.set_activity(activity.pos, activity)
52                 minetest.chat_send_player(activity.player, minetest.colorize("#3EFF00", activity.enable .. iblocks.pos_to_str(activity.pos)))
53                 return true
54         end
55 end
56 iblocks.disable = function(pos)
57         local activity = iblocks.get_activity(pos)
58         if activity then
59                 minetest.chat_send_player(activity.player, minetest.colorize("#FF492A", activity.disable .. iblocks.pos_to_str(activity.pos)))
60                 iblocks.set_activity(pos, nil)
61                 return true
62         end
63         return false
64 end
65 minetest.register_node("iblocks:textblock", {
66         description = "Textblock",
67         tiles = {"iblocks_textblock.png"},
68         after_place_node = function(pos, player)
69                 local meta = minetest.get_meta(pos)
70                 meta:set_string("owner", player:get_player_name())
71                 meta:set_string("infotext", "Textblock von " .. player:get_player_name() .. " - Rechtsclick für Eingabe, Linksklick für Ausgabe, Benutze eine Axt zum Abbauen")
72         end,
73         on_punch = function(pos, node, player, pointed_thing)
74                 if iblocks.protected(pos, player:get_player_name()) or iblocks.lackspriv(player:get_player_name()) or player:get_wielded_item():get_name():find("axe") then
75                         return true
76                 else
77                         local meta = minetest.get_meta(pos)
78                         if meta:get_string("data") == "" then
79                                 iblocks.error(player:get_player_name(), "Dieser Textblock enthält noch keinen Text.")
80                         else
81                                 minetest.chat_send_all(minetest.colorize("#2AA7FF", "[Textblock von ") .. minetest.colorize("#0EFF00", player:get_player_name()) .. minetest.colorize("#2AA7FF", "]:\n   ") .. meta:get_string("data"))
82                         end
83                 end
84         end,
85         on_rightclick = function(pos, node, player, pointed_thing)
86                 iblocks.enable({pos = pos, name = "textblock", player = player:get_player_name(), active = "Du bearbeitest bereits einen Textblock!", disable = "Textblock ausgeschaltet.", enable = "Textblock eingeschaltet."})
87         end,
88         on_destruct = function(pos, player)
89                 iblocks.disable(pos)
90         end,
91         can_dig = function(pos, player)
92                 return not iblocks.protected(pos, player:get_player_name())
93         end,
94         groups = {choppy = 3}
95 })
96 minetest.register_on_chat_message(function(name, message)
97         local activity = iblocks.get_player_activity(name)
98         if activity then
99                 local meta = minetest.get_meta(activity.pos)
100                 if activity.name == "textblock" then
101                         meta:set_string("data", meta:get_string("data") .. message .. "\n   ")
102                         minetest.chat_send_player(name, minetest.colorize("#2AA7FF", "Die Nachricht wurde in den Textblock geschrieben: ") .. message)
103                         return true
104                 end
105         end
106 end)