用户:MashKJo/1.12.2模组开发教程/11.高级物品和方块 - 前置概念:修订间差异

→‎I18n和ITextComponent:​ // Edit via Wikiplus
(// Edit via Wikiplus)
→‎I18n和ITextComponent:​ // Edit via Wikiplus
 
 
== I18n和ITextComponent ==
在模组开发中,我们时常会遇到这样一种需求:给某个玩家发送聊天栏信息,很简单,用<code>EntityPlayer#sendMessage</code>即可(注意不是sendStatusMessage),我们注意到这个方法接受一个ITextComponent,实际上出于本地化的需求与考虑,我们用的最多的该接口的实现是TextComponentTranslation。这个类的构造方法接受一个String——实际上就是用于充当该消息内容的本地化键名。我们在发送消息时,应该先判断逻辑端,否则消息会发送两次——由于我们处理逻辑一般是在逻辑服务端,因此发送消息一般也在这一端执行。
 
如果我们在发送消息之外的场景中,还有本地化的需求怎么办?答案是使用<code>net.minecraft.client.resources.I18n#format</code>,该方法返回一个本地化之后的String量,用法和TextComponentTranslation基本一样,但从该类的包名即可看出——该类只在物理客户端有意义,使用它时要尤其注意这一点。
 
另外,你或许也注意到了,无论是TextComponentTranslation的构造方法还是<code>I18n#format</code>,它都还可以接受一个Object变长参数,这实际上是为了满足一个需求:需要在本地化文本中插入动态的内容,具体用法类似于C语言中的printf函数,如字符串的占位符是<code>%s</code>。
 
== MinecraftServer ==
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,351

个编辑