本帖最后由 1582952890 于 2017-9-17 07:20 编辑
简介:
获取一个物品的名字一直是一个很麻烦的事情,Bukkit/Spigot没有提供相对的API。之前
这里有一个实现,但是只支持英文,而且对于一些特殊的物品(药水,怪物蛋等)没有支持。所以这个API诞生了(其实这个API一年前就想搞了,一直没开工/w\)。
在之后的更新中加入了获取生物、附魔、附魔等级名字的功能。
这个API为插件提供了获取物品名字的能力,能够根据玩家客户端使用的语言发送相应语言的物品名称(使用的是原版的语言文件,一共
90个)。目前该API只支持
原版物品和生物。在1.4.0更新中,服主和插件作者已经可以自定义语言条目了,具体请看后文(之后版本中可能就使用这一功能提供mod支持)。
从现在1.2.0.1-1.7.10的版本起,该插件已经能够工作在Cauldron/KCauldron服务器上了,并且对于原版的物品和生物工作是正常的。只不过可能花费时间长一点。当然,对于mod里面的物品也不会崩溃,但是只能够返回一个自动生成的Material的名字,如果你有好的想法解决mod支持这个问题可以告诉我。
我仍然还是推荐插件作者用
- getServer().getName().contains("Cauldron") // JavaPlugin 类中
复制代码来检测一下环境。
Demo:
目前版本采用HashMap和Enum(其实还是HashMap)来管理和获取语言文件。大概需要100-250 ms来加载所有语言文件,需要50-300 μs来获取一个名字(开服第一次获取时间可能长一点(大概1ms左右),包括反射获取客户端语言的时间)。如果你有更高效的方法请在Github上发PR或者Issues。
当前构建状态:
资源:
使用:
- 如果你是一个服主:
如果有插件需要本插件作为前置,只要把本插件(无任何后缀的版本)下载下来放到
plugins/文件夹里去就行了。本插件单独使用
无任何功能!(除非你想凑数什么的/w\)
本插件主要版本为1.12,如果你使用的是Minecraft 1.7.10或1.8.x或1.9.4或1.10.x或1.11.x,请下载后缀为1.7.10或1.8.x或1.9.x或1.10.x或1.11.x的版本!(暂无计划支持更低的版本,如果需要请自行更改编译)
设置:
- # 当一个语言下的名字不存在时,将会采用该语言下的名字。默认为英语。
- FallbackLanguage=en_us
复制代码 |
修改语言条目的教程:
- 首先你需要先运行一下插件,让插件生成lang文件夹和README.txt
- 接下来进入plugins/LangUtils/lang/文件夹
- 如果你英文在初中水平左右请直接阅读README.txt
- 创建你所需要改的语言文件,如果你要修改英文的,那就创建en_US.lang,如果要修改中文的,那就创建zh_CN.lang。你到README.txt可以找到一个列表的有效名称
- 打开对应的语言文件,开始编辑
- 范例,修改已有条目:tile.chest.name=钻石箱子
- 范例,添加新条目(注意是Material的名字):DIAMOND_CHEST=钻石箱子
|
- 如果你是一个开发者:
首先,请把该插件加到你IDE的Build Path里。如果你想要源码和Javadoc,我提供了sources和javadoc,至于怎么使用请参考各自IDE的说明。
接下来,添加插件的依赖:
将下面这段代码加到你的plugin.yml里面去:
如果你的插件有多个依赖,用逗号(英文)隔开:
- depend: [LangUtils, Vault]
复制代码 或者也可以添加为软依赖:
|
如果你使用了Gradle或者Maven:
Gradle:
本API使用的也是Gradle,所以更推荐Gradle。添加以下代码到你的build.gradle文件里:
- repositories {
- maven {
- url 'https://raw.github.com/MascusJeoraly/LanguageUtils/mvn-repo/'
- }
- }
- dependencies {
- compile group: 'com.meowj', name: 'LangUtils', version: '1.9' // 请检查最新版本
- }
复制代码 Maven:
添加以下代码到你的pom.xml里:
- <repositories>
- <repository>
- <id>lang-utils-repo</id>
- <url>https://raw.github.com/MascusJeoraly/LanguageUtils/mvn-repo/</url>
- </repository>
- </repository>
- <dependencies>
- <dependency>
- <groupId>com.meowj</groupId>
- <artifactId>LangUtils</artifactId>
- <!--请检查最新版本 -->
- <version>1.9</version>
- </dependency>
- </dependencies>
复制代码 |
接下来是一些功能的对应方法,你也可以去看这个
示例插件:
1. 获取一个物品显示的名字(包括玩家自己自定义的名字)(locale是类似于en_US或者zh_CN这样的):
- LanguageHelper.getItemDisplayName(itemStack, locale);
- LanguageHelper.getItemDisplayName(itemStack, player);
复制代码
2. 获取物品的名字(不包括玩家自定义的名字):
- LanguageHelper.getItemName(itemStack, locale);
- LanguageHelper.getItemName(itemStack, player);
复制代码
3. 获取物品未被本地化的名字(Unlocalized Name,类似于tile.dirt.name这样的):
- LanguageHelper.getItemUnlocalizedName(itemStack);
复制代码
4. 将未被本地化的名字翻译成本地化的名字:
- LanguageHelper.translateToLocal(unlocalizedName, locale);
复制代码
5.获取生物非本地化的名字:
- LanguageHelper.getEntityUnlocalizedName(entity);
- LanguageHelper.getEntityUnlocalizedName(entityType);
复制代码
6. 获取生物本地化的名字:
- LanguageHelper.getEntityName(entity, locale);
- LanguageHelper.getEntityName(entity, player);
- LanguageHelper.getEntityName(entityType, locale);
- LanguageHelper.getEntityName(entityType, player);
复制代码
7. 获取生物显示的名字(包括自定义的名字):
- LanguageHelper.getEntityDisplayName(entity, locale);
- LanguageHelper.getEntityDisplayName(entity, player);
复制代码 当然,如果你只想要英语的名字也可以用这个:
8. 获取玩家正在使用的语言(返回的是locale):
- LocaleHelper.getPlayerLanguage(player);
复制代码
9. 获取附魔非本地化名字
- LanguageHelper.getEnchantmentUnlocalizedName(enchantment);
复制代码
10. 获取附魔名字
- LanguageHelper.getEnchantmentName(enchantment, player);
- LanguageHelper.getEnchantmentName(enchantment, locale);
复制代码
11. 获取附魔显示的名字(包括等级)
- LanguageHelper.getEnchantmentDisplayName(enchantment, level, player);
- LanguageHelper.getEnchantmentDisplayName(enchantment, level, locale);
- LanguageHelper.getEnchantmentDisplayName(entry, level, player);
- LanguageHelper.getEnchantmentDisplayName(entry, level, locale);
复制代码 其中entry是Map.Entry<Enchantment, Integer>类型的
12. 获取附魔等级未本地化名字
- LanguageHelper.getEnchantmentLevelUnlocalizedName(level);
复制代码
13. 获取附魔等级名字
- LanguageHelper.getEnchantmentLevelName(level, player);
- LanguageHelper.getEnchantmentLevelName(level, locale);
复制代码
14. 注册语言条目:
- LanguageRegistry.INSTANCE.registerEntry(lang, unlocalizedName, localizedName);
复制代码
|
如果你想对本API贡献代码:
首先你最好去安装Gradle,因为本插件使用Gradle来管理代码。如果你不想安装Gradle,下面的指令请将gradle改为gradlew(Windows)或者./gradlew(Linux, 如果没权限先运行chmod +x gradlew).
构建:
- [切换到工程的目录]
- $ gradle build
复制代码 你可以在build/libs内找到构建后的文件.
运行测试服务器:
首先你需要获取一份服务端,你可以使用Spigot官方的BuildTools,也可以在这里下载.
你应该能的到一份文件名类似于spigot-1.9.4-R0.1-SNAPSHOT.jar的文件.将其重命名为Server.jar放到run/文件夹里(如果没有则自己创建一个)
之后运行:
JUnit测试:
生成开发环境工程文件:
- 如果你使用的是IntelliJ IDEA:如果你只想要一个Module,运行gradle ideaModule.
- 如果你是用的是Eclipse:
- [切换到工程目录]
- $ gradle eclipse
复制代码 如果有用其它IDE的,就凑合着看吧=w=.
Pull Requests:
如果你对插件有改进,请Fork我的工程,并给我发PR.
|
下载地址(3个都可以):
更新日志:
1.9:
1.7:
1.5.0:
1.3.0:
- 添加附魔和附魔等级支持(感谢 hexosse)
- 修复药水的Unit Test问题
1.2.0.1-1.7.10:
- 修复Cauldron/KCauldron的兼容问题
- 注意此版本对应的1.8.7主要版本仍然是1.2.0.
1.2.0:
1.1.1:
|
如果你喜欢这个工程,请在Github给这个工程Star. 如果有Bug请向我汇报.