3 minetest.register_privilege("creative", {
4 description = "Allow player to use creative inventory",
5 give_to_singleplayer = false,
9 local creative_mode_cache = minetest.settings:get_bool("creative_mode")
11 function creative.is_enabled_for(name)
12 return creative_mode_cache or
13 minetest.check_player_privs(name, {creative = true})
16 dofile(minetest.get_modpath("creative") .. "/inventory.lua")
18 if creative_mode_cache then
19 -- Dig time is modified according to difference (leveldiff) between tool
20 -- 'maxlevel' and node 'level'. Digtime is divided by the larger of
22 -- To speed up digging in creative, hand 'maxlevel' and 'digtime' have been
23 -- increased such that nodes of differing levels have an insignificant
26 local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 256}
28 minetest.register_item(":", {
30 wield_image = "wieldhand.png",
31 wield_scale = {x = 1, y = 1, z = 2.5},
34 full_punch_interval = 0.5,
41 oddly_breakable_by_hand = caps,
43 damage_groups = {fleshy = 10},
48 -- Unlimited node placement
49 minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
50 return creative.is_enabled_for(placer:get_player_name())
53 -- Don't pick up if the item is already in the inventory
54 local old_handle_node_drops = minetest.handle_node_drops
55 function minetest.handle_node_drops(pos, drops, digger)
56 if not digger or not digger:is_player() then
59 if not creative.is_enabled_for(digger:get_player_name()) then
60 return old_handle_node_drops(pos, drops, digger)
62 local inv = digger:get_inventory()
64 for _, item in ipairs(drops) do
65 if not inv:contains_item("main", item, true) then
66 inv:add_item("main", item)