Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- minetest.register_on_joinplayer(function(player)
- pname = player:get_player_name()
- playerdata = load_player_data()
- if not playerdata[pname] or not playerdata[pname]['gamemode'] then
- playerdata[pname]['gamemode'] = Default_Mode
- save_player_data()
- playerdata = load_player_data()
- else
- -- If in creative mode, modify player's inventory forms
- if not playerdata[pname]['gamemode'] == "Creative" then
- updategamemode(pname)
- end
- updategamemode(pname)
- end
- end)
- -- Create detached creative inventory after loading all mods
- function updategamemode(pname)
- playerdata = load_player_data()
- if playerdata[pname]['gamemode'] == "Creative" then
- local player = minetest.env:get_player_by_name(pname)
- local inv = minetest.create_detached_inventory("creative", {
- allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
- return count
- end,
- allow_put = function(inv, listname, index, stack, player)
- return 0
- end,
- allow_take = function(inv, listname, index, stack, player)
- return -1
- end,
- on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
- end,
- on_put = function(inv, listname, index, stack, player)
- end,
- on_take = function(inv, listname, index, stack, player)
- print(player:get_player_name().." takes item from creative inventory; listname="..dump(listname)..", index="..dump(index)..", stack="..dump(stack))
- if stack then
- print("stack:get_name()="..dump(stack:get_name())..", stack:get_count()="..dump(stack:get_count()))
- end
- end,
- })
- local creative_list = {}
- for name,def in pairs(minetest.registered_items) do
- if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0)
- and def.description and def.description ~= "" then
- table.insert(creative_list, name)
- end
- end
- table.sort(creative_list)
- inv:set_size("main", #creative_list)
- for _,itemstring in ipairs(creative_list) do
- inv:add_item("main", ItemStack(itemstring))
- end
- creative_inventory.creative_inventory_size = #creative_list
- print("creative inventory size: "..dump(creative_inventory.creative_inventory_size))
- creative_inventory.set_creative_formspec(player, 1, 1)
- -- Create the trash field
- local trash = minetest.create_detached_inventory("creative_trash", {
- -- Allow the stack to be placed and remove it in on_put()
- -- This allows the creative inventory to restore the stack
- allow_put = function(inv, listname, index, stack, player)
- return stack:get_count()
- end,
- on_put = function(inv, listname, index, stack, player)
- inv:set_stack(listname, index, "")
- end,
- })
- trash:set_size("main", 1)
- else
- local player = minetest.env:get_player_by_name(pname)
- creative_inventory.set_creative_formspec(player, 1, 1)
- end
- end
- creative_inventory.set_creative_formspec = function(player, start_i, pagenum)
- playerdata = load_player_data()
- if playerdata[player:get_player_name()]['gamemode'] == "Creative" then
- pagenum = math.floor(pagenum)
- local pagemax = math.floor((creative_inventory.creative_inventory_size-1) / (6*4) + 1)
- player:set_inventory_formspec("size[13,7.5]"..
- --"image[6,0.6;1,2;player.png]"..
- "list[current_player;main;5,3.5;8,4;]"..
- "list[current_player;craft;8,0;3,3;]"..
- "list[current_player;craftpreview;12,1;1,1;]"..
- "list[detached:creative;main;0.3,0.5;4,6;"..tostring(start_i).."]"..
- "label[2.0,6.55;"..tostring(pagenum).."/"..tostring(pagemax).."]"..
- "button[0.3,6.5;1.6,1;creative_prev;<<]"..
- "button[2.7,6.5;1.6,1;creative_next;>>]"..
- "label[5,1.5;Trash:]"..
- "list[detached:creative_trash;main;5,2;1,1;]")
- player:get_inventory():set_width("craft", 3)
- player:get_inventory():set_size("craft", 9)
- elseif playerdata[player:get_player_name()]['gamemode'] == "Survival" then
- player:set_inventory_formspec("size[8,7.5;]"..
- "image[1,0.6;1,2;player.png]"..
- "list[current_player;main;0,3.5;8,4;]"..
- "list[current_player;craft;4,0.5;2,2;]"..
- "list[current_player;craftpreview;6.5,1;1,1;]")
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement