From 1e9a8dca3fa75b7cf0f80968154144a38542a1ec Mon Sep 17 00:00:00 2001 From: EliasFleckenstein03 <54945686+EliasFleckenstein03@users.noreply.github.com> Date: Fri, 10 Apr 2020 14:42:25 +0200 Subject: [PATCH] Add files via upload --- init.lua | 106 +++++++++++++++++++++++++++++++++ mod.conf | 3 + textures/iblocks_textblock.png | Bin 0 -> 1096 bytes 3 files changed, 109 insertions(+) create mode 100644 init.lua create mode 100644 mod.conf create mode 100644 textures/iblocks_textblock.png diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..413f20a --- /dev/null +++ b/init.lua @@ -0,0 +1,106 @@ +iblocks = {} +iblocks.activities = {} +minetest.register_privilege("iblocks", "Use the Interactive Blocks") +iblocks.get_activity = function(pos) + return iblocks.activities[minetest.serialize(pos)] +end +iblocks.set_activity = function(pos, activity) + iblocks.activities[minetest.serialize(pos)] = activity +end +iblocks.pos_to_str = function(pos) + return " Position: (" .. pos.x .. ", " .. pos.y .. ", " .. pos.z .. ")" +end +iblocks.error = function(name, message) + minetest.chat_send_player(name, minetest.colorize("#FF2E00", "Fehler: " .. message)) +end +iblocks.protected = function(pos, name) + local meta = minetest.get_meta(pos) + if not minetest.check_player_privs(name, {protection_bypass}) and meta:get_string("owner") ~= "" and meta:get_string("owner") ~= name then + iblocks.error(name, "Dieser Block gehört nicht dir!") + return true + else + return false + end +end +iblocks.lackspriv = function(name) + if minetest.check_player_privs(name, {iblocks = true}) then + return false + else + iblocks.error(name, "Dir fehlt das iblocks Privileg!") + return true + end +end +iblocks.get_player_activity = function(name) + for _, a in pairs(iblocks.activities) do + if a.player == name then + return a + end + end + return nil +end +iblocks.enable = function(activity) + local old_activity = iblocks.get_player_activity(activity.player) + if iblocks.protected(activity.pos, activity.player) or iblocks.lackspriv(activity.player) then + return false + elseif iblocks.disable(activity.pos) then + return false + elseif old_activity then + iblocks.error(activity.player, old_activity.active .. iblocks.pos_to_str(old_activity.pos)) + return false + else + iblocks.set_activity(activity.pos, activity) + minetest.chat_send_player(activity.player, minetest.colorize("#3EFF00", activity.enable .. iblocks.pos_to_str(activity.pos))) + return true + end +end +iblocks.disable = function(pos) + local activity = iblocks.get_activity(pos) + if activity then + minetest.chat_send_player(activity.player, minetest.colorize("#FF492A", activity.disable .. iblocks.pos_to_str(activity.pos))) + iblocks.set_activity(pos, nil) + return true + end + return false +end +minetest.register_node("iblocks:textblock", { + desc = "Textblock", + tiles = {"iblocks_textblock.png"}, + after_place_node = function(pos, player) + local meta = minetest.get_meta(pos) + meta:set_string("owner", player:get_player_name()) + meta:set_string("infotext", "Textblock von " .. player:get_player_name() .. " - Rechtsclick für Eingabe, Linksklick für Ausgabe, Benutze eine Axt zum Abbauen") + end, + on_punch = function(pos, node, player, pointed_thing) + 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 + return true + else + local meta = minetest.get_meta(pos) + if meta:get_string("data") == "" then + iblocks.error(player:get_player_name(), "Dieser Textblock enthält noch keinen Text.") + else + minetest.chat_send_all(minetest.colorize("#2AA7FF", "[Textblock von ") .. minetest.colorize("#0EFF00", player:get_player_name()) .. minetest.colorize("#2AA7FF", "]:\n ") .. meta:get_string("data")) + end + end + end, + on_rightclick = function(pos, node, player, pointed_thing) + iblocks.enable({pos = pos, name = "textblock", player = player:get_player_name(), active = "Du bearbeitest bereits einen Textblock!", disable = "Textblock ausgeschaltet.", enable = "Textblock eingeschaltet."}) + end, + on_destruct = function(pos, player) + iblocks.disable(pos) + end, + can_dig = function(pos, player) + return not iblocks.protected(pos, player:get_player_name()) + end, + groups = {choppy = 3} +}) +minetest.register_on_chat_message(function(name, message) + local activity = iblocks.get_player_activity(name) + if activity then + local meta = minetest.get_meta(activity.pos) + if activity.name == "textblock" then + meta:set_string("data", meta:get_string("data") .. message .. "\n ") + minetest.chat_send_player(name, minetest.colorize("#2AA7FF", "Die Nachricht wurde in den Textblock geschrieben: ") .. message) + return true + end + end +end) diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..4328de8 --- /dev/null +++ b/mod.conf @@ -0,0 +1,3 @@ +name = iblocks +desc = Fügt interactive Blöcke hinzu + diff --git a/textures/iblocks_textblock.png b/textures/iblocks_textblock.png new file mode 100644 index 0000000000000000000000000000000000000000..0b96431507270312215371ac812b78f6bade8b72 GIT binary patch literal 1096 zcmV-O1h@N%P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+SQhAmaHfYhW}?3vjmb50?R>^b7lv3`SYS^f7R6K z?()x-)?maWlEZP-{mLQk*Lf4p$p<}M4+JWO z)Z;d%so$U%te2^8(@urn-We*}e6W0cP^Tfu)4}O+I#NCyglU-SG^8>;$K!rEwiQyz z{(cK>uJ7~to(7yWE>T^QCH9DGl;EBU=2=2?7LG|BlEH;Yrr*+ z2=zEC&WP)Hf(`BS2w7Ftk4QmFDBy<6nb+sXv&iWTeIoyW^qTSi=--j1J)!3V{X{5T z@}ZvXO;7KU?%dvaPU-UeL7(I0;vz>UzTVf|`*!TE#)K`Wxv6t2`wZ)rk*)o$gyA?X z!ZU`~TCJrgmM7a@^88C`8J>X(+7uTYz zW)wg}IViMp#lpMWvb$@X;dtdts2+wf#w#xk`p%->M?*1(eB}yp$>=mhF~~7fU@QX> z?lY;jC-@wnkHJ+z(DpQEY_Nu9SOEUT_^r5f2d!9WkVgZvuhRfhga{15u!2BHtj39h zi;y!Tkr{w0LKls)01KPRiXbJbCcr@#z&GA;-j|BWp~i<0AWRdfgH6#2STP#v$74nf zRa1**mdq_%v6?iE4ok_?_@Y)r7X1xHEpq3OU+wurPWndUD3yDT7AuHS?k6dN@;6Nh zJE75rBdI~reOOc_;}5@>&n1O#F8qrPX=~e<)bW4AFC_iq#U9(&u;`Y3{o2rjJdnJS znC}>Rn20BmZb{H{Lq97Bx+Ou#1Km{E;Vwf;FLuTy>BY{tB;C{@KQr{KAn2wJ`C{m& zopDLJsY4zZ`sJsRUhIr33c9I7UN!WV2MRZRBI(7>xFp@wAx{k{{=F#lA1)umBnMY3 z+yDRo24YJ`L;(K){{a7>y{D4^000SaNLh0L04^f{04^f|c%?sf00007bV*G`2jm0_ z3@Ii=ZC2s{000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0000lNkl