mirror of
				https://github.com/luanti-org/minetest_game.git
				synced 2025-11-04 01:05:49 +01:00 
			
		
		
		
	Creative: Add creative.is_enabled_for
This commit is contained in:
		@@ -78,6 +78,12 @@ For example,
 | 
			
		||||
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.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,9 @@
 | 
			
		||||
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
 | 
			
		||||
@@ -28,22 +34,25 @@ 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
creative = {}
 | 
			
		||||
local player_inventory = {}
 | 
			
		||||
 | 
			
		||||
function creative.init_creative_inventory(player)
 | 
			
		||||
@@ -79,7 +78,7 @@ function creative.register_tab(name, title, items)
 | 
			
		||||
	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()
 | 
			
		||||
@@ -172,7 +171,7 @@ creative.register_tab("craftitems", "Items", minetest.registered_craftitems)
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user