WHCSRL 技术网

python可以开发我的世界服务端吗?

前几天突发奇想,想用python去开发一个我的世界服务器。

试着写了一点,看网上关于这部分的东西很少,于是决定发一个博客,把我遇到的一些问题分享给大家:

1.游戏与服务端通信使用的编码?

目前我找到的是cp437这个编码。

2.properties文件在python里读取方式?

我改进了一个大佬写的模块,可以用来读取properties后缀文件。

  1. import re
  2. import os
  3. import tempfile
  4. class Properties:
  5. def __init__(self, file_name):
  6. self.file_name = file_name
  7. self.properties = {}
  8. try:
  9. fopen = open(self.file_name, 'r')
  10. for line in fopen:
  11. line = line.strip()
  12. if line.find('=') > 0 and not line.startswith('#'):
  13. strs = line.split('=')
  14. self.properties[strs[0].strip()] = strs[1].strip()
  15. except Exception as e:
  16. raise e
  17. else:
  18. fopen.close()
  19. def has_key(self, key):
  20. return key in self.properties
  21. def get(self, key, default_value=''):
  22. if key in self.properties:
  23. return self.properties[key]
  24. return default_value
  25. def put(self, key, value):
  26. self.properties[key] = value
  27. replace_property(self.file_name, key + '=.*', key + '=' + value, True)
  28. def parse(file_name):
  29. return Properties(file_name)
  30. def replace_property(file_name, from_regex, to_str, append_on_not_exists=True):
  31. file = tempfile.TemporaryFile()
  32. if os.path.exists(file_name):
  33. r_open = open(file_name,'r')
  34. pattern = re.compile(r'' + from_regex)
  35. found = None
  36. for line in r_open:
  37. if pattern.search(line) and not line.strip().startswith('#'):
  38. found = True
  39. line = re.sub(from_regex, to_str, line)
  40. file.write(line)
  41. if not found and append_on_not_exists:
  42. file.write(' ' + to_str)
  43. r_open.close()
  44. file.seek(0)
  45. content = file.read()
  46. if os.path.exists(file_name):
  47. os.remove(file_name)
  48. w_open = open(file_name,'w')
  49. w_open.write(content)
  50. w_open.close()
  51. file.close()
  52. else:
  53. pass

示例调用代码

[注:读取模块名称为property.py且在同级目录]

  1. import property
  2. import os
  3. software_path = os.path.split(os.path.realpath(__file__))[0] # 读取软件目录
  4. config_mc_server_name="server.properties"
  5. config_mc_server_path = os.path.join(software_path, config_mc_server_name)#读取配置文件位置
  6. props = property.parse(config_mc_server_path) #读取文件
  7. motd=props.get('motd')#把server.properties的motd赋值到motd变量中

总结

总之感谢大家看完,因为是第一次写博客,所以难免有一些不当之处,以后我会继续改进!

这个服务端不知道能不能实现,如果有有经验的大佬可以提一些建议QwQ,感谢!

推荐阅读