add mesecons mods
This commit is contained in:
parent
71a53fbef8
commit
9861939223
721 changed files with 19937 additions and 1 deletions
160
mods/moremesecons/moremesecons_luablock/init.lua
Normal file
160
mods/moremesecons/moremesecons_luablock/init.lua
Normal file
|
@ -0,0 +1,160 @@
|
|||
local storage = minetest.get_mod_storage()
|
||||
local pos_data = moremesecons.get_storage_data(storage, "pos_data")
|
||||
|
||||
local function set_data(pos, code, owner)
|
||||
local data = {
|
||||
code = code,
|
||||
owner = owner
|
||||
}
|
||||
moremesecons.set_data_to_pos(pos_data, pos, data)
|
||||
end
|
||||
|
||||
local function check_data(pos, code, owner)
|
||||
local stored_data = moremesecons.get_data_from_pos(pos_data, pos)
|
||||
if not stored_data then
|
||||
return false
|
||||
end
|
||||
if code ~= stored_data.code
|
||||
or owner ~= stored_data.owner then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
local function make_formspec(meta, pos)
|
||||
local code = minetest.formspec_escape(meta:get_string("code"))
|
||||
local errmsg = minetest.formspec_escape(meta:get_string("errmsg"))
|
||||
meta:set_string("formspec",
|
||||
"size[10,8;]" ..
|
||||
"textarea[0.5,0.5;9.5,7;code;Code;"..code.."]" ..
|
||||
"label[0.1,7;"..errmsg.."]" ..
|
||||
"button_exit[4,7.5;2,1;submit;Submit]")
|
||||
end
|
||||
|
||||
minetest.register_node("moremesecons_luablock:luablock", {
|
||||
description = "Lua Block",
|
||||
tiles = {"moremesecons_luablock.png"},
|
||||
groups = {cracky = 2},
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local under = pointed_thing.under
|
||||
local node = minetest.get_node(under)
|
||||
local udef = minetest.registered_nodes[node.name]
|
||||
if udef and udef.on_rightclick and
|
||||
not (placer and placer:get_player_control().sneak) then
|
||||
return udef.on_rightclick(under, node, placer, itemstack,
|
||||
pointed_thing) or itemstack
|
||||
end
|
||||
|
||||
local pos
|
||||
if minetest.registered_items[minetest.get_node(under).name].buildable_to then
|
||||
pos = under
|
||||
else
|
||||
pos = pointed_thing.above
|
||||
end
|
||||
|
||||
local name = placer:get_player_name()
|
||||
if minetest.is_protected(pos, name) and
|
||||
not minetest.check_player_privs(name, {protection_bypass = true}) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return itemstack
|
||||
end
|
||||
if not minetest.check_player_privs(name, {server = true}) then
|
||||
minetest.chat_send_player(name, "You can't use a LuaBlock without the server privilege.")
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local node_def = minetest.registered_nodes[minetest.get_node(pos).name]
|
||||
if not node_def or not node_def.buildable_to then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.set_node(pos, {name = "moremesecons_luablock:luablock"})
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("owner", name)
|
||||
meta:set_string("infotext", "LuaBlock owned by " .. name)
|
||||
make_formspec(meta, pos)
|
||||
|
||||
if not (creative and creative.is_enabled_for
|
||||
and creative.is_enabled_for(placer:get_player_name())) then
|
||||
itemstack:take_item()
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
on_receive_fields = function(pos, form_name, fields, sender)
|
||||
if not fields.submit then
|
||||
return
|
||||
end
|
||||
local name = sender:get_player_name()
|
||||
local meta = minetest.get_meta(pos)
|
||||
if name ~= meta:get_string("owner") then
|
||||
minetest.chat_send_player(name, "You don't own this LuaBlock.")
|
||||
return
|
||||
end
|
||||
if not minetest.check_player_privs(name, {server = true}) then
|
||||
minetest.chat_send_player(name, "You can't use a LuaBlock without the server privilege.")
|
||||
return
|
||||
end
|
||||
|
||||
meta:set_string("code", fields.code)
|
||||
set_data(pos, fields.code, name)
|
||||
make_formspec(meta, pos)
|
||||
end,
|
||||
can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
return meta:get_string("owner") == player:get_player_name()
|
||||
end,
|
||||
on_destruct = function(pos)
|
||||
moremesecons.remove_data_from_pos(pos_data, pos)
|
||||
end,
|
||||
mesecons = {effector = {
|
||||
action_on = function(npos, node)
|
||||
local meta = minetest.get_meta(npos)
|
||||
local code = meta:get_string("code")
|
||||
local owner = meta:get_string("owner")
|
||||
if code == "" then
|
||||
return
|
||||
end
|
||||
if not check_data(npos, code, owner) then
|
||||
minetest.log("warning", "[moremesecons_luablock] Metadata of LuaBlock at pos "..minetest.pos_to_string(npos).." does not match its mod storage data!")
|
||||
return
|
||||
end
|
||||
|
||||
local env = {}
|
||||
for k, v in pairs(_G) do
|
||||
env[k] = v
|
||||
end
|
||||
env.pos = table.copy(npos)
|
||||
env.mem = minetest.deserialize(meta:get_string("mem")) or {}
|
||||
|
||||
local func, err_syntax
|
||||
if _VERSION == "Lua 5.1" then
|
||||
func, err_syntax = loadstring(code)
|
||||
if func then
|
||||
setfenv(func, env)
|
||||
end
|
||||
else
|
||||
func, err_syntax = load(code, nil, "t", env)
|
||||
end
|
||||
if not func then
|
||||
meta:set_string("errmsg", err_syntax)
|
||||
make_formspec(meta, npos)
|
||||
return
|
||||
end
|
||||
|
||||
local good, err_runtime = pcall(func)
|
||||
|
||||
if not good then
|
||||
meta:set_string("errmsg", err_runtime)
|
||||
make_formspec(meta, npos)
|
||||
return
|
||||
end
|
||||
|
||||
meta:set_string("mem", minetest.serialize(env.mem))
|
||||
|
||||
meta:set_string("errmsg", "")
|
||||
make_formspec(meta, npos)
|
||||
end
|
||||
}}
|
||||
})
|
2
mods/moremesecons/moremesecons_luablock/mod.conf
Normal file
2
mods/moremesecons/moremesecons_luablock/mod.conf
Normal file
|
@ -0,0 +1,2 @@
|
|||
name = moremesecons_luablock
|
||||
depends = mesecons,moremesecons_utils
|
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
Loading…
Add table
Add a link
Reference in a new issue