债权人

债权人

一个 Hytale 插件和 Java 库,用于给模组创作者署名并提供已安装模组的信息。

生活质量

Creditor

Creditor 由 Hytale Workshop 设计并创建,源于一次关于服务器所有者无意(或在少数情况下故意)未对所用模组创作者给予认可的讨论。Creditor 添加了一个新的 /credits 命令,用于显示已安装模组及其创作者列表,以及清单中的其他元数据。

该模组可以作为 Java 库包含在你的模组中(具体过程如下所述),也可以由诚信的服务器所有者独立安装。当独立安装时,积分菜单会在右上角显示一个对勾徽章,向玩家表明服务器所有者正在积极选择支持模组制作者。如果该符号缺失,则说明该模组是作为其他已安装模组中的 Java 库传递式安装的,且服务器所有者并未选择为创作者署名。为了让社区受益最大化,请尽可能多的人将此功能打包到自己的模组中!

安装

Creditor 可以通过将 JAR 文件正常放入 mods 文件夹的方式作为模组安装在服务器上,但也可以作为 Java 库使用并打包在你的模组中。通过 Cursemaven 将 Creditor 添加到你的项目中:

repositories {
    maven { url "https://www.cursemaven.com" }
}

dependencies {
    implementation "curse.maven:creditor-1560961:<文件 ID>"
}

注意:<文件 ID> 是 CurseForge 上文件的 ID,找到你想使用的文件并复制其 URL 中的 ID:curseforge.com/hytale/mods/creditor/files/文件 ID 在这里

Creditor 需要作为 Hytale 插件进行初始化,因此在你的 Main.start()Main.setup() 方法中,分别运行 Creditor.start()Creditor.setup()

当你构建模组时,请确保使用 shadow 插件以确保依赖项与你的模组捆绑在一起:

plugins {
    idea
    java
    ...
    id("com.gradleup.shadow") version "8.3.6"
}

tasks {
    shadowJar {
        archiveClassifier.set("")

        manifest {
            attributes(
                    "Implementation-Title" to project.name,
                    "Implementation-Version" to project.version,
                    "Multi-Release" to "true"
            )
        }

        from("src/main/resources/hytale-assets") {
            exclude("manifest.json")
        }

        // 移除 JAR 中嵌套的 hytale-assets/ 副本(资源现在位于根目录)。
        // 嵌套副本仍存在于 build/resources/main/ 中以便与 deploy.sh 兼容。
        exclude("hytale-assets/**")

        // 排除签名文件(会导致问题)
        exclude("META-INF/*.SF")
        exclude("META-INF/*.DSA")
        exclude("META-INF/*.RSA")
        exclude("META-INF/LICENSE*")
        exclude("META-INF/NOTICE*")
    }

    build {
        dependsOn(shadowJar)
    }

    jar {
        enabled = false // 仅使用 shadowJar
    }
}

丰富的积分元数据

模组可以在其资源包中的 Server/Credits 下包含可选的积分元数据。这些资源会覆盖 /credits 页面上清单显示的字段,而清单仍作为后备信息。

示例:Server/Credits/my_mod.json

{
  "Plugin": "com.example:MyMod",
  "Description": {
    "MessageId": "myMod.myMod.description",
    "RawText": "我的模组添加了有用的服务器功能,并包含了自定义的积分元数据。"
  },
  "License": {
    "MessageId": "myMod.myMod.license",
    "RawText": "我的模组采用 MIT 许可证。"
  }
}