Hileb 发表于 2023/4/15 19:34

如何使用导出乐

本帖最后由 Hileb 于 2023/5/1 19:06 编辑

导出乐(OfstreamT)是Hileb制作的导出lib。
使用导出乐,你需要关注的只是三个事件(Event)。

OfstreamEvent.Register
OfstreamEvent.EnUs
OfstreamEvent.ZhCn

每次需要导出的时候,OfstreamT都会清除缓存,并依次发送这三个事件。
在Register时,你需要使用该event的register(OfstreamRegisterObject object)注册你需要注册的导出项。
在EnUs时,你可以通过getI18n()获得英语的翻译器,它的使用和I18n的静态方法相同,但是效果不同,此时你可以获取所需要的次要名称。
在ZhCn时,你可以通过getI18n()获得中文的翻译器,它的使用和I18n的静态方法相同,但是效果不同,,此时你可以获取所需要的主要名称。
整个过程中不存在资源的重新加载和语言选项的更换因此使用I18n并不被支持,推荐使用事件给予的I18n。
当然,后两个事件不是必要的,因为你可以通过LangHelper.getI18n生成你所需要的i18n。之所以有这两个事件是因为过去切换语言的操作造成的遗留。
当然,在1.0.0.1中,LangHelper会储存所new过的I18n,防止重复get使之重复new。如果你希望重复new,你可以使用getI18nForcedReload(String)
        对于1.16及以上,你需要输入getI18n的是Languge,你可以手动new一个,只需要关注code就行了,因为载入I18n时不需要code(例如"zh_cn")之外的东西。你也可以使用ZH_CN和EN_US这两。

IDataOfstream接口一般不需要你做什么,但是如果你有特殊需求,可以Override它,例如导出乐<进度>做的那样。但是你需要注意的是,hileb约定:
注册名统一为 String registerName
主要名称统一为 String chineseName
次要名称统一为 String englishName
大图标为 String largeIcon
小图标为String smallIcon


本mod中大部分地方均使用了public修饰,以便自由使用。你可以查阅源码获得更多信息。

DataManger
这是1.0.0.2引入的类,它方便你快速查重,分拣,给出OfstreamRegisterObject
OfstreamPlastic给出了使用DataManager的例子。
DataManager有三个方法:
    clear()清空
    register (String modId,IDataOfstream object)快速分练
    getOfstreamRegisterObject()制作OfstreamRegisterObject
        其中,构造函数的参数是导出项的类别,例如:物品是item,生物是entity,自由命名,作用于导出后的文件名,modId_item.json。
        对于1.16及以上,成功导出文件后会在聊天栏回馈玩家:“Ofstream XXX successfully!”其中XXX即为导出项类别。


鸣谢:
制作本mod时参考了irr,并使用了部分irr的相关代码。

触发导出,你只需要按下ofstream健(默认为O健)。

Hileb 发表于 2023/4/16 00:21

本帖最后由 Hileb 于 2023/4/16 11:48 编辑

导出乐<进度> Ofstream Advancement

由于进度是属于服务端的内容,玩家在取得进度前获取不了进度的信息,因此它是双端都要安装的。
建议在单人模式下使用。
模组添加了"getAllAdvancement"指令使玩家获得所有进度。它不需要任何参数,且它只能被玩家使用,并只作用在使用者。
当玩家获取进度后,可以进行导出。
玩家只能导出已获得的进度,这是客户端的局限性。但是玩家可以通过上面的指令获取所有进度。(也可以用 /advancement grant @p everything等效替代)
在触发导出乐的导出时导出。

导出的格式为:

[

...........

{
        "chineseName": "用钻石包裹我",
        "englishName": "Cover Me With Diamonds",
        "chineseDesc": "钻石盔甲能救人",
        "englishDesc": "Diamond armor saves lives",
        "registerName": "minecraft:story/shiny_gear",
        "parent": "minecraft:story/mine_diamond",
        "smallIcon": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAmUlEQVR42mNgGAWjgADQ1dX9j4yprX7wOQDdAOPXp8FYrqscjHEZjK4ehmHikpKSYDx4HYDLAHQH4DKIUv2D3wG4gpZYfUPHATCFMI3ogFgHols8+B2AKyroZvGgcQBMIXpUjBwHkJstSc52g94BMI10D/pB5wBiEyO6xcPPAeTioesASh1CscWDxgHoDiEWU72DMuAOGLYAAPI8sLXOCAMFAAAAAElFTkSuQmCC",
        "largeIcon": "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAABmklEQVR42u3bsQ3DIBBAUa9Bkw2oMlx2yGoeJUMkbSqIdIaczfsSbXTAq1C8bZIkSZIkSZIkSZIkSQdXa31HlvkBMD8A5gfA/ACYHwDzA2B+AMx/ngO4v/bmuj0fzTX6gKPz91bv90spzQUAAAAAAAAAAAAAAAAAAAAAADMvOHoAUQCjD2j1/QMAAAAAAAAAAAAAAAAAAAAAwMwDGP3Qkn1/AAAAAAAAAAAAAAAAAAAAAACQCUBvwN4Go2UHGL1gAAAAAAAAAAAAAAAAAAAAAACYCWD0Q5ELTn7BAAAAAAAAAAAAAAAAAAAAAADwVW/A6EMRAAAAAAAAAAAAAAAAAAAAAAAAkAfA1T8sOf2HHQAAAAAAAAAAAAAAAAAAAAAAkOihyEMPAAAAAAAAAAAAAAAAAAAAAACsAyD7H0aiFwwAAAAAAAAAAAAAAAAAAAAAAAD8DuDqCwAAAAAAAAAAAAAAAAAAAAAArgRgdSDLXzAAAAAAAAAAAAAAAAAAAAAAABwIJPtygwAIAAEgAASAABAAkiRJkiRJf+gD+q0L5k7pG+wAAAAASUVORK5CYII=",
        "rewards": "AdvancementRewards{experience=0, loot=[], recipes=[], function=null}"
}

............

]



"chineseName"是主要名称
"englishName"是次要名称
"chineseDesc"是主要描述
"englishDesc"是次要语言描述
"registerName"是注册名(或称为资源名)
"parent"上游进度的注册名,如果为""空字符串则代表根进度
"smallIcon"小图标Base64
"largeIcon"大图标Base64
"rewards"是原版设定的完成进度后的机制:
       AdvancementRewards{
                experience=奖励的经验值,
                loot=[], 完成后奖励的战利品表
                recipes=[], 完成后奖励的配方(解锁的配方书)
                function=完成后使用的函数(通常适用于数据包)
        }


本mod不导出没有图标或不显示的进度,例如mc原版中有488个进度,但是实际只导出了55个进度,以为mc原版存在433个功能性的配方书解锁进度,而这些进度以为没有图标或不显示而不被导出。

Hileb 发表于 2023/4/16 00:22

导出乐<结构>
待补充

Hileb 发表于 2023/4/19 22:20

本帖最后由 Hileb 于 2023/5/1 19:17 编辑

导出乐<聚合> Ofstream Plastic
OfstreamPlastic是一个导出“Potion”,“Dimension”,“Enchantment”的模组。
1.12.2依赖于OfstreamT1.0.0.2或更高的版本。仅客户端。
1.16.5依赖于OfstreamT116.0或更高的版本。双端皆需。

维度(Dimension)
        对于1.12.2:
                由于特性,只能获得不可翻译的名称和当前状态的id
                defaultId当前状态下的id,如果没有调配置文件或是别的东西,一般就为该维度的默认id。
                大部分模组都会提供更改该id的选项防止装车。
                name不可以翻译的名字
                [{"name":"overworld","defaultId":0}]
        对于1.16.5:
                [{
                "registerName": "minecraft:overworld"
                },
                {
                "registerName": "minecraft:overworld_caves"
                },
                {
                "registerName": "minecraft:the_nether"
                },
                {
                "registerName": "minecraft:the_end"
                }]
                registerName即为注册名,没有翻译名和默认id。

效果(Potion)
        对于1.12.2:
                [
               {
                        "chineseName": "隐身",
                      "englishName": "Invisibility",
                      "registerName": "minecraft:invisibility",
                        "isBadEffect": false,
                        "smallIcon":                                                 "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAA2ElEQVR42mNgIB/8h2J0Pro43cCgcRDYQi1ZXjBG56OLjzoIS1Thkh85DsKVqFHE1zbkgvGIchBKlBBhIc2LgUHjIIiB69dDMC4+LvW41Q1fBxFK1NijjIoOG3QOIteCkeMgsAHT4h3BmNiCEYsDqBsyg9lBEJyQAME4Kld0eQz9w8lBWBOpm9VSMMbFR8fD2kEoBmKxGK+D1RSjwZhmiXowOIisKMPj8OHrIBSHkZCo6dOWHkwOItSVBgN6RtmgcxDYguzsbDAmlj/qIBifng4ZtA4aWSNoAO/Mk3OvWnciAAAAAElFTkSuQmCC",
      "largeIcon": "iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAACIklEQVR42u3dsQ3CMBBAURZgBAoaCkago2EJCugjdmAKNqBEGRGK9JdIFwc7el+60iHETxQWiM1m/X1HJrs+e30BBBBAAAkgASSAAAIIIAGkGYAcd9twsuuz17d9AAEEEEAAASSABBBAAAEEEECqA1B2AAMIIIAAEkACCCCAAAIIIAGkOoCVvv7n+QgHIIAAAgggASSAAAIIIIAAEkCaDKD2DfTDRIAAAggggAASQAABBBBAAAEEkKY84L6Pp/T60vdf/v4AAggggAACCCCAAAIIIIAAAggggNYCKHuQV/VBKGAAAQQQQAABBBBAAAEEEEAAAQSQc6JmNgAggAACCCCAAAIIIIAAAggggAACCKAJD/h1O4dTwUFiaQA+YQACCCCAAAIIIIAAAggggAACCCCABkDx3O/xFP7Duezrp98/QAABBBBAAAEEEEAAAQQQQAABBNBKgI3N5fQOp/T67AAEEEAAAQQQQAABBBBAAAEEEEAAOUgcZoYN/ivgw/4aDiAAAQQQQAABBBBAAAEEEEAAAQQQYG0cJC4AXAABBBBAAAEEEEACCCCAAAIIIMDa+EKZAAIIIIAAAkgACSCAAAIIIIC0zEFk0fUOEgECCCCABJAAAggggAACSABpGSBd14VT+3rbCxBAAAEEEEACSAABBBBAAAGkOgABAhBAAAEkgAQQQAABBBBAAkhtAJthPSAAASSABJAAAggggASQAGqhH43tN6is1UFDAAAAAElFTkSuQmCC"
    }
                ]
                isBadEffect,是否为负面效果。在Minecraft中,负面效果使用红色字体显示,其余为蓝色。
        对于1.16.5
                新增添了“potionType”,它是比isBadEffect更加详细的类型信息,但在1.16.5同时保留了isBadEffect。
                对于原版来说,potionType有三种:"neutral","harmful","beneficial"。但是不排除mod自定义的potionType,对此无法预知。

魔咒(Enchantment)
[
    {
      "chineseName": "效率",
      "englishName": "Efficiency",
      "registerName": "minecraft:efficiency"
    }
]

Hileb 发表于 2023/4/22 14:23

本帖最后由 Hileb 于 2023/4/22 14:38 编辑

测试:


配置:
: -- System Details --
Details:
        Minecraft Version: 1.12.2
        Operating System: Windows 10 (amd64) version 10.0
        Java Version: 1.8.0_333, Oracle Corporation
        Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
        Memory: 137319120 bytes (130 MB) / 604504064 bytes (576 MB) up to 1881145344 bytes (1794 MB)
        JVM Flags: 0 total;
        IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
        FML:
        Loaded coremods (and transformers):
MixinBooter (!mixinbooter-4.2.jar)

        GL info: ' Vendor: 'Intel' Version: '4.6.0 - Build 27.20.100.8729' Renderer: 'Intel(R) UHD Graphics 630'


Mod列表:
| State   | ID               | Version      | Source                           | Signature |
|:--------- |:---------------- |:------------ |:-------------------------------- |:--------- |
| UCHIJAAAA | minecraft      | 1.12.2       | minecraft.jar                  | None      |
| UCHIJAAAA | mcp            | 9.42         | minecraft.jar                  | None      |
| UCHIJAAAA | mixinbooter      | 4.2          | minecraft.jar                  | None      |
| UCHIJAAAA | FML            | 8.0.99.99    | forgeSrc-1.12.2-14.23.5.2768.jar | None      |
| UCHIJAAAA | forge            | 14.23.5.2768 | forgeSrc-1.12.2-14.23.5.2768.jar | None      |
| UCHIJAAAA | itemrender       | @VERSION@    | irr.jar                        | None      |
| UCHIJAAAA | ofstream_t       | 1.0.0.2      | ofstream_t-1.0.0.2.jar         | None      |
| UCHIJAAAA | ofstream_fastirr | 1.0.0.0      | IdeallandFramework-master      | None      |
| UCHIJAAAA | idealland      | 0.4.9      | idealland-0.4.9.jar            | None      |


使用IRR的导出:
      1分15秒
使用OfstreamFastIRR mixin后的IRR导出:
             2秒

原因就在于OfstreamT LangHelper的I18n,使语言选项不再需要重载资源。
备注:原版IRR会使语言选项更改为英文(先更改为中文,重载资源,再更改为中文,重载资源)。
页: [1]
查看完整版本: 如何使用导出乐