From 8558c7dfb37fcebd089fd274b6ec9d7707a71e38 Mon Sep 17 00:00:00 2001 From: localhost_frssoft Date: Tue, 3 Oct 2023 12:15:05 +0300 Subject: [PATCH] Add cubic jail creation as option --- join.lua | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ settingtypes.txt | 3 +++ 2 files changed, 59 insertions(+) diff --git a/join.lua b/join.lua index 031bad6..3e12c11 100644 --- a/join.lua +++ b/join.lua @@ -16,6 +16,15 @@ local formspecfediadd = "size[9,10]" .. local feditempstore = {} local failed_counter = {} +local cubic_jail_entities = {} +function fediauth.remove_lock_cube(playername) + for _, obj in ipairs(cubic_jail_entities[playername]) do + obj:remove() + end + cubic_jail_entities[playername] = nil + minetest.log("action", "[fediauth] cubic jail removed for: '" .. playername .. "'") +end + minetest.register_entity("fediauth:checkmark", { initial_properties = { pointable = false, @@ -30,6 +39,22 @@ minetest.register_entity("fediauth:checkmark", { on_detach = function(self, parent) self.object:remove() end }) +minetest.register_entity("fediauth:stopper", { + initial_properties = { + pointable = false, + physical = true, + collide_with_objects = true, + armor_group = { immortal = 1 }, + collisionbox = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, + visual = "sprite", + visual_size = {x = 1, y = 1 }, + textures = { "ignore" }, + use_texture_alpha = true, + static_save = true, + glow = 10, + } +}) + function fediauth.verified_checkmark(player, verified) local tag = player:get_player_name() local props = player:get_properties() @@ -43,9 +68,34 @@ end -- Code formspec on join for fediauth enabled players minetest.register_on_joinplayer(function(player) local playername = player:get_player_name() + local player_pos = player:getpos() + if fediauth.is_player_bypassed(playername) then return end if fediauth.is_player_enabled(playername) or minetest.settings:get_bool("fediauth.fedi_required", false) then minetest.log("action", "[fediauth] session start for player: '" .. playername .. "'") + if minetest.settings:get_bool("fediauth.create_lock_jail_cube") then + local cube = {} + for x=-2,2 do + for y=-2,2 do + for z=-2,2 do + if x ~= 0 then + table.insert(cube, {player_pos.x + x, player_pos.y + y, player_pos.z + z}) + elseif y ~= 0 and y ~= 1 then + table.insert(cube, {player_pos.x + x, player_pos.y + y, player_pos.z + z}) + elseif z ~= 0 then + table.insert(cube, {player_pos.x + x, player_pos.y + y, player_pos.z + z}) + end + end + end + end + local cube_entities = {} + for _, i in ipairs(cube) do + table.insert(cube_entities, minetest.add_entity({x=i[1], y=i[2], z=i[3]}, "fediauth:stopper", nil)) + end + cubic_jail_entities[playername] = cube_entities + cube = nil + minetest.log("action", "[fediauth] cubic jail created for: '" .. playername .. "'") + end -- start fediauth session time fediauth_sessions[player:get_player_name()] = os.time() @@ -179,9 +229,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) fediauth_sessions[playername] = nil fediauth.regrant_privs(playername) fediauth.verified_checkmark(player, true) + if minetest.settings:get_bool("fediauth.create_lock_jail_cube") then + fediauth.remove_lock_cube(playername) + end else minetest.kick_player(playername, "fediauth code validation failed") fediauth.regrant_privs(playername) + if minetest.settings:get_bool("fediauth.create_lock_jail_cube") then + fediauth.remove_lock_cube(playername) + end failed_counter[playername] = (failed_counter[playername] or 0) + 1 end end) diff --git a/settingtypes.txt b/settingtypes.txt index 7f009bf..ef3162c 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -15,3 +15,6 @@ fediauth.restricted_instances (Restrict instance domains) string example.com,ano # After hour post will be deleted # Supported on: Pleroma/Akkoma and their forks fediauth.automatic_delete (Mark messages for delete*) bool false + +# Unstable and can cause out of memory. Create jail/lock cube entities around player +fediauth.create_lock_jail_cube (Create jail/lock cube) bool false