Add minetest.is_creative_enabled

This commit is contained in:
Wuzzy 2020-05-26 02:11:19 +02:00 committed by sfan5
parent 9a64a9fd94
commit 65a6a316d0
5 changed files with 17 additions and 10 deletions

@ -345,18 +345,12 @@ if INIT == "game" then
--Wrapper for rotate_and_place() to check for sneak and assume Creative mode --Wrapper for rotate_and_place() to check for sneak and assume Creative mode
--implies infinite stacks when performing a 6d rotation. --implies infinite stacks when performing a 6d rotation.
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
local creative_mode_cache = core.settings:get_bool("creative_mode")
local function is_creative(name)
return creative_mode_cache or
core.check_player_privs(name, {creative = true})
end
core.rotate_node = function(itemstack, placer, pointed_thing) core.rotate_node = function(itemstack, placer, pointed_thing)
local name = placer and placer:get_player_name() or "" local name = placer and placer:get_player_name() or ""
local invert_wall = placer and placer:get_player_control().sneak or false local invert_wall = placer and placer:get_player_control().sneak or false
return core.rotate_and_place(itemstack, placer, pointed_thing, return core.rotate_and_place(itemstack, placer, pointed_thing,
is_creative(name), core.is_creative_enabled(name),
{invert_wall = invert_wall}, true) {invert_wall = invert_wall}, true)
end end
end end

@ -582,7 +582,7 @@ function core.node_dig(pos, node, digger)
wielded = wdef.after_use(wielded, digger, node, dp) or wielded wielded = wdef.after_use(wielded, digger, node, dp) or wielded
else else
-- Wear out tool -- Wear out tool
if not core.settings:get_bool("creative_mode") then if not core.is_creative_enabled(diggername) then
wielded:add_wear(dp.wear) wielded:add_wear(dp.wear)
if wielded:get_count() == 0 and wdef.sound and wdef.sound.breaks then if wielded:get_count() == 0 and wdef.sound and wdef.sound.breaks then
core.sound_play(wdef.sound.breaks, { core.sound_play(wdef.sound.breaks, {

@ -164,6 +164,12 @@ function core.record_protection_violation(pos, name)
end end
end end
-- To be overridden by Creative mods
local creative_mode_cache = core.settings:get_bool("creative_mode")
function core.is_creative_enabled(name)
return creative_mode_cache
end
-- Checks if specified volume intersects a protected volume -- Checks if specified volume intersects a protected volume

@ -5475,6 +5475,13 @@ Misc.
* `minetest.record_protection_violation(pos, name)` * `minetest.record_protection_violation(pos, name)`
* This function calls functions registered with * This function calls functions registered with
`minetest.register_on_protection_violation`. `minetest.register_on_protection_violation`.
* `minetest.is_creative_enabled(name)`: returns boolean
* Returning `true` means that Creative Mode is enabled for player `name`.
* `name` will be `""` for non-players or if the player is unknown.
* This function should be overridden by Creative Mode-related mods to
implement a per-player Creative Mode.
* By default, this function returns `true` if the setting
`creative_mode` is `true` and `false` otherwise.
* `minetest.is_area_protected(pos1, pos2, player_name, interval)` * `minetest.is_area_protected(pos1, pos2, player_name, interval)`
* Returns the position of the first node that `player_name` may not modify * Returns the position of the first node that `player_name` may not modify
in the specified cuboid between `pos1` and `pos2`. in the specified cuboid between `pos1` and `pos2`.

@ -66,7 +66,7 @@ if s_infplace == "true" then
elseif s_infplace == "false" then elseif s_infplace == "false" then
infplace = false infplace = false
else else
infplace = minetest.settings:get_bool("creative_mode", false) infplace = minetest.is_creative_enabled("")
end end
minetest.register_chatcommand("infplace", { minetest.register_chatcommand("infplace", {