MiaoLio
本帖最后由 MiaoLio 于 2023-3-5 19:31 编辑


  MultiLogin | 档案管理和外置共存

| 简介

    MultiLogin 是一个简单的实现 UUID 管理和多外置共存的插件

| 功能特性

  • 支持设置多达 128 个 Yggdrasil Service 同时共存
  • 鉴权代理、验证失败重试机制
  • 游戏内档案管理系统
  • 异步/同步皮肤修复机制
  • 支持接管 Floodgate


| 相关图片


测试皮肤修复功能和外置共存。

| 如何使用?

最低需要 Java 11,不需要安装 authlib-injector ,没有任何前置插件,也不需要添加和更改 JVM 参数

把大象装进冰箱需要几步?
  • 下载插件
  • 丢进 plugins
  • 启动服务器


| 外置配置模板和添加一个外置服务器

模板:
  1. #####################################################################
  2. #
  3. #  配置文件格式为 ‘YAML’,前往 ‘https://yaml.org/’ 查阅 YAML 配置语法
  4. #         NOTE: 此文件为 Yggdrasil Service 配置模板文件
  5. #
  6. #    BUG REPORTS:   https://github.com/CaaMoe/MultiLogin/issues
  7. #
  8. #####################################################################

  9. #####################################################################
  10. #
  11. #       注意,除了布尔值和整数、浮点数之外的配置,请使用引号包裹起来。
  12. #
  13. #          请不要在此文件下存放任何重要数据,文件将会自动覆盖!!
  14. #         此文件为中文完整示例文件,使用请复制到 services 目录下才能生效
  15. #
  16. #####################################################################


  17. # 此验证服务的 ID,用于识别验证服务的唯一标识。
  18. # 它不可以是重复的值,重复的值会导致数据错乱或丢失!!!
  19. #
  20. # 警告,请不要在使用中途更改它的值,更改它将会导致部分玩家的数据错乱或丢失!!!
  21. # 此值为必须值,取值范围为整数 0 ~ 127
  22. id: -1

  23. # 验证服务的别称,用于一些指令结果或其他用途的内容显示。
  24. #
  25. # 默认值 ‘Unnamed’
  26. name: 'Unnamed'

  27. # 验证服务类型,目前
  28. #
  29. # 请使用以下值:
  30. #    OFFICIAL                      - 官方 Yggdrasil Java 版账号验证服务(Yggdrasil 实现)。
  31. #    BLESSING_SKIN                 - Blessing Skin 的伪正版验证服务(Yggdrasil 实现)。
  32. #    CUSTOM_YGGDRASIL              - 自定义 Yggdrasil 伪正版验证服务(Yggdrasil 实现)。
  33. #    FLOODGATE                     - Geyser 的 Floodgate (Xbox账号)验证服务。
  34. serviceType: OFFICIAL

  35. # Yggdrasil 类型账号验证服务配置。
  36. #
  37. # 仅当 serviceType 为 任意Yggdrasil类型 时此值有效。
  38. yggdrasilAuth:

  39.   # Yggdrasil 在 hasJoined 阶段时请求是否追加用户 IP 信息。
  40.   # 此 IP 一般用于 Yggdrasil 的防代理检查。
  41.   #
  42.   # 理论上,开启了这个,服务器和玩家只要有一方开了代理访问验证服务器,
  43.   # 在玩家登录时 Yggdrasil 都会返回无效的会话而被拒绝登录。
  44.   #
  45.   # 本地测试时请保持此值为 false,否则可能返回无效的会话的登录结果。
  46.   #
  47.   # 默认值 ‘false’
  48.   trackIp: false

  49.   # 设置 Yggdrasil hasJoined 验证超时时间。
  50.   #
  51.   # 仅当 serviceType 为 任意Yggdrasil类型 时此值有效。
  52.   # 默认值 ‘10000’
  53.   timeout: 10000

  54.   # 设置 Yggdrasil hasJoined 网络错误时的重试次数。
  55.   #
  56.   # 默认值 ‘0’
  57.   retry: 0

  58.   # 设置 Yggdrasil hasJoined 重试请求延迟。
  59.   # 注意,过大的值可能会导致登录超时。
  60.   #
  61.   # 默认值 ‘0’
  62.   retryDelay: 0

  63.   # BLESSING_SKIN 专用设置。
  64.   #
  65.   # 仅当 serviceType 为 BLESSING_SKIN 时,此配置片段有效。
  66.   blessingSkin:

  67.     # 指定 Blessing Skin Yggdrasil API 地址。
  68.     apiRoot: 'https://example.com/api/yggdrasil'

  69.   # CUSTOM_YGGDRASIL 专用设置。
  70.   #
  71.   # 仅当 serviceType 为 CUSTOM_YGGDRASIL 时,此配置片段有效。
  72.   custom:

  73.     # 设置 Yggdrasil hasJoined 请求验证链接设置。
  74.     # 此节点需要指定完整的 hasJoined 请求链接。
  75.     #
  76.     # 占位变量列表:
  77.     #   序号     别称            简介
  78.     #   {0}      {username}    请求的 username
  79.     #   {1}      {serverId}    请求的 serverId
  80.     #   {2}      {ip}          请求的 ip(ipContent 节点值)
  81.     #
  82.     # 一些例子:
  83.     #      GET:  ‘https://example.com/session/minecraft/hasJoined?username={username}&serverId={serverId}{ip}’
  84.     #      GET:  ‘https://example.com/session/minecraft/hasJoined?username={0}&serverId={1}{2}’
  85.     #      GET:  ‘https://example.com/session/minecraft/hasJoined?username={username}&serverId={serverId}’
  86.     #      POST: ‘https://example.com/session/minecraft/hasJoined’
  87.     #
  88.     # 仅当 serviceType 为 CUSTOM_YGGDRASIL 时此值有效。
  89.     # 必须值。
  90.     url: 'https://example.com/session/minecraft/hasJoined?username={0}&serverId={1}{2}'

  91.     # 设置 Yggdrasil hasJoined 请求验证方式。
  92.     #
  93.     # 请使用以下值:
  94.     # GET      - 此方式被绝大多数验证服务器(包括官方)采用。
  95.     # POST     - 此方式被极少数验证服务器采用。
  96.     #
  97.     # 仅当 serviceType 为 CUSTOM_YGGDRASIL 时此值有效。
  98.     # 必须值。
  99.     method: 'GET'

  100.     # 设置 Yggdrasil hasJoined 的 url 和 postContent 节点 {ip} 变量内容。
  101.     # 此节点作用是使 ip 信息正常拼接到请求块中去。
  102.     #
  103.     # 占位变量列表:
  104.     #   序号     别称           简介
  105.     #   {0}     {ip}           请求的 ip(玩家 ip)
  106.     #
  107.     # 请注意,仅当 trackIp 节点为 ‘true’ 时此节点有效。
  108.     # 请求的 URL 对大小写敏感,请检查。
  109.     # 请留意字符串拼接的特殊值 '&' 和 ', '
  110.     #
  111.     # 一些例子:
  112.     #      GET:  ‘&ip={ip}’
  113.     #      POST: ‘, "ip":"{0}"’
  114.     #
  115.     # 仅当 serviceType 为 CUSTOM_YGGDRASIL 时此值有效。
  116.     # 必须值。
  117.     trackIpContent: '&ip={0}'

  118.     # 设置 Yggdrasil hasJoined 发送 POST 验证请求的内容。
  119.     # 目标验证服务器对请求内容的大小写敏感,请检查。
  120.     #
  121.     # 占位变量列表:
  122.     #   序号     别称           简介
  123.     #   {0}      {username}    请求的 username
  124.     #   {1}      {serverId}    请求的 serverId
  125.     #   {2}      {ip}          请求的 ip(ipContent 节点值)
  126.     #
  127.     # 一些例子:
  128.     #        ‘{"username":"{username}", "serverId":"{serverId}"{ip}}’
  129.     #        ‘{"username":"{username}", "serverId":"{serverId}"}’
  130.     #
  131.     # 仅当 serviceType 为 CUSTOM_YGGDRASIL 时此值有效。
  132.     # 且当 yggdrasilAuthMethod 值为 ’POST‘ 时,此值为必须值。
  133.     postContent: '{"username":"{0}", "serverId":"{1}"}'

  134.   # 设置 Yggdrasil hasJoined 代理。
  135.   authProxy:

  136.     # 指定代理类型
  137.     #
  138.     # 请使用以下值:
  139.     #     DIRECT      - 直接连接、或没有代理
  140.     #     HTTP        - 表示高级协议(如HTTP或FTP)的代理。
  141.     #     SOCKS       - 表示一个SOCKS (V4或V5)代理。
  142.     #
  143.     # 默认值 ‘DIRECT’
  144.     type: "DIRECT"

  145.     # 代理服务器地址
  146.     #
  147.     # 默认值 ‘127.0.0.1’
  148.     hostname: "127.0.0.1"

  149.     # 代理服务器端口
  150.     #
  151.     # 默认值 ‘1080’
  152.     port: 1080

  153.     # 代理鉴权用户名。
  154.     # 留空则不进行鉴权
  155.     #
  156.     # 默认值 ‘’
  157.     username: ""

  158.     # 代理鉴权密码。
  159.     #
  160.     # 默认值 ‘’
  161.     password: ""

  162. # 设置玩家第一次登录到这个服务器时,系统所分配给玩家的 UUID 生成规则。
  163. #
  164. # 请使用以下值:
  165. #    DEFAULT      - 使用验证服务提供的在线 UUID
  166. #    OFFLINE      - 使用玩家名字获取到的离线 UUID
  167. #    RANDOM       - 随机 UUID
  168. #
  169. # 请谨慎设置和修改此节点,避免增加日后维护的心智负担。
  170. # 默认值 ‘DEFAULT’
  171. initUUID: 'DEFAULT'

  172. # 是否为当前验证服务的玩家单独开启白名单功能。
  173. #
  174. # 默认值 ‘false’
  175. whitelist: false

  176. # 皮肤修复设定。
  177. skinRestorer:

  178.   # 皮肤修复模式。
  179.   #
  180.   # 此功能仅将不含有 Mojang 签名的皮肤使用第三方服务尝试合成含有 Mojang 签名的皮肤来使用。
  181.   # 请使用以下值:
  182.   #   OFF       - 关闭这个功能
  183.   #   LOGIN     - 占用登录时间进行皮肤修复操作(修复时间过长可能会导致登录超时)
  184.   #   ASYNC     - 登录后修复(修复成功后需要重新连接服务器)
  185.   #
  186.   # 皮肤修复服务器来自 ‘mineskin.org’
  187.   # 默认值 ‘OFF’
  188.   restorer: 'OFF'

  189.   # 皮肤修复方式。
  190.   #
  191.   # 请使用以下值:
  192.   #   URL        - 皮肤修复服务器将会主动获取验证返回的皮肤数据,请确保它能被皮肤修复服务器正确访问。(推荐使用)
  193.   #   UPLOAD     - 尝试直接上传至皮肤修复服务器,适用于皮肤修复服务器访问皮肤材质受阻的情况。
  194.   #
  195.   # 默认值 ‘URL’
  196.   method: 'URL'

  197.   # 设置请求超时时间。
  198.   # 默认值 ‘10000’
  199.   timeout: 10000

  200.   # 皮肤修复网络错误时的重试次数。
  201.   #
  202.   # 默认值 ‘2’
  203.   retry: 2

  204.   # 皮肤修复重试请求延迟。
  205.   # 过小的值会被皮肤修复服务器拒绝访问;
  206.   # 过大的值可能会导致登录超时。
  207.   #
  208.   # 默认值 ‘5000’
  209.   retryDelay: 5000

  210.   # 请求代理设置
  211.   proxy:
  212.     # 设置代理类型
  213.     #
  214.     # 请使用以下值:
  215.     #     DIRECT      - 直接连接、或没有代理
  216.     #     HTTP        - Represents proxy for high level protocols such as HTTP or FTP.
  217.     #     SOCKS       - Represents a SOCKS (V4 or V5) proxy.
  218.     #
  219.     # 默认值 ‘DIRECT’
  220.     type: "DIRECT"

  221.     # 代理服务器地址
  222.     #
  223.     # 默认值 ‘127.0.0.1’
  224.     hostname: "127.0.0.1"

  225.     # 代理服务器端口
  226.     #
  227.     # 默认值 ‘1080’
  228.     port: 1080

  229.     # 代理鉴权用户名。
  230.     # 留空则不进行鉴权
  231.     #
  232.     # 默认值 ‘’
  233.     username: ""

  234.     # 代理鉴权密码。
  235.     #
  236.     # 默认值 ‘’
  237.     password: ""
复制代码


例子:
配置 Minecraft 原版验证服务器:
  1. # Below, only the most basic configuration is provided.
  2. # You can refer to the template file to complete all configurations.

  3. # Please edit before use.
  4. id: -1

  5. name: 'Official'
  6. # Don't change it unless you really want to.
  7. serviceType: OFFICIAL
复制代码


配置 Littleskin 验证服务器:
  1. # Below, only the most basic configuration is provided.
  2. # You can refer to the template file to complete all configurations.

  3. # Please edit before use.
  4. id: -1

  5. name: 'Little Skin'
  6. # Don't change it unless you really want to.
  7. serviceType: BLESSING_SKIN
  8. yggdrasilAuth:
  9.   blessingSkin:
  10.     apiRoot: 'https://littleskin.cn/api/yggdrasil'
复制代码


配置 Floodgate:
  1. # Below, only the most basic configuration is provided.
  2. # You can refer to the template file to complete all configurations.

  3. # Before enabling the service, you need to set floodgateSupport to true in config.yml, otherwise it cannot be used.

  4. # Please edit before use.
  5. id: -1

  6. name: 'Bedrock'
  7. # Don't change it unless you really want to.
  8. serviceType: FLOODGATE
复制代码




| 命令和权限



| 下载地址




请前往 GitHub


本插件所用所有代码均为原创,不存在借用/抄袭等行为




| 更新日志



本帖排版使用了Material Design帖子主题规范中的排版

TheLone_
老早就在考虑这个问题了
一直找不到合适的插件解决
希望这个插件能有预期的效果

八木大蛇
这个ygg是指什么?

MiaoLio
八木大蛇 发表于 2021-1-1 21:51
这个ygg是指什么?

就是外置登入服务器

八木大蛇
MiaoLio 发表于 2021-1-1 23:56
就是外置登入服务器

感觉很强大 但是我不会用

剑气如虹一
你好,我使用插件后使用正版账号后进不去服务器,但是litt皮肤站可以,用正版后后台显示
[01:26:17] [Server thread/INFO] [minecraft/ServerLoginNetHandler]: Disconnecting moe.caa.multilogin.bukkit.yggdrasil.MLGameProfile@3dbebdbc[id=b8677d9f-c293-471b-98fe-f030a27eb9f3,name=Huaxidesu,properties={textures=[com.mojang.authlib.properties.Property@414790bb]},legacy=false] (/23333:2333): 您只能通过指定的验证方式登入游戏
[01:26:17] [Server thread/INFO] [minecraft/ServerLoginNetHandler]: moe.caa.multilogin.bukkit.yggdrasil.MLGameProfile@3dbebdbc[id=b8677d9f-c293-471b-98fe-f030a27eb9f3,name=Huaxidesu,properties={textures=[com.mojang.authlib.properties.Property@414790bb]},legacy=false] (/23333:2333) lost connection: 您只能通过指定的验证方式登入游戏
>

这是我的配置文件
  1. ###################################
  2. #       MultiLogin
  3. #              --config
  4. ###################################

  5. # 存放所有的Yggdrasil验证服务器,
  6. # 正版Yggdrasil在officialServices节点中单独设置。
  7. services:

  8.   # 插件标记名称,一旦设置请谨慎修改。
  9.   # official和multi值为保留关键词,请勿应用于此标记名称上,否则应用无效!
  10.   # 该标记作为识别用户的验证服务器,为系统标记.胡乱更改很有可能会导致系统无法验证身份。
  11.   # 您可以仿写此节点用来添加新的Yggdrasil验证服务器。
  12.   littleSkin:

  13.     # 验证服务器的别称,可以随意修改。
  14.     # 必填,不允许为空字符串。
  15.     name: "LS皮肤站"

  16.     # 验证服务器地址。
  17.     # 必填,不允许为空字符串。
  18.     url: "https://mcskin.littleservice.cn/api/yggdrasil"

  19.     # 转换UUID
  20.     # 当某名玩家首次在此节点所设置的验证服务器中验证通过后,游戏内的UUID会按照此节点所填写的规则来生成
  21.     # 目前只支持以下值:
  22.     #   DEFAULT   -使用Yggdrasil验证服务器提供的UUID
  23.     #   OFFLINE   -自动生成离线UUID(盗版UUID)
  24.     # 所有生成的结果均会缓存至swap_uuid.json中。
  25.     # 该值的优先级低于swap_uuid.json文件内的值。
  26.     # 请谨慎设置和修改该节点,避免增加日后维护的心智负担。
  27.     # 必填,不允许为无效的值。
  28.     convUuid: DEFAULT


  29.     # 是否为当前验证服务器单独设置白名单。
  30.     # 当某名玩家使用此节点所设置的验证服务器验证通过后,将会检查他是否具有登入到此服务器的白名单权限。
  31.     # 当全局白名单生效时,此节点无效。
  32.     whitelist: false


  33. # 正版验证服务器的别称,可以随意修改。
  34. # 必填,不允许为空字符串
  35. officialName: "正版"


  36. # 使用正版Yggdrasil验证服务器
  37. # 关闭将拒绝所有使用正版验证登入的玩家登入游戏
  38. officialServices: true

  39. # 是否单独为正版玩家开启白名单系统。
  40. # 当某名玩家使用正版验证服务器验证通过后,将会检查他是否具有登入到此服务器的白名单权限。
  41. # 当全局白名单生效时,此节点无效。
  42. officialServicesWhitelist: false

  43. # 正版转换UUID
  44. # 当某名玩家首次在正版验证服务器中验证通过后,游戏内的UUID会按照此节点所填写的规则来生成
  45. # 目前只支持以下值:
  46. #   DEFAULT   -使用Yggdrasil验证服务器提供的UUID
  47. #   OFFLINE   -自动生成离线UUID(盗版UUID)
  48. # 所有生成的结果均会缓存至swap_uuid.json中。
  49. # 该值的优先级低于swap_uuid.json文件内的值。
  50. # 请谨慎设置和修改该节点,避免增加日后维护的心智负担。
  51. # 必填,不允许为无效的值。
  52. officialConvUuid: DEFAULT

  53. # 服务器内是否阻止重名
  54. # 判定规则:服务器将会记录并且缓存玩家的登入数据,并更新账户的name,当有玩家登入到游戏中,系统会首先判断玩家的name是否存在被其他缓存用户占用。
  55. #    如若被占用,系统将会拒绝他的登入请求,直到name可用为止。
  56. noRepeatedName: true

  57. # 绝对的ID使用权
  58. # 当阻止重名生效时,通过此节点下定义的验证服务器验证的玩家都将享有绝对的ID使用权。
  59. # 即使用此节点所定义的验证服务器验证的用户,将会跳过重名检查,并且强制下线抢注者。
  60. # 抢注者若仍想登入游戏时必须更换游戏ID或等待当前ID有效。
  61. # 请不要轻易修改此节点,可能会导致一些莫名其妙的错误。
  62. safeId: ""

  63. # 设置验证服务器超时时间
  64. servicesTimeOut: 7000

  65. ##############
  66. #   Message
  67. ##############

  68. msgNoAdopt: "§c验证未能通过,请重试"
  69. msgNoChae: "§c您只能通过指定的验证方式登入游戏"
  70. msgRushName: "§c您的ID已被抢注,请重新设置您的ID"
  71. msgRushNameOnl: "§c请重新设置您的ID!"

  72. msgNoWhitelist: "§c您没有登入到此服务器的白名单权限"
  73. msgNoPermission: "§c你没有权限使用这条指令"
  74. msgInvCmd: "§c无效的命令"
  75. msgAddWhitelist: "§a已将%s添加至白名单"
  76. msgAddWhitelistAlready: "§c请勿重复将%s添加至白名单"
  77. msgDelWhitelistInGame: "§c管理员已移除您的白名单权限"
  78. msgDelWhitelist: "§a已移除%s的白名单"
  79. msgDelWhitelistAlready: "§c%s并不在白名单中"
  80. msgOpenWhitelist: "§a已开启白名单"
  81. msgOpenWhitelistAlready: "§c请勿重复开启白名单"
  82. msgCloseWhitelist: "§a已关闭白名单"
  83. msgCloseWhitelistAlready: "§c请勿重复关闭白名单"
  84. msgWhitelistListNoth: "§c白名单内没有玩家"
  85. msgWhitelistListN: "§f白名单内一共有%d名玩家:%s"

  86. msgYDQuery: "§f玩家 §e%s §f使用的登入方式为 §e%s"
  87. msgYDQueryNoRel: "§c没有查询到记录: %s"

  88. msgReload: "§a已重新加载配置文件"
  89. msgNoPlayer: "§c你不是一名实体玩家"
复制代码


请问我应该如何设置让正版玩家可以加入服务器,我的服务器版本是1.15.5arclight

MiaoLio
本帖最后由 MiaoLio 于 2021-1-6 08:56 编辑
剑气如虹一 发表于 2021-1-6 01:32
你好,我使用插件后使用正版账号后进不去服务器,但是litt皮肤站可以,用正版后后台显示

这是我的配置文件 ...

请提供一下user.json内容,理论上玩家在某个验证服务器验证通过后,以后就只能通过那种验证方式进入游戏了。这是账号保护的功能。
用来防止在多ygg的情况下出现重uuid账户而造成玩家财产损失

剑气如虹一
MiaoLio 发表于 2021-1-6 08:53
请提供一下user.json内容,理论上玩家在某个验证服务器验证通过后,以后就只能通过那种验证方式进入游戏了 ...

{
  "whitelist": false,
  "cacWhitelist": [],
  "data": [
    {
      "uuid": "b8677d9f-c293-471b-98fe-f030a27eb9f3",
      "name": "Huaxidesu",
      "yggServer": "littleSkin",
      "whitelist": false
    }
  ]
}
这里是我测试时储存的数据,我晚上试试删掉后用正版登录,请问如何设置才能让正版顶掉litt
是在这里填写正版吗
  1. safeId: ""
复制代码

(白天在上课,只能晚上做服务器

MiaoLio
本帖最后由 MiaoLio 于 2021-1-6 13:45 编辑
剑气如虹一 发表于 2021-1-6 12:51
{
  "whitelist": false,
  "cacWhitelist": [],

数据文件缓存了UID为“b8677d9f-c293-471b-98fe-f030a27eb9f3”的玩家所使用的登入服务器为littleSkin,该UID的玩家也就只能使用littleSkin登入游戏(账号保护),所以使用正版登入会被踢出游戏。

如果你存在有两个UUID一样的账户(?),那也就只能使用其中一种验证方式登入游戏了。


safeId节点存在的意义就是为了防止在多Ygg的情况下有玩家抢注游戏ID,致使某一方无法登入游戏。正版玩家改名的缓冲期为 30

剑气如虹一
MiaoLio 发表于 2021-1-6 13:31
数据文件缓存了UID为“b8677d9f-c293-471b-98fe-f030a27eb9f3”的玩家所使用的登入服务器为littleSkin,该 ...

请问如何设置可以让正版用户顶掉已经记录litt皮肤站的玩家,并且不允许litt再次登录

MiaoLio
  1. {
  2.   "whitelist": false,
  3.   "cacWhitelist": [],
  4.   "data": [
  5.     {
  6.       "uuid": "b8677d9f-c293-471b-98fe-f030a27eb9f3",
  7.       "name": "Huaxidesu",
  8.       "yggServer": "official",
  9.       "whitelist": false
  10.     }
  11.   ]
  12. }
复制代码

MiaoLio
本帖最后由 MiaoLio 于 2021-1-6 16:43 编辑
剑气如虹一 发表于 2021-1-6 16:18
请问如何设置可以让正版用户顶掉已经记录litt皮肤站的玩家,并且不允许litt再次登录 ...
现在还不能设置,只能一个一个改
  1. {
  2.   "whitelist": false,
  3.   "cacWhitelist": [],
  4.   "data": [
  5.     {
  6.       "uuid": "b8677d9f-c293-471b-98fe-f030a27eb9f3",
  7.       "name": "Huaxidesu",
  8.       "yggServer": "official",
  9.       "whitelist": false
  10.     }
  11.   ]
  12. }
复制代码

剑气如虹一
MiaoLio 发表于 2021-1-6 16:23
现在还不能设置,只能一个一个改

多谢解答,不过我还是希望插件支持这个功能

第一页 上一页 下一页 最后一页