essentials-cd2025/simple_edit.lua
BlackImpostor f39229461a
0.9
2024-07-12 22:14:25 +03:00

222 lines
8.9 KiB
Lua

--local S = minetest.get_translator("simple_edit")
local S = minetest.get_translator("essentials")
local function set_the_block(name, param)
local p = {}
local player = minetest.get_player_by_name(name);
local block = ""
local pos = player:get_pos();
p.x, p.y, p.z, block = string.match(param, "^([%d.~-]+)[, ] *([%d.~-]+)[, ] *([%d.~-]+) +(.+)$");
p = core.parse_coordinates(p.x, p.y, p.z);
if player == nil then
return false
end
if p and p.x and p.y and p.z and block then
minetest.chat_send_player(name, core.colorize("#00FF06", S("Block @1 sets successful at @2 @3 @4!", block, p.x, p.y, p.z)))
minetest.set_node({x = p.x, y = p.y, z = p.z}, {name = block})
minetest.sound_play("done", name)
else
minetest.chat_send_player(name, core.colorize("red", S("Something wrong!")))
minetest.sound_play("error", name)
end
end
local function fill_the_zone(name, param)
local p = {}
local p2 = {}
local player = minetest.get_player_by_name(name);
local block = ""
local pos = player:get_pos();
p.x, p.y, p.z, p2.x, p2.y, p2.z, block = string.match(param, "^([%d.~-]+)[, ] *([%d.~-]+)[, ] *([%d.~-]+) *([%d.~-]+)[, ] *([%d.~-]+)[, ] *([%d.~-]+) +(.+)$");
p = core.parse_coordinates(p.x, p.y, p.z);
p2 = core.parse_coordinates(p2.x, p2.y, p2.z);
if player == nil then
return false
end
if p and p2 and p.x and p.y and p.z and p2.x and p2.y and p2.z and block then
minetest.chat_send_player(name, core.colorize("#00FF06", S("Zone filled from @1 @2 @3 to @4 @5 @6 with a @7", p.x, p.y, p.z, p2.x, p2.y, p2.z, block)))
minetest.bulk_set_node({{x = p.x, y = p.y, z = p.z}, {x = p2.x, y = p2.y, z = p2.z}}, {name = block})
minetest.sound_play("done", name)
else
minetest.chat_send_player(name, core.colorize("red", S("Something wrong!")))
minetest.sound_play("error", name)
end
end
minetest.register_on_leaveplayer(function(player)
local prop = {visual_size = {x = 1, y = 1}, eye_height = 1.47}
player:set_properties(prop)
end)
local function set_bug_size(name, param)
local player = minetest.get_player_by_name(name);
local size = tonumber(string.match(param, "^([%d.~-]+)$"))
local prop = {visual_size = {x = size, y = size}}
if not size then
minetest.chat_send_player(name, "Please, enter size (number)!")
elseif size == 1 then
minetest.chat_send_player(name, "Size set to default")
prop = {visual_size = {x = 1, y = 1}}
player:set_properties(prop)
else
minetest.chat_send_player(name, "Now your size is ".. size)
player:set_properties(prop)
end
end
local function set_the_size(name, param)
local player = minetest.get_player_by_name(name);
local size = tonumber(string.match(param, "^([%d.~-]+)"))
local prop = {visual_size = {x = size, y = size}}
local other
if size then
other = string.match(param, size .." +(.+)$")
end
if not size then
minetest.chat_send_player(name, "Please, enter size (number)!")
elseif size > 10 then
minetest.chat_send_player(name, "Size cannot be more than 10!")
elseif size == 1 then
minetest.chat_send_player(name, "Size set to default")
prop = {visual_size = {x = 1, y = 1}, eye_height = 1.47, spepheight = 0.6}
player:set_properties(prop)
elseif not other then
if size == 2 then
minetest.chat_send_player(name, "Now your size is 2")
prop = {visual_size = {x = size, y = size}, eye_height = size + .5 + .47}
player:set_properties(prop)
elseif size == 3 then
minetest.chat_send_player(name, "Now your size is 3")
prop = {visual_size = {x = size, y = size}, eye_height = size + 1 + .47}
player:set_properties(prop)
elseif size == 4 then
minetest.chat_send_player(name, "Now your size is 4")
prop = {visual_size = {x = size, y = size}, eye_height = size + 1.5 + .47}
player:set_properties(prop)
elseif size == 5 then
minetest.chat_send_player(name, "Now your size is 5")
prop = {visual_size = {x = size, y = size}, eye_height = size + 2 + .47}
player:set_properties(prop)
elseif size == 6 then
minetest.chat_send_player(name, "Now your size is 6")
prop = {visual_size = {x = size, y = size}, eye_height = size + 2.5 + .47}
player:set_properties(prop)
elseif size == 7 then
minetest.chat_send_player(name, "Now your size is 7")
prop = {visual_size = {x = size, y = size}, eye_height = size + 3 + .47}
player:set_properties(prop)
elseif size == 8 then
minetest.chat_send_player(name, "Now your size is 8")
prop = {visual_size = {x = size, y = size}, eye_height = size + 3.5 + .47}
player:set_properties(prop)
elseif size == 9 then
minetest.chat_send_player(name, "Now your size is 9")
prop = {visual_size = {x = size, y = size}, eye_height = size + 4 + .47}
player:set_properties(prop)
elseif size == 10 then
minetest.chat_send_player(name, "Now your size is 10")
prop = {visual_size = {x = size, y = size}, eye_height = size + 4.5 + .47}
player:set_properties(prop)
end
elseif size == 1 and other then
minetest.chat_send_player(name, "Now ".. other .." size set to default.")
minetest.chat_send_player(other, name .." set your size to default.")
prop = {visual_size = {x = size, y = size}, eye_height = size + 1.3 + .47, stepheight = size}
other:set_properties(prop)
else
minetest.chat_send_player(name, "Now ".. other .." size is ".. size)
minetest.chat_send_player(other, name .." set your size to ".. size)
prop = {visual_size = {x = 1, y = 1}, eye_height = 1.47, spepheight = 0.6}
other:set_properties(prop)
end
end
-- Temporary disabled for rework
--[[
core.register_privilege("size", {
description = "Can resize self, item and other.",
give_to_singleplayer = false,
})
minetest.register_chatcommand("setsize", {
params = "<size> [<name>]",
description = "Sets a player size.",
privs = {server = true},
func = set_the_size,
})
minetest.register_chatcommand("setbugsize", {
params = "<size>",
description = "Sets a bugged player size.",
privs = {server = true},
func = set_bug_size,
})
minetest.register_chatcommand("setblock", {
params = "<X>,<Y>,<Z> <block_name>",
description = S("Sets a block at coordinates."),
privs = {server = true},
func = set_the_block,
})
minetest.register_chatcommand("fill", {
params = "<X>,<Y>,<Z> <X>,<Y>,<Z> <block_name>",
description = S("Fill zone with a block."),
privs = {server = true},
func = fill_the_zone,
})
]]--
minetest.register_craftitem("essentials:eraser", {
description = S("Eraser"),
inventory_image = "simple_edit_eraser.png",
stack_max = 1,
liquids_pointable = true,
range = 128,
on_use = function(itemstack, user, pointed_thing)
local name = user:get_player_name()
local pos = minetest.get_pointed_thing_position(pointed_thing)
if minetest.check_player_privs(name, {server=true}) then
if pos then
minetest.remove_node(pos)
minetest.sound_play("simple_edit_erase", name)
end
else
minetest.chat_send_player(name, core.colorize("red", S("You an not admin!")))
itemstack:take_item(1)
minetest.sound_play("error", name)
return itemstack
end
end,
})
if essentials.disposable_eraser then
minetest.register_craft({
type = "shaped",
recipe = {
{"default:coral_orange", "default:desert_sand", "default:coral_orange"},
{"default:coral_brown", "default:mese_crystal", "default:coral_brown"},
{"default:coral_orange", "default:desert_sand", "default:coral_orange"},
},
output = "essentials:disposable_eraser",
})
minetest.register_craftitem("essentials:disposable_eraser", {
description = S("Disposable Eraser"),
inventory_image = "simple_edit_disposable_eraser.png",
stack_max = 1,
on_use = function(itemstack, user, pointed_thing)
local name = user:get_player_name()
local pos = minetest.get_pointed_thing_position(pointed_thing)
if pos then
minetest.remove_node(pos)
minetest.sound_play("simple_edit_erase", name)
itemstack:take_item(1)
return itemstack
end
end,
})
end