init.lua 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. creative = {}
  2. minetest.register_privilege("creative", {
  3. description = "Allow player to use creative inventory",
  4. give_to_singleplayer = false
  5. })
  6. local creative_mode_cache = minetest.settings:get_bool("creative_mode")
  7. function creative.is_enabled_for(name)
  8. return creative_mode_cache or
  9. minetest.check_player_privs(name, {creative = true})
  10. end
  11. dofile(minetest.get_modpath("creative") .. "/inventory.lua")
  12. if creative_mode_cache then
  13. -- Dig time is modified according to difference (leveldiff) between tool
  14. -- 'maxlevel' and node 'level'. Digtime is divided by the larger of
  15. -- leveldiff and 1.
  16. -- To speed up digging in creative, hand 'maxlevel' and 'digtime' have been
  17. -- increased such that nodes of differing levels have an insignificant
  18. -- effect on digtime.
  19. local digtime = 42
  20. local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 256}
  21. minetest.register_item(":", {
  22. type = "none",
  23. wield_image = "wieldhand.png",
  24. wield_scale = {x = 1, y = 1, z = 2.5},
  25. range = 10,
  26. tool_capabilities = {
  27. full_punch_interval = 0.5,
  28. max_drop_level = 3,
  29. groupcaps = {
  30. crumbly = caps,
  31. cracky = caps,
  32. snappy = caps,
  33. choppy = caps,
  34. oddly_breakable_by_hand = caps,
  35. },
  36. damage_groups = {fleshy = 10},
  37. }
  38. })
  39. end
  40. -- Unlimited node placement
  41. minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
  42. return creative.is_enabled_for(placer:get_player_name())
  43. end)
  44. -- Don't pick up if the item is already in the inventory
  45. local old_handle_node_drops = minetest.handle_node_drops
  46. function minetest.handle_node_drops(pos, drops, digger)
  47. if not digger or not digger:is_player() then
  48. return
  49. end
  50. if not creative.is_enabled_for(digger:get_player_name()) then
  51. return old_handle_node_drops(pos, drops, digger)
  52. end
  53. local inv = digger:get_inventory()
  54. if inv then
  55. for _, item in ipairs(drops) do
  56. if not inv:contains_item("main", item, true) then
  57. inv:add_item("main", item)
  58. end
  59. end
  60. end
  61. end