service.lua 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. minetest.register_chatcommand("players", {
  2. description = "List all players currently online.",
  3. func = function(name, _)
  4. local onlineCount = #(minetest.get_connected_players())
  5. local listString = ""..onlineCount.." Online: "
  6. local iterated=1
  7. for _,connectedPlayer in ipairs(minetest.get_connected_players()) do
  8. local attr = better_nametags.get_playertag_attributes(connectedPlayer)
  9. if attr then
  10. listString=listString..minetest.colorize(attr.color, attr.text)
  11. else
  12. listString=listString..connectedPlayer:get_player_name()
  13. end
  14. if iterated < onlineCount then
  15. listString=listString..", "
  16. end
  17. iterated=iterated+1
  18. end
  19. core.chat_send_player(name, listString)
  20. end
  21. })
  22. better_nametags.update_nametag = function(player)
  23. local attr = better_nametags.get_playertag_attributes(player)
  24. local name = player:get_player_name()
  25. if not better_nametags.players[name]
  26. or better_nametags.players[name].text ~= attr.text
  27. or better_nametags.players[name].color ~= better_nametags.players[name].color
  28. then
  29. better_nametags.players[name] = attr
  30. player:set_nametag_attributes(attr)
  31. end
  32. end
  33. if minetestd then
  34. minetestd.playerctl.register_playerstep("better_nametags", {
  35. func = better_nametags.update_nametag,
  36. interval = 0.5
  37. })
  38. end
  39. function better_nametags.get_playertag_attributes(player)
  40. local pos = player:get_pos()
  41. local player_name = player:get_player_name()
  42. local tag = ""
  43. local highestWeight = -1
  44. local tagColor = "#FFFFFF"
  45. local tagName = player:get_player_name() or ""
  46. for _,registeredTag in pairs(better_nametags.tags) do
  47. if registeredTag.weight > highestWeight then
  48. if registeredTag.has(player) then
  49. tag = registeredTag.title
  50. highestWeight = registeredTag.weight
  51. end
  52. end
  53. end
  54. if better_nametags.tags[tag] then
  55. tagName = better_nametags.tags[tag].getName(player)
  56. tagColor = better_nametags.tags[tag].Color
  57. end
  58. return {
  59. text = tagName,
  60. color = tagColor
  61. }
  62. end