设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 1542|回复: 4

如何使用导出乐

[复制链接]

签到天数: 527 天

[LV.9]以坛为家II

发表于 2023/4/15 19:34 | 显示全部楼层 |阅读模式 |Google Chrome 83.0.4103.61|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
本帖最后由 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健)。

评分

参与人数 1樱币 +1 收起 理由
开心熊猫741 + 1 赞一个!

查看全部评分

[发帖际遇]: 一个袋子砸在了 Hileb 头上,Hileb 赚了 4 樱币. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

签到天数: 527 天

[LV.9]以坛为家II

 楼主| 发表于 2023/4/16 00:21 | 显示全部楼层 |Google Chrome 83.0.4103.61|Windows 10
本帖最后由 Hileb 于 2023/4/16 11:48 编辑

导出乐<进度> Ofstream Advancement

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

导出的格式为:

  1. [

  2. ...........

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

  14. ............

  15. ]

复制代码


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


本mod不导出没有图标或不显示的进度,例如mc原版中有488个进度,但是实际只导出了55个进度,以为mc原版存在433个功能性的配方书解锁进度,而这些进度以为没有图标或不显示而不被导出。
[发帖际遇]: Hileb 发帖时在路边捡到 5 樱币,偷偷放进了口袋. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 527 天

[LV.9]以坛为家II

 楼主| 发表于 2023/4/16 00:22 | 显示全部楼层 |Google Chrome 83.0.4103.61|Windows 10
导出乐<结构>
待补充
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 527 天

[LV.9]以坛为家II

 楼主| 发表于 2023/4/19 22:20 | 显示全部楼层 |Google Chrome 83.0.4103.61|Windows 10
本帖最后由 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不可以翻译的名字
       
  1. [{"name":"overworld","defaultId":0}]
复制代码

        对于1.16.5:
       
  1. [{
  2.                 "registerName": "minecraft:overworld"
  3.                 },
  4.                 {
  5.                 "registerName": "minecraft:overworld_caves"
  6.                 },
  7.                 {
  8.                 "registerName": "minecraft:the_nether"
  9.                 },
  10.                 {
  11.                 "registerName": "minecraft:the_end"
  12.                 }]
复制代码

                registerName即为注册名,没有翻译名和默认id。

效果(Potion)
        对于1.12.2:
       
  1. [
  2.                    {
  3.                         "chineseName": "隐身",
  4.                         "englishName": "Invisibility",
  5.                         "registerName": "minecraft:invisibility",
  6.                         "isBadEffect": false,
  7.                         "smallIcon":                                                 "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAA2ElEQVR42mNgIB/8h2J0Pro43cCgcRDYQi1ZXjBG56OLjzoIS1Thkh85DsKVqFHE1zbkgvGIchBKlBBhIc2LgUHjIIiB69dDMC4+LvW41Q1fBxFK1NijjIoOG3QOIteCkeMgsAHT4h3BmNiCEYsDqBsyg9lBEJyQAME4Kld0eQz9w8lBWBOpm9VSMMbFR8fD2kEoBmKxGK+D1RSjwZhmiXowOIisKMPj8OHrIBSHkZCo6dOWHkwOItSVBgN6RtmgcxDYguzsbDAmlj/qIBifng4ZtA4aWSNoAO/Mk3OvWnciAAAAAElFTkSuQmCC",
  8.         "largeIcon": "iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAACIklEQVR42u3dsQ3CMBBAURZgBAoaCkago2EJCugjdmAKNqBEGRGK9JdIFwc7el+60iHETxQWiM1m/X1HJrs+e30BBBBAAAkgASSAAAIIIAGkGYAcd9twsuuz17d9AAEEEEAAASSABBBAAAEEEECqA1B2AAMIIIAAEkACCCCAAAIIIAGkOoCVvv7n+QgHIIAAAgggASSAAAIIIIAAEkCaDKD2DfTDRIAAAggggAASQAABBBBAAAEEkKY84L6Pp/T60vdf/v4AAggggAACCCCAAAIIIIAAAggggNYCKHuQV/VBKGAAAQQQQAABBBBAAAEEEEAAAQSQc6JmNgAggAACCCCAAAIIIIAAAggggAACCKAJD/h1O4dTwUFiaQA+YQACCCCAAAIIIIAAAggggAACCCCABkDx3O/xFP7Duezrp98/QAABBBBAAAEEEEAAAQQQQAABBNBKgI3N5fQOp/T67AAEEEAAAQQQQAABBBBAAAEEEEAAOUgcZoYN/ivgw/4aDiAAAQQQQAABBBBAAAEEEEAAAQQQYG0cJC4AXAABBBBAAAEEEEACCCCAAAIIIMDa+EKZAAIIIIAAAkgACSCAAAIIIIC0zEFk0fUOEgECCCCABJAAAggggAACSABpGSBd14VT+3rbCxBAAAEEEEACSAABBBBAAAGkOgABAhBAAAEkgAQQQAABBBBAAkhtAJthPSAAASSABJAAAggggASQAGqhH43tN6is1UFDAAAAAElFTkSuQmCC"
  9.     }
  10.                 ]
复制代码

                isBadEffect,是否为负面效果。在Minecraft中,负面效果使用红色字体显示,其余为蓝色。
        对于1.16.5
                新增添了“potionType”,它是比isBadEffect更加详细的类型信息,但在1.16.5同时保留了isBadEffect。
                对于原版来说,potionType有三种:"neutral","harmful","beneficial"。但是不排除mod自定义的potionType,对此无法预知。

魔咒(Enchantment)
  1. [
  2.     {
  3.         "chineseName": "效率",
  4.         "englishName": "Efficiency",
  5.         "registerName": "minecraft:efficiency"
  6.     }
  7. ]
复制代码

[发帖际遇]: 一个袋子砸在了 Hileb 头上,Hileb 赚了 4 樱币. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 527 天

[LV.9]以坛为家II

 楼主| 发表于 2023/4/22 14:23 | 显示全部楼层 |Google Chrome 107.0.0.0|Windows 10
本帖最后由 Hileb 于 2023/4/22 14:38 编辑

测试:


配置:
[14:18:30] [main/INFO] [FML]: -- 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会使语言选项更改为英文(先更改为中文,重载资源,再更改为中文,重载资源)。
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2024/12/23 17:42 , Processed in 0.185070 second(s), 22 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表