is used to show all tools. Name is used in the sfinv page name, title is the
human readable title.
+`is_enabled_for` is used to check whether a player is in creative mode:
+
+ creative.is_enabled_for(name)
+
+Override this to allow per-player game modes.
+
The contents of `creative.formspec_add` is appended to every creative inventory
page. Mods can use it to add additional formspec elements onto the default
creative inventory formspec to be drawn after each update.
+creative = {}
+
+function creative.is_enabled_for(name)
+ return minetest.setting_getbool("creative_mode")
+end
+
dofile(minetest.get_modpath("creative") .. "/inventory.lua")
if minetest.setting_getbool("creative_mode") then
damage_groups = {fleshy = 10},
}
})
+end
- minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
- return true
- end)
+-- Unlimited node placement
+minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
+ return creative.is_enabled_for(placer:get_player_name())
+end)
- function minetest.handle_node_drops(pos, drops, digger)
- if not digger or not digger:is_player() then
- return
- end
- local inv = digger:get_inventory()
- if inv then
- for _, item in ipairs(drops) do
- item = ItemStack(item):get_name()
- if not inv:contains_item("main", item) then
- inv:add_item("main", item)
- end
+-- Don't pick up if the item is already in the inventory
+function minetest.handle_node_drops(pos, drops, digger)
+ if not digger or not digger:is_player() or
+ not creative.is_enabled_for(digger:get_player_name()) then
+ return
+ end
+ local inv = digger:get_inventory()
+ if inv then
+ for _, item in ipairs(drops) do
+ item = ItemStack(item):get_name()
+ if not inv:contains_item("main", item) then
+ inv:add_item("main", item)
end
end
end
-creative = {}
local player_inventory = {}
function creative.init_creative_inventory(player)
sfinv.register_page("creative:" .. name, {
title = title,
is_in_nav = function(self, player, context)
- return minetest.setting_getbool("creative_mode")
+ return creative.is_enabled_for(player:get_player_name())
end,
get = function(self, player, context)
local player_name = player:get_player_name()
local old_homepage_name = sfinv.get_homepage_name
function sfinv.get_homepage_name(player)
- if minetest.setting_getbool("creative_mode") then
+ if creative.is_enabled_for(player:get_player_name()) then
return "creative:all"
else
return old_homepage_name(player)