如何使用导出乐
本帖最后由 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 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/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: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]