Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2013
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.00 KB | None | 0 0
  1. minetest.register_on_joinplayer(function(player)
  2.     pname = player:get_player_name()
  3.     playerdata = load_player_data()
  4.     if not playerdata[pname] or not playerdata[pname]['gamemode'] then
  5.         playerdata[pname]['gamemode'] = Default_Mode
  6.         save_player_data()
  7.         playerdata = load_player_data()
  8.     else
  9.         -- If in creative mode, modify player's inventory forms
  10.         if not playerdata[pname]['gamemode'] == "Creative" then
  11.         updategamemode(pname)
  12.         end
  13.         updategamemode(pname)
  14.     end
  15. end)
  16. -- Create detached creative inventory after loading all mods
  17. function updategamemode(pname)
  18.     playerdata = load_player_data()
  19.     if playerdata[pname]['gamemode'] == "Creative" then
  20.     local player = minetest.env:get_player_by_name(pname)
  21.     local inv = minetest.create_detached_inventory("creative", {
  22.         allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
  23.                 return count
  24.         end,
  25.         allow_put = function(inv, listname, index, stack, player)
  26.             return 0
  27.         end,
  28.         allow_take = function(inv, listname, index, stack, player)
  29.                 return -1
  30.         end,
  31.         on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
  32.         end,
  33.         on_put = function(inv, listname, index, stack, player)
  34.         end,
  35.         on_take = function(inv, listname, index, stack, player)
  36.             print(player:get_player_name().." takes item from creative inventory; listname="..dump(listname)..", index="..dump(index)..", stack="..dump(stack))
  37.             if stack then
  38.                 print("stack:get_name()="..dump(stack:get_name())..", stack:get_count()="..dump(stack:get_count()))
  39.             end
  40.         end,
  41.     })
  42.     local creative_list = {}
  43.     for name,def in pairs(minetest.registered_items) do
  44.         if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0)
  45.                 and def.description and def.description ~= "" then
  46.             table.insert(creative_list, name)
  47.         end
  48.     end
  49.     table.sort(creative_list)
  50.     inv:set_size("main", #creative_list)
  51.     for _,itemstring in ipairs(creative_list) do
  52.         inv:add_item("main", ItemStack(itemstring))
  53.     end
  54.     creative_inventory.creative_inventory_size = #creative_list
  55.     print("creative inventory size: "..dump(creative_inventory.creative_inventory_size))
  56.         creative_inventory.set_creative_formspec(player, 1, 1)
  57.  
  58.  
  59.     -- Create the trash field
  60.     local trash = minetest.create_detached_inventory("creative_trash", {
  61.         -- Allow the stack to be placed and remove it in on_put()
  62.         -- This allows the creative inventory to restore the stack
  63.         allow_put = function(inv, listname, index, stack, player)
  64.                 return stack:get_count()
  65.         end,
  66.         on_put = function(inv, listname, index, stack, player)
  67.             inv:set_stack(listname, index, "")
  68.         end,
  69.     })
  70.     trash:set_size("main", 1)
  71.    
  72.     else
  73.    
  74.     local player = minetest.env:get_player_by_name(pname)
  75.     creative_inventory.set_creative_formspec(player, 1, 1)
  76.  
  77.     end
  78. end
  79. creative_inventory.set_creative_formspec = function(player, start_i, pagenum)
  80. playerdata = load_player_data()
  81. if playerdata[player:get_player_name()]['gamemode'] == "Creative" then
  82.     pagenum = math.floor(pagenum)
  83.     local pagemax = math.floor((creative_inventory.creative_inventory_size-1) / (6*4) + 1)
  84.     player:set_inventory_formspec("size[13,7.5]"..
  85.             --"image[6,0.6;1,2;player.png]"..
  86.             "list[current_player;main;5,3.5;8,4;]"..
  87.             "list[current_player;craft;8,0;3,3;]"..
  88.             "list[current_player;craftpreview;12,1;1,1;]"..
  89.             "list[detached:creative;main;0.3,0.5;4,6;"..tostring(start_i).."]"..
  90.             "label[2.0,6.55;"..tostring(pagenum).."/"..tostring(pagemax).."]"..
  91.             "button[0.3,6.5;1.6,1;creative_prev;<<]"..
  92.             "button[2.7,6.5;1.6,1;creative_next;>>]"..
  93.             "label[5,1.5;Trash:]"..
  94.             "list[detached:creative_trash;main;5,2;1,1;]")
  95.     player:get_inventory():set_width("craft", 3)
  96.         player:get_inventory():set_size("craft", 9)
  97.  
  98. elseif playerdata[player:get_player_name()]['gamemode'] == "Survival" then
  99. player:set_inventory_formspec("size[8,7.5;]"..
  100.             "image[1,0.6;1,2;player.png]"..
  101.             "list[current_player;main;0,3.5;8,4;]"..
  102.             "list[current_player;craft;4,0.5;2,2;]"..
  103.             "list[current_player;craftpreview;6.5,1;1,1;]")
  104. end
  105. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement