Skip to content

Commit bee5b31

Browse files
rubenwardyparamat
authored andcommittedJan 26, 2017
Creative: Add creative.is_enabled_for
1 parent ae42687 commit bee5b31

File tree

3 files changed

+31
-17
lines changed

3 files changed

+31
-17
lines changed
 

Diff for: ‎game_api.txt

+6
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ For example,
7878
is used to show all tools. Name is used in the sfinv page name, title is the
7979
human readable title.
8080

81+
`is_enabled_for` is used to check whether a player is in creative mode:
82+
83+
creative.is_enabled_for(name)
84+
85+
Override this to allow per-player game modes.
86+
8187
The contents of `creative.formspec_add` is appended to every creative inventory
8288
page. Mods can use it to add additional formspec elements onto the default
8389
creative inventory formspec to be drawn after each update.

Diff for: ‎mods/creative/init.lua

+23-14
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
creative = {}
2+
3+
function creative.is_enabled_for(name)
4+
return minetest.setting_getbool("creative_mode")
5+
end
6+
17
dofile(minetest.get_modpath("creative") .. "/inventory.lua")
28

39
if minetest.setting_getbool("creative_mode") then
@@ -28,22 +34,25 @@ if minetest.setting_getbool("creative_mode") then
2834
damage_groups = {fleshy = 10},
2935
}
3036
})
37+
end
3138

32-
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
33-
return true
34-
end)
39+
-- Unlimited node placement
40+
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
41+
return creative.is_enabled_for(placer:get_player_name())
42+
end)
3543

36-
function minetest.handle_node_drops(pos, drops, digger)
37-
if not digger or not digger:is_player() then
38-
return
39-
end
40-
local inv = digger:get_inventory()
41-
if inv then
42-
for _, item in ipairs(drops) do
43-
item = ItemStack(item):get_name()
44-
if not inv:contains_item("main", item) then
45-
inv:add_item("main", item)
46-
end
44+
-- Don't pick up if the item is already in the inventory
45+
function minetest.handle_node_drops(pos, drops, digger)
46+
if not digger or not digger:is_player() or
47+
not creative.is_enabled_for(digger:get_player_name()) then
48+
return
49+
end
50+
local inv = digger:get_inventory()
51+
if inv then
52+
for _, item in ipairs(drops) do
53+
item = ItemStack(item):get_name()
54+
if not inv:contains_item("main", item) then
55+
inv:add_item("main", item)
4756
end
4857
end
4958
end

Diff for: ‎mods/creative/inventory.lua

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
creative = {}
21
local player_inventory = {}
32

43
function creative.init_creative_inventory(player)
@@ -79,7 +78,7 @@ function creative.register_tab(name, title, items)
7978
sfinv.register_page("creative:" .. name, {
8079
title = title,
8180
is_in_nav = function(self, player, context)
82-
return minetest.setting_getbool("creative_mode")
81+
return creative.is_enabled_for(player:get_player_name())
8382
end,
8483
get = function(self, player, context)
8584
local player_name = player:get_player_name()
@@ -172,7 +171,7 @@ creative.register_tab("craftitems", "Items", minetest.registered_craftitems)
172171

173172
local old_homepage_name = sfinv.get_homepage_name
174173
function sfinv.get_homepage_name(player)
175-
if minetest.setting_getbool("creative_mode") then
174+
if creative.is_enabled_for(player:get_player_name()) then
176175
return "creative:all"
177176
else
178177
return old_homepage_name(player)

0 commit comments

Comments
 (0)
Please sign in to comment.