init.lua 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. -- MeseCraft Game module: mesecraft_binoculars
  2. -- This version is forked from the Minetest Game mod "binoculars".
  3. -- See README.txt for licensing and other information.
  4. mesecraft_binoculars = {}
  5. -- Load support for MT game translation.
  6. local S = minetest.get_translator("mesecraft_binoculars")
  7. -- Detect creative mod
  8. local creative_mod = minetest.get_modpath("creative")
  9. -- Cache creative mode setting as fallback if creative mod not present
  10. local creative_mode_cache = minetest.settings:get_bool("creative_mode")
  11. -- Update player property
  12. -- Global to allow overriding
  13. function mesecraft_binoculars.update_player_property(player)
  14. local creative_enabled =
  15. (creative_mod and creative.is_enabled_for(player:get_player_name())) or
  16. creative_mode_cache
  17. local new_zoom_fov = 0
  18. if player:get_inventory():contains_item(
  19. "main", "mesecraft_binoculars:binoculars") then
  20. new_zoom_fov = 10
  21. elseif creative_enabled then
  22. new_zoom_fov = 15
  23. end
  24. -- Only set property if necessary to avoid player mesh reload
  25. if player:get_properties().zoom_fov ~= new_zoom_fov then
  26. player:set_properties({zoom_fov = new_zoom_fov})
  27. end
  28. end
  29. -- Set player property 'on joinplayer'
  30. minetest.register_on_joinplayer(function(player)
  31. mesecraft_binoculars.update_player_property(player)
  32. end)
  33. -- Cyclic update of player property
  34. local function cyclic_update()
  35. for _, player in ipairs(minetest.get_connected_players()) do
  36. mesecraft_binoculars.update_player_property(player)
  37. end
  38. minetest.after(4.7, cyclic_update)
  39. end
  40. minetest.after(4.7, cyclic_update)
  41. -- Binoculars item
  42. minetest.register_craftitem("mesecraft_binoculars:binoculars", {
  43. description = S("Binoculars") .. "\n" .. S("Use with 'Zoom' key"),
  44. inventory_image = "mesecraft_binoculars.png",
  45. stack_max = 1,
  46. on_use = function(itemstack, user, pointed_thing)
  47. mesecraft_binoculars.update_player_property(user)
  48. end,
  49. })
  50. -- Crafting
  51. minetest.register_craft({
  52. output = "mesecraft_binoculars:binoculars",
  53. recipe = {
  54. {"default:obsidian_glass", "", "default:obsidian_glass"},
  55. {"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"},
  56. {"default:obsidian_glass", "", "default:obsidian_glass"},
  57. }
  58. })