forked from VoxeLibre/VoxeLibre
Add maphack privilege for advanced blocks like command blocks
This commit is contained in:
parent
5d2df6db4c
commit
3f0bfa0aa8
|
@ -60,9 +60,7 @@ The following items are interesting for Creative Mode and for adventure
|
||||||
map builders. They can not be obtained in-game or in the creative inventory.
|
map builders. They can not be obtained in-game or in the creative inventory.
|
||||||
|
|
||||||
* Barrier: `mcl_core:barrier`
|
* Barrier: `mcl_core:barrier`
|
||||||
* Command Block: `mesecons_commandblock:commandblock_off`
|
* Minecart with Command Block (does not work yet): `mcl_minecarts:command_block_minecart`
|
||||||
* Monster Spawner: `mcl_mobspawners:spawner`
|
|
||||||
* Minecart with Command Block: `mcl_minecarts:command_block_minecart`
|
|
||||||
|
|
||||||
Use the `/giveme` chat command to obtain them. See the in-game help for
|
Use the `/giveme` chat command to obtain them. See the in-game help for
|
||||||
an explanation.
|
an explanation.
|
||||||
|
|
|
@ -106,6 +106,11 @@ local on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
||||||
if not minetest.settings:get_bool("creative_mode") then
|
if not minetest.settings:get_bool("creative_mode") then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
local privs = minetest.get_player_privs(player:get_player_name())
|
||||||
|
if not privs.maphack then
|
||||||
|
minetest.chat_send_player(player:get_player_name(), "Access denied. You need the “maphack” privilege to edit command blocks.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local commands = meta:get_string("commands")
|
local commands = meta:get_string("commands")
|
||||||
|
@ -118,6 +123,28 @@ local on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
||||||
minetest.show_formspec(player:get_player_name(), "commandblock_"..pos.x.."_"..pos.y.."_"..pos.z, formspec)
|
minetest.show_formspec(player:get_player_name(), "commandblock_"..pos.x.."_"..pos.y.."_"..pos.z, formspec)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
if pointed_thing.type ~= "node" then
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Use pointed node's on_rightclick function first, if present
|
||||||
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
|
if placer and not placer:get_player_control().sneak then
|
||||||
|
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
|
||||||
|
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local privs = minetest.get_player_privs(placer:get_player_name())
|
||||||
|
if not privs.maphack then
|
||||||
|
minetest.chat_send_player(placer:get_player_name(), "Placement denied. You need the “maphack” privilege to place command blocks.")
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
return minetest.item_place_node(itemstack, placer, pointed_thing)
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_node("mesecons_commandblock:commandblock_off", {
|
minetest.register_node("mesecons_commandblock:commandblock_off", {
|
||||||
description = "Command Block",
|
description = "Command Block",
|
||||||
|
|
||||||
|
@ -134,11 +161,12 @@ You can optionally use the following placeholders in your commands:
|
||||||
• “@random” is replaced by the name of a random player currently connected]],
|
• “@random” is replaced by the name of a random player currently connected]],
|
||||||
|
|
||||||
tiles = {{name="jeija_commandblock_off.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=2}}},
|
tiles = {{name="jeija_commandblock_off.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=2}}},
|
||||||
groups = {creative_breakable=1, mesecon_effector_off=1, not_in_creative_inventory=1},
|
groups = {creative_breakable=1, mesecon_effector_off=1},
|
||||||
drop = "",
|
drop = "",
|
||||||
on_blast = function() end,
|
on_blast = function() end,
|
||||||
on_construct = construct,
|
on_construct = construct,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
|
on_place = on_place,
|
||||||
after_place_node = after_place,
|
after_place_node = after_place,
|
||||||
on_rightclick = on_rightclick,
|
on_rightclick = on_rightclick,
|
||||||
sounds = mcl_sounds.node_sound_stone_defaults(),
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
||||||
|
@ -157,6 +185,7 @@ minetest.register_node("mesecons_commandblock:commandblock_on", {
|
||||||
on_blast = function() end,
|
on_blast = function() end,
|
||||||
on_construct = construct,
|
on_construct = construct,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
|
on_place = on_place,
|
||||||
after_place_node = after_place,
|
after_place_node = after_place,
|
||||||
on_rightclick = on_rightclick,
|
on_rightclick = on_rightclick,
|
||||||
sounds = mcl_sounds.node_sound_stone_defaults(),
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
||||||
|
@ -173,6 +202,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
if not fields.submit and not fields.doc then
|
if not fields.submit and not fields.doc then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
local privs = minetest.get_player_privs(player:get_player_name())
|
||||||
|
if not privs.maphack then
|
||||||
|
minetest.chat_send_player(player:get_player_name(), "Access denied. You need the “maphack” privilege to edit command blocks.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if fields.doc and minetest.get_modpath("doc") then
|
if fields.doc and minetest.get_modpath("doc") then
|
||||||
doc.show_entry(player:get_player_name(), "nodes", "mesecons_commandblock:commandblock_off", true)
|
doc.show_entry(player:get_player_name(), "nodes", "mesecons_commandblock:commandblock_off", true)
|
||||||
return
|
return
|
||||||
|
|
|
@ -142,6 +142,28 @@ minetest.register_node("mcl_core:barrier", {
|
||||||
playername = placer:get_player_name()
|
playername = placer:get_player_name()
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
if pointed_thing.type ~= "node" then
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Use pointed node's on_rightclick function first, if present
|
||||||
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
|
if placer and not placer:get_player_control().sneak then
|
||||||
|
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
|
||||||
|
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local name = placer:get_player_name()
|
||||||
|
local privs = minetest.get_player_privs(name)
|
||||||
|
if not privs.maphack then
|
||||||
|
minetest.chat_send_player(name, "Placement denied. You need the “maphack” privilege to place barriers.")
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
local new_itemstack = minetest.item_place(itemstack, placer, pointed_thing)
|
||||||
|
return new_itemstack
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Same as barrier, but non-pointable. This node is only to be used internally to separate realms.
|
-- Same as barrier, but non-pointable. This node is only to be used internally to separate realms.
|
||||||
|
|
|
@ -216,12 +216,30 @@ minetest.register_node("mcl_mobspawners:spawner", {
|
||||||
walkable = true,
|
walkable = true,
|
||||||
description = S("Monster Spawner"),
|
description = S("Monster Spawner"),
|
||||||
_doc_items_longdesc = S("A monster spawner is a block which regularily causes monsters and animals to appear around it."),
|
_doc_items_longdesc = S("A monster spawner is a block which regularily causes monsters and animals to appear around it."),
|
||||||
groups = {pickaxey=1, not_in_creative_inventory = 1, material_stone=1},
|
groups = {pickaxey=1, material_stone=1, deco_block=1},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
drop = "",
|
drop = "",
|
||||||
|
|
||||||
-- If placed by player, setup spawner with default settings
|
-- If placed by player, setup spawner with default settings
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
if pointed_thing.type ~= "node" then
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Use pointed node's on_rightclick function first, if present
|
||||||
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
|
if placer and not placer:get_player_control().sneak then
|
||||||
|
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
|
||||||
|
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local name = placer:get_player_name()
|
||||||
|
local privs = minetest.get_player_privs(name)
|
||||||
|
if not privs.maphack then
|
||||||
|
minetest.chat_send_player(name, "Placement denied. You need the “maphack” privilege to place monster spawners.")
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
local node_under = minetest.get_node(pointed_thing.under)
|
local node_under = minetest.get_node(pointed_thing.under)
|
||||||
local new_itemstack, success = minetest.item_place(itemstack, placer, pointed_thing)
|
local new_itemstack, success = minetest.item_place(itemstack, placer, pointed_thing)
|
||||||
if success then
|
if success then
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Shared privileges in MineClone 2
|
|
@ -0,0 +1,3 @@
|
||||||
|
minetest.register_privilege("maphack", {
|
||||||
|
description = "Can place and use advanced blocks like monster spawners, command blocks and barriers.",
|
||||||
|
})
|
Loading…
Reference in New Issue