Skip to content
Permalink
Browse files

Creative: Add creative.is_enabled_for

  • Loading branch information...
rubenwardy authored and paramat committed Dec 30, 2016
1 parent ae42687 commit bee5b316a86abba55ddb3bf97eab3cb9fb5803b5
Showing with 31 additions and 17 deletions.
  1. +6 −0 game_api.txt
  2. +23 −14 mods/creative/init.lua
  3. +2 −3 mods/creative/inventory.lua
@@ -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)

0 comments on commit bee5b31

Please sign in to comment.
You can’t perform that action at this time.