Skip to content

Commit

Permalink
Make wrappers easier to mantain.
Browse files Browse the repository at this point in the history
  • Loading branch information
sfence committed Jan 25, 2025
1 parent 4ad9641 commit cfa63a6
Showing 1 changed file with 102 additions and 207 deletions.
309 changes: 102 additions & 207 deletions games/devtest/mods/testeditor/init.lua
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
local S = minetest.get_translator("testeditor")
local F = minetest.formspec_escape
local S = luanti.get_translator("testeditor")
local F = luanti.formspec_escape

local function editor_to_string(editor)
if type(editor) == "string" then
Expand Down Expand Up @@ -50,7 +50,7 @@ local function editor_formspec(playername)
if not formspec.actual then
title = S("@1 - NOT APPLIED CHANGES", title)
end
minetest.show_formspec(playername, "testeditor:editor",
luanti.show_formspec(playername, "testeditor:editor",
"size[11,9]"..
"label[0,0;"..F(title).."]"..
"textlist[0,0.5;11,6.5;editor_data;"..formspec.list..";"..sel..";false]"..
Expand All @@ -63,12 +63,12 @@ local function editor_formspec(playername)
)
end

local function editor_formspec_create(playername, title, read_cb, write_cb)
local function editor_formspec_create(playername, wrapper)
local data = read_cb(playername)
editor_formspecs[playername] = {
title = title,
read_cb = read_cb,
write_cb = write_cb,
title = wrapper.title,
read_cb = wrapper.read_cb,
write_cb = wrapper.write_cb,
data = data,
key = "",
actual = true,
Expand All @@ -81,7 +81,7 @@ end
local function use_loadstring(param, player)
-- For security reasons, require 'server' priv, just in case
-- someone is actually crazy enough to run this on a public server.
local privs = minetest.get_player_privs(player:get_player_name())
local privs = luanti.get_player_privs(player:get_player_name())
if not privs.server then
return false, "You need 'server' privilege to change object properties!"
end
Expand Down Expand Up @@ -109,7 +109,7 @@ local function use_loadstring(param, player)
return true, errOrResult
end

minetest.register_on_player_receive_fields(function(player, formname, fields)
luanti.register_on_player_receive_fields(function(player, formname, fields)
if not (player and player:is_player()) then
return
end
Expand All @@ -120,7 +120,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
return
end
if fields.editor_data then
local expl = minetest.explode_textlist_event(fields.editor_data)
local expl = luanti.explode_textlist_event(fields.editor_data)
if expl.type == "DCL" or expl.type == "CHG" then
formspec.selindex = expl.index
formspec.key = formspec.index_to_key[expl.index]
Expand All @@ -136,7 +136,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
formspec.list = get_object_properties_form(formspec.data, name)
formspec.actual = false
else
minetest.chat_send_player(name, str)
luanti.chat_send_player(name, str)
return
end
editor_formspec(name)
Expand All @@ -153,7 +153,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
formspec.list = get_object_properties_form(formspec.data, name)
formspec.actual = false
else
minetest.chat_send_player(name, str)
luanti.chat_send_player(name, str)
return
end
editor_formspec(name)
Expand All @@ -168,214 +168,109 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end
end)

-- ARMOR GROUPS
local function read_armor(name)
local player = minetest.get_player_by_name(name)
if player then
return player:get_armor_groups()
end
return {}
end
local function write_armor(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:set_armor_groups(data)
end
end

-- NAMETAG
local function read_nametag(name)
local player = minetest.get_player_by_name(name)
if player then
return player:get_nametag_attributes()
end
return {}
end
local function write_nametag(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:set_nametag_attributes(data)
end
end

-- PSYCHICS OVERRIDE
local function read_physics(name)
local player = minetest.get_player_by_name(name)
if player then
return player:get_physics_override()
end
return {}
end
local function write_physics(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:set_physics_override(data)
end
end

-- HUD FLAGS
local function read_hud_flags(name)
local player = minetest.get_player_by_name(name)
if player then
return player:hud_get_flags()
end
return {}
end
local function write_hud_flags(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:hud_set_flags(data)
end
end

-- SKY
local function read_sky(name)
local player = minetest.get_player_by_name(name)
if player then
return player:get_sky(true)
end
return {}
end
local function write_sky(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:set_sky(data)
end
end

-- SUN
local function read_sun(name)
local player = minetest.get_player_by_name(name)
if player then
return player:get_sun()
end
return {}
end
local function write_sun(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:set_sun(data)
end
end

-- MOON
local function read_moon(name)
local player = minetest.get_player_by_name(name)
if player then
return player:get_moon()
end
return {}
end
local function write_moon(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:set_moon(data)
end
end

-- STARS
local function read_stars(name)
local player = minetest.get_player_by_name(name)
if player then
return player:get_stars()
end
return {}
local function create_read_cb(func)
return
function(name)
local player = luanti.get_player_by_name(name)
if player then
return player[func]()
end
return {}
end
end
local function write_stars(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:set_stars(data)
end
local function create_write_cb(func)
return
function(name, data)
local player = luanti.get_player_by_name(name)
if player then
return player[func](data)
end
end
end

-- CLOUDS
local function read_clouds(name)
local player = minetest.get_player_by_name(name)
if player then
return player:get_clouds()
end
return {}
end
local function write_clouds(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:set_clouds(data)
end
end
local wrappers = {
armor = {
title = S("Properties editor of armor groups (get_armor_groups/set_armor_groups)"),
read_cb = create_read_cb("get_armor_groups"),
write_cb = create_write_cb("set_armor_groups")
},
nametag = {
title = S("Properties editor of nametag (get_nametag/set_nametag)"),
read_cb = create_read_cb("get_nametag_attributes"),
write_cb = create_write_cb("set_nametag_attributes")
},
physics = {
title = S("Properties editor of physics_override (get_physics_override/set_physics_override)"),
read_cb = create_read_cb("get_physics_override"),
write_cb = create_write_cb("set_physics_override")
},
hud_flags = {
title = S("Properties editor of hud_flags (hud_get_flags/hud_set_flags)"),
read_cb = create_read_cb("hud_get_flags"),
write_cb = create_write_cb("hud_set_flags")
},
sky = {
title = S("Properties editor of sky (get_sky/set_sky)"),
read_cb =
function read_sky(name)
local player = luanti.get_player_by_name(name)
if player then
return player:get_sky(true)
end
return {}
end,
write_cb = create_write_cb("set_sky")
},
sun = {
title = S("Properties editor of sun (get_sun/set_sun)"),
read_cb = create_read_cb("get_sun"),
write_cb = create_write_cb("set_sun")
},
moon = {
title = S("Properties editor of moon (get_moon/set_moon)"),
read_cb = create_read_cb("get_moon"),
write_cb = create_write_cb("set_moon")
},
stars = {
title = S("Properties editor of stars (get_stars/set_stars)"),
read_cb = create_read_cb("get_stars"),
write_cb = create_write_cb("set_stars")
},
clouds = {
title = S("Properties editor of clouds (get_clouds/set_clouds)"),
read_cb = create_read_cb("get_clouds"),
write_cb = create_write_cb("set_clouds")
},
lighting = {
title = S("Properties editor of lighting (get_lighting/set_lighting)"),
read_cb = create_read_cb("get_lighting"),
write_cb = create_write_cb("set_lighting")
},
flags = {
title = S("Properties editor of flags (get_flags/set_flags)"),
read_cb = create_read_cb("get_flags"),
write_cb = create_write_cb("set_flags")
}
}

-- LIGHTING
local function read_lighting(name)
local player = minetest.get_player_by_name(name)
if player then
return player:get_lighting()
end
return {}
end
local function write_lighting(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:set_lighting(data)
end
end
local editor_params = ""
local sep = ""

-- FLAGS
local function read_flags(name)
local player = minetest.get_player_by_name(name)
if player then
return player:get_flags()
end
return {}
for key, _ in pairs(wrappers) do
editor_params = editor_params..sep..key
sep = "|"
end
local function write_flags(name, data)
local player = minetest.get_player_by_name(name)
if player then
player:set_flags(data)
end
end

local editor_params = "armor|nametag|physics|hud_flags|sky|sun|moon|stars|clouds|lighting|flags"

minetest.register_chatcommand("player_editor", {
luanti.register_chatcommand("player_editor", {
params = "<"..editor_params..">",
description = "Open editor for some player data",
func = function(name, param)
local player = minetest.get_player_by_name(name)
local player = luanti.get_player_by_name(name)
if not player then
return false, "No player."
end
if param == "armor" then
local title = S("Properties editor of armor groups (get_armor_groups/set_armor_groups)")
editor_formspec_create(name, title, read_armor, write_armor)
elseif param == "nametag" then
local title = S("Properties editor of nametag (get_nametag/set_nametag)")
editor_formspec_create(name, title, read_nametag, write_nametag)
elseif param == "physics" then
local title = S("Properties editor of physics_override (get_physics_override/set_physics_override)")
editor_formspec_create(name, title, read_physics, write_physics)
elseif param == "hud_flags" then
local title = S("Properties editor of hud_flags (hud_get_flags/hud_set_flags)")
editor_formspec_create(name, title, read_hud_flags, write_hud_flags)
elseif param == "sky" then
local title = S("Properties editor of sky (get_sky/set_sky)")
editor_formspec_create(name, title, read_sky, write_sky)
elseif param == "sun" then
local title = S("Properties editor of sun (get_sun/set_sun)")
editor_formspec_create(name, title, read_sun, write_sun)
elseif param == "moon" then
local title = S("Properties editor of moon (get_moon/set_moon)")
editor_formspec_create(name, title, read_moon, write_moon)
elseif param == "stars" then
local title = S("Properties editor of stars (get_stars/set_stars)")
editor_formspec_create(name, title, read_stars, write_stars)
elseif param == "clouds" then
local title = S("Properties editor of clouds (get_clouds/set_clouds)")
editor_formspec_create(name, title, read_clouds, write_clouds)
elseif param == "lighting" then
local title = S("Properties editor of lighting (get_lighting/set_lighting)")
editor_formspec_create(name, title, read_lighting, write_lighting)
elseif param == "flags" then
local title = S("Properties editor of flags (get_flags/set_flags)")
editor_formspec_create(name, title, read_flags, write_flags)
if wrappers[param] then
editor_formspec_create(name, wrappers[param])
else
return false, S("Use with @1.", editor_params)
end
Expand Down

0 comments on commit cfa63a6

Please sign in to comment.