minecraft文档转成书
本帖最后由 cbbl 于 2024-4-17 05:58 编辑新人学习,代码有问题欢迎讨论指正
import pyperclip
def modified_width(char):
global width
char_width = {'%': 10, '^': 10, '&': 10, '*': 6, '(': 6, ')': 6, '_': 10, '-': 10, '+': 10, '=': 10, '{': 6,
'[': 6, '}': 6, ']': 6, '|': 2, '\\': 10, ';': 2, ':': 2, '"': 6, "'": 6, '<': 8, '>': 8, ',': 2,
'.': 2, '?': 10, '/': 10, 't': 6, 'i': 2, 'I': 6, 'f': 8, 'k': 8, 'l': 4, ' ': 6, ' ': 16, '”': 6,
'“': 6}
if char in char_width:# 半角符号 部分英文 空格
width += char_width
elif 0x20 <= ord(char) <= 0x7E:# 部分英文
width += 10
elif 0x4e00 <= ord(char) <= 0x9fff:# 汉字
width += (15 + 1)
elif 0x3000 <= ord(char) <= 0x303F:# 中文符号
if char == '…':
width += 14
else:
width += (15 + 1)
width += 2
def arch_pages(_page):# 归档page
global page
page = r'\\n'.join(_page)
page = f"'{{\"text\":\"{page}\"}}'"
pages.append(page)
page = []
# 书拆分成句子
with open("book.txt", "r", encoding="UTF-8") as f:# 需要转换的文档book.txt
char_list = []
line_list = []
while True:
para = f.readline()
if para:
# 处理上一段落末尾
if char_list:
line_list.append(''.join(char_list).strip('\n'))# 归档这一行
width = 0
if char_list:
modified_width(char)
char_list = []
for char in para:
modified_width(char)# 长度修正
if width > 228:
line_list.append(''.join(char_list).strip('\n'))# 归档这一行
width = 0
modified_width(char)
char_list =
else:
# 补充行列表
char_list.append(char)
if not para:
# 处理文章末尾
if char_list:
line_list.append(''.join(char_list).strip('\n'))# 归档这一行
width = 0
modified_width(char)
break
# 句子打包成页
i = 0
page = []
pages = []
for line in line_list:
i += 1
if i <= 14:
pass
else:
i = 1
arch_pages(page)
page.append(line)
if page:# 处理文章末页
arch_pages(page)
pages = ','.join(pages)
# 书籍信息
title = '书名'
author = 'cbbl'
display = '{Lore:["书籍介绍"]}'
version = '1.20'# 修改为需要导入的版本
if int(version.replace('1.', '')) <= 12:
number = ' 1 0 '
else:
number = ''
if int(version.replace('1.', '')) >= 15:
pass
else:
pages = pages.replace('"text"', r'\"text\"')
if int(version.replace('1.', '')) < 8:
print('该版本give指令仅支持空白成书')
else:
command = f'give @p written_book{number}{{pages:[{pages}],title:{title},author:{author},display:{display}}}'
command.replace(r'\\n', '')
pyperclip.copy(command)
print('指令已复制到剪贴板')
补充,游戏内指令输入长度有限制,可以用数据包方式导入指令
已修改一个版本号处理上的错误 很久没玩过minecraft啦 这个看着不错,学习了! 这个想法不错,等会试试 ???有点看不懂,是mc游戏存档吗?里面的书? hjxhjxjx 发表于 2024-4-16 12:22
???有点看不懂,是mc游戏存档吗?里面的书?
mc允许玩家用它自带的指令给予玩家修改好自定内容的成书物品,这个的作用是是把外部文字整合成游戏给定的格式以供导入游戏 这个不错,谢谢分享。
页:
[1]