的风格好
本帖最后由 的风格好 于 2019-6-23 17:40 编辑

如题,有一个仅在服务端安装的mod,需要为EntityPlayerMP 调用 sendMessage,发送信息。如何获取EntityPlayerMP的语言环境,在服务器本地化信息?

项目中写过这样一段代码,在idea Debug模式runServer情况下,能正常工作,但在相同版本的forge服务器下,会出现“java.lang.NoSuchFieldException: language”

Forge 版本 :forge-1.12.2-14.23.5.2768
  1.     private static String getLangType(EntityPlayerMP player) {
  2.         String langType;
  3.         try
  4.         {
  5.             Field playerLangField = player.getClass().getDeclaredField("language");
  6.             playerLangField.setAccessible(true);
  7.             langType = (String)playerLangField.get(player);
  8.         }
  9.         catch(Exception e)
  10.         {
  11.             langType = "en_us";
  12.             e.printStackTrace();
  13.         }
  14.         return langType;
  15.     }
复制代码


部分EntityPlayerMP的代码
  1. package net.minecraft.entity.player;
  2. public class EntityPlayerMP extends EntityPlayer implements IContainerListener
  3. {
  4.     private static final Logger LOGGER = LogManager.getLogger();
  5.     private String language = "en_US";
  6.     /** The NetServerHandler assigned to this player by the ServerConfigurationManager. */
  7.     public NetHandlerPlayServer connection;
  8.     /** Reference to the MinecraftServer object. */
  9. ........
  10. }
复制代码




的风格好
找到原因了,因为minecraft代码被混淆,所以"language"实际对应的字段名为“field_71148_cg”。
  1.     private static String getLangType(EntityPlayerMP player) {
  2.         String langType;
  3.         try
  4.         {
  5.             Field playerLangField = EntityPlayerMP.class.getDeclaredField("field_71148_cg");
  6.             playerLangField.setAccessible(true);
  7.             langType = (String)playerLangField.get(player);
  8.         }
  9.         catch(Exception e)
  10.         {
  11.             langType="en_us";
  12.             e.printStackTrace();
  13.         }
  14.         return langType;
  15.     }
复制代码

caizhong3
的风格好 发表于 2019-6-23 17:35
找到原因了,因为minecraft代码被混淆,所以"language"实际对应的字段名为“field_71148_cg”。
...

请教一下  楼主 在服务端是如何进行获取相应语言的本地化文本的

的风格好
caizhong3 发表于 2019-6-27 15:06
请教一下  楼主 在服务端是如何进行获取相应语言的本地化文本的

我的实现是模仿minecraft做了一个本地化工具,服务器启动时从文件里读取文本,需要翻译时,从内存中调用。

第一页 上一页 下一页 最后一页