mirror of
https://github.com/TriM-Organization/Musicreater.git
synced 2025-01-31 23:41:44 +08:00
增强多语言支持
This commit is contained in:
parent
ce441e4905
commit
32ae868c34
12
LICENSE
12
LICENSE
@ -92,16 +92,16 @@
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
Derivative Works a copy of this License and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
stating that You changed the files and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
the Derivative Works and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
@ -109,8 +109,8 @@
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
as part of the Derivative Works within the Source form or
|
||||
documentation, if provided along with the Derivative Works or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
@ -178,7 +178,7 @@
|
||||
|
||||
Copyright 2022 Eilles Wan (金羿)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
Licensed under the Apache License, Version 2.0 (the "License")
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
|
301
Musicreater.py
301
Musicreater.py
@ -1,6 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#! python3
|
||||
|
||||
|
||||
# W-YI 金羿
|
||||
# QQ 2647547478
|
||||
# 音·创 开发交流群 861684859
|
||||
@ -8,24 +9,27 @@
|
||||
# 版权所有 Team-Ryoun 金羿
|
||||
# 若需转载或借鉴 请附作者
|
||||
|
||||
|
||||
'''
|
||||
Copyright 2022 Eilles Wan (金羿)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
Licensed under the Apache License, Version 2.0 (the 'License')
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
distributed under the License is distributed on an 'AS IS' BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
'''
|
||||
|
||||
|
||||
# 代码写的并非十分的漂亮,还请大佬多多包涵;本软件源代码依照Apache软件协议公开
|
||||
|
||||
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
@ -36,6 +40,7 @@ import tkinter.filedialog
|
||||
import tkinter.messagebox
|
||||
import tkinter.simpledialog
|
||||
|
||||
from languages.lang import *
|
||||
from msctspt.threadOpera import NewThread
|
||||
from nmcsup.vers import VER
|
||||
|
||||
@ -48,7 +53,6 @@ __author__ = 'W-YI (金羿)'
|
||||
|
||||
|
||||
|
||||
from languages.lang import READABLETEXT
|
||||
|
||||
|
||||
|
||||
@ -127,7 +131,7 @@ dataset = [
|
||||
is_new_file = True
|
||||
is_save = True
|
||||
ProjectName = ''
|
||||
clearLog = False;
|
||||
clearLog = False
|
||||
NowMusic = 0
|
||||
root = tk.Tk()
|
||||
|
||||
@ -204,7 +208,7 @@ def __main__():
|
||||
from nmcsup.nmcreader import ReadFile as fileRead
|
||||
k = fileRead(fn)
|
||||
if k == False :
|
||||
tk.messagebox.showerror(title=READABLETEXT[0], message="找不到文件😢:{}".format(fn))
|
||||
tk.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[105].format(fn))
|
||||
return
|
||||
else:
|
||||
return k
|
||||
@ -214,7 +218,7 @@ def __main__():
|
||||
from nmcsup.nmcreader import ReadMidi as midiRead
|
||||
k = midiRead(midfile)
|
||||
if k == False :
|
||||
tk.messagebox.showerror(title=READABLETEXT[0], message="找不到文件或无法读取文件😢:{}".format(midfile))
|
||||
tk.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[105].format(midfile))
|
||||
return
|
||||
else:
|
||||
return k
|
||||
@ -226,12 +230,12 @@ def __main__():
|
||||
|
||||
|
||||
# 菜单命令
|
||||
print('加载菜单命令...');
|
||||
print('加载菜单命令...')
|
||||
|
||||
def exitapp():
|
||||
global is_save
|
||||
if is_save != True:
|
||||
if tkinter.messagebox.askyesno(title=READABLETEXT[1], message="您当前的项目已修改但未存储,是否先保存当前项目?"):
|
||||
if tkinter.messagebox.askyesno(title=READABLETEXT[1], message=READABLETEXT[106]):
|
||||
SaveProject()
|
||||
log('程序正常退出')
|
||||
|
||||
@ -279,7 +283,7 @@ def __main__():
|
||||
log('存储已有文件:{}'.format(ProjectName))
|
||||
with open(ProjectName, 'w', encoding='utf-8') as f:
|
||||
json.dump(dataset[0], f)
|
||||
tkinter.messagebox.showinfo(title=READABLETEXT[4], message="项目已经存储至:{}".format(ProjectName))
|
||||
tkinter.messagebox.showinfo(title=READABLETEXT[4], message=READABLETEXT[107].format(ProjectName))
|
||||
global is_save
|
||||
is_save = True
|
||||
|
||||
@ -289,13 +293,13 @@ def __main__():
|
||||
|
||||
def SaveAsProject():
|
||||
# 另存为项目
|
||||
fn = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[5], initialdir=r'./', filetypes=[("音·创工程文件", '.msct'), ("任意类型", '*')], defaultextension='Noname.msct')
|
||||
fn = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[5], initialdir=r'./', filetypes=[(READABLETEXT[108], '.msct'), (READABLETEXT[109], '*')], defaultextension='Noname.msct')
|
||||
if fn == None or fn =='':
|
||||
return
|
||||
ProjectName = fn
|
||||
with open(ProjectName, 'w', encoding='utf-8') as f:
|
||||
json.dump(dataset[0], f)
|
||||
tkinter.messagebox.showinfo(title=READABLETEXT[4], message="项目已经存储至:{}".format(ProjectName))
|
||||
tkinter.messagebox.showinfo(title=READABLETEXT[4], message=READABLETEXT[107].format(ProjectName))
|
||||
global is_save
|
||||
is_save = True
|
||||
|
||||
@ -306,10 +310,10 @@ def __main__():
|
||||
def openOldProject():
|
||||
global is_save
|
||||
if is_save != True:
|
||||
result = tkinter.messagebox.askyesno(title=READABLETEXT[1], message="您当前的项目已修改但未存储,是否先保存当前项目?")
|
||||
result = tkinter.messagebox.askyesno(title=READABLETEXT[1], message=READABLETEXT[106])
|
||||
if result:
|
||||
SaveProject()
|
||||
fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[6], initialdir=r'./', filetypes=[("函数音创工程文件", '.ry.nfc'), ("MMFM0.0.6版本工程文件", '.ry.mfm'), ("全部类型", '*')], multiple=True)
|
||||
fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[6], initialdir=r'./', filetypes=[(READABLETEXT[110], '.ry.nfc'), (READABLETEXT[111], '.ry.mfm'), (READABLETEXT[112], '*')], multiple=True)
|
||||
if fn == None or fn == '':
|
||||
return
|
||||
else:
|
||||
@ -322,10 +326,10 @@ def __main__():
|
||||
def openProject():
|
||||
global is_save
|
||||
if is_save != True:
|
||||
result = tkinter.messagebox.askyesno(title=READABLETEXT[1], message="您当前的项目已修改但未存储,是否先保存当前项目?")
|
||||
result = tkinter.messagebox.askyesno(title=READABLETEXT[1], message=READABLETEXT[106])
|
||||
if result:
|
||||
SaveProject()
|
||||
fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[7], initialdir=r'./', filetypes=[("音·创工程文件", '.msct'),("全部类型", '*')], multiple=True)
|
||||
fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[7], initialdir=r'./', filetypes=[(READABLETEXT[108], '.msct'),(READABLETEXT[112], '*')], multiple=True)
|
||||
if fn == None or fn == '':
|
||||
return
|
||||
else:
|
||||
@ -353,7 +357,7 @@ def __main__():
|
||||
def appabout():
|
||||
aabw = tk.Tk()
|
||||
aabw.title(READABLETEXT[9])
|
||||
aabw.geometry('400x600') # 像素
|
||||
aabw.geometry('550x600') # 像素
|
||||
tk.Label(aabw, text='', font=('', 15)).pack()
|
||||
tk.Label(aabw, text=READABLETEXT[10], font=('', 35)).pack()
|
||||
tk.Label(aabw, text=READABLETEXT[11].format(VER[1]+VER[0]), font=('', 15)).pack()
|
||||
@ -365,13 +369,18 @@ def __main__():
|
||||
#del pic
|
||||
tk.Label(aabw, text='', font=('', 5)).pack()
|
||||
tk.Label(aabw, text=READABLETEXT[12], font=('', 20)).pack()
|
||||
tk.Label(aabw, text=READABLETEXT[13], font=('', 20)).pack()
|
||||
tk.Label(aabw, text=READABLETEXT[14], font=('', 20)).pack()
|
||||
tk.Label(aabw, text='', font=('', 15)).pack()
|
||||
tk.Label(aabw, text=READABLETEXT[15], font=('', 15)).pack()
|
||||
for i in READABLETEXT[15]:
|
||||
tk.Label(aabw, text=i[0], font=('', 17 if i[1] else 15,'bold' if i[1] else '')).pack()
|
||||
tk.Label(aabw, text='', font=('', 5)).pack()
|
||||
if DEFAULTLANGUAGE != 'zh-CN':
|
||||
tk.Label(aabw, text=READABLETEXT[16], font=('', 15)).pack()
|
||||
tk.Label(aabw, text=READABLETEXT[17], font=('', 15)).pack()
|
||||
tk.Label(aabw, text=READABLETEXT[18], font=('', 15)).pack()
|
||||
for i in READABLETEXT['Translator']:
|
||||
tk.Label(aabw, text=i[0], font=('', 17 if i[1] else 15,'bold' if i[1] else '')).pack()
|
||||
def exitAboutWindow():
|
||||
aabw.destroy()
|
||||
|
||||
tk.Button(aabw,text=READABLETEXT[13],command=exitAboutWindow).pack()
|
||||
|
||||
aabw.mainloop()
|
||||
|
||||
@ -392,7 +401,7 @@ def __main__():
|
||||
|
||||
def FromMP3():
|
||||
log('从MP3导入音乐')
|
||||
mp3file = tkinter.filedialog.askopenfilename(title=READABLETEXT[20], initialdir=r'./', filetypes=[("钢琴声音的音频文件", '.mp3 .m4a'), ("全部类型", '*')], multiple=True)
|
||||
mp3file = tkinter.filedialog.askopenfilename(title=READABLETEXT[20], initialdir=r'./', filetypes=[(READABLETEXT[113], '.mp3 .m4a'), (READABLETEXT[112], '*')], multiple=True)
|
||||
if mp3file == None or mp3file == '':
|
||||
log('取消')
|
||||
return
|
||||
@ -426,7 +435,7 @@ def __main__():
|
||||
|
||||
def FromMidi():
|
||||
log('从midi导入音乐')
|
||||
midfile = tkinter.filedialog.askopenfilename(title=READABLETEXT[21], initialdir=r'./', filetypes=[("Midi文件", '.mid .midi'), ("全部类型", '*')], multiple=True)
|
||||
midfile = tkinter.filedialog.askopenfilename(title=READABLETEXT[21], initialdir=r'./', filetypes=[(READABLETEXT[114], '.mid .midi'), (READABLETEXT[112], '*')], multiple=True)
|
||||
if midfile == None or midfile == '':
|
||||
log('取消')
|
||||
return
|
||||
@ -455,7 +464,7 @@ def __main__():
|
||||
|
||||
def FromForm():
|
||||
log('从文本读入音轨')
|
||||
fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[22], initialdir=r'./', filetypes=[("文本文件", '.txt'), ("全部类型", '*')], multiple=True)
|
||||
fn = tkinter.filedialog.askopenfilename(title=READABLETEXT[22], initialdir=r'./', filetypes=[(READABLETEXT[115], '.txt'), (READABLETEXT[112], '*')], multiple=True)
|
||||
if fn == None or fn =='':
|
||||
log('取消')
|
||||
return
|
||||
@ -482,7 +491,7 @@ def __main__():
|
||||
|
||||
def FromText():
|
||||
log('写入音符至音轨')
|
||||
dat = tkinter.simpledialog.askstring(title=READABLETEXT[23], prompt="请输入音符:", initialvalue='`1 .2 C')
|
||||
dat = tkinter.simpledialog.askstring(title=READABLETEXT[23], prompt=READABLETEXT[14], initialvalue='`1 .2 C')
|
||||
if dat == None:
|
||||
return
|
||||
datas = []
|
||||
@ -571,12 +580,12 @@ def __main__():
|
||||
from nmcsup.trans import Cmd2World, Datas2BlkWorld, Notes2Player
|
||||
while True:
|
||||
try:
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入坐标:",initialvalue = '16 4 16')
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16')
|
||||
if dire == None or dire == '':
|
||||
return
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入!")
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./')
|
||||
@ -604,12 +613,12 @@ def __main__():
|
||||
from nmcsup.trans import Cmd2World, Datas2BlkWorld, Notes2Player
|
||||
while True:
|
||||
try:
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入坐标:",initialvalue = '16 4 16')
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16')
|
||||
if dire == None or dire == '':
|
||||
return;
|
||||
return
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入!")
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./')
|
||||
@ -634,17 +643,17 @@ def __main__():
|
||||
def MakeFuncPlayer():
|
||||
while True:
|
||||
try:
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入坐标:",initialvalue = '16 4 16')
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16')
|
||||
if dire == None or dire == '':
|
||||
return;
|
||||
return
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入!");
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[30], initialdir=r'./');
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[30], initialdir=r'./')
|
||||
if Outdire == None or Outdire == '':
|
||||
return;
|
||||
return
|
||||
else:
|
||||
Outdire = '{}/{}/'.format(Outdire,dataset[0]['mainset']['PackName'])
|
||||
from nmcsup.trans import Notes2Player
|
||||
@ -662,21 +671,21 @@ def __main__():
|
||||
from nmcsup.trans import Cmd2World, Note2Cmd
|
||||
while True:
|
||||
try:
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入坐标:",initialvalue = '16 4 16');
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16')
|
||||
if dire == None or dire == '':
|
||||
return;
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])];
|
||||
return
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入!");
|
||||
continue;
|
||||
break;
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./');
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./')
|
||||
if Outdire == None or Outdire == '':
|
||||
return;
|
||||
return
|
||||
else:
|
||||
Outdire+='/'+dataset[0]['mainset']['PackName']+'/';
|
||||
Outdire+='/'+dataset[0]['mainset']['PackName']+'/'
|
||||
with zipfile.ZipFile('./nmcsup/EptWorld.zip', 'r') as zipobj:
|
||||
zipobj.extractall(Outdire);
|
||||
zipobj.extractall(Outdire)
|
||||
for i in range(len(dataset[0]['musics'])):
|
||||
Cmd2World(Note2Cmd(dataset[0]['musics'][i]['notes'],dataset[0]['musics'][i]['set']['ScoreboardName'],dataset[0]['musics'][i]['set']['Instrument'],dataset[0]['mainset']['PlayerSelect'],True),Outdire,[dire[0],dire[1],dire[2]+i])
|
||||
del dire,Outdire
|
||||
@ -688,15 +697,15 @@ def __main__():
|
||||
from nmcsup.trans import Cmd2World, Note2Cmd
|
||||
while True:
|
||||
try:
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入坐标:",initialvalue = '16 4 16')
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16')
|
||||
if dire == None or dire == '':
|
||||
return;
|
||||
return
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入!");
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./');
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./')
|
||||
if Outdire == None or Outdire == '':
|
||||
return
|
||||
else:
|
||||
@ -714,20 +723,20 @@ def __main__():
|
||||
from nmcsup.trans import Cmd2World
|
||||
while True:
|
||||
try:
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入坐标:",initialvalue = '16 4 16')
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16')
|
||||
if dire == None or dire == '':
|
||||
return;
|
||||
return
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入!");
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./');
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./')
|
||||
if Outdire == None or Outdire == '':
|
||||
return;
|
||||
return
|
||||
else:
|
||||
Outdire+='/';
|
||||
Cmd2World(open(tkinter.filedialog.askopenfilename(title=READABLETEXT[31], initialdir=r'./', filetypes=[("我的世界指令函数文件", '.mcfunction'), ("全部类型", '*')], multiple=True)[0],'r',encoding='utf-8').readlines(),Outdire,dire)
|
||||
Outdire+='/'
|
||||
Cmd2World(open(tkinter.filedialog.askopenfilename(title=READABLETEXT[31], initialdir=r'./', filetypes=[(READABLETEXT[118], '.mcfunction'), (READABLETEXT[112], '*')], multiple=True)[0],'r',encoding='utf-8').readlines(),Outdire,dire)
|
||||
|
||||
|
||||
|
||||
@ -742,38 +751,38 @@ def __main__():
|
||||
from nmcsup.trans import Cmd2World
|
||||
while True:
|
||||
try:
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入执行链生成坐标:",initialvalue = '16 4 16');
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[119],initialvalue = '16 4 16')
|
||||
if dire == None or dire == '':
|
||||
return;
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])];
|
||||
return
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入。");
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[120])
|
||||
continue
|
||||
break
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./');
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./')
|
||||
if Outdire == None or Outdire == '':
|
||||
log('取消')
|
||||
return
|
||||
else:
|
||||
Outdire+='/';
|
||||
Outdire+='/'
|
||||
log('获得地图地址:'+Outdire)
|
||||
fileName = tkinter.filedialog.askopenfilename(title=READABLETEXT[31], initialdir=r'./', filetypes=[("我的世界指令函数文件", '.mcfunction'), ("全部类型", '*')], multiple=True)
|
||||
fileName = tkinter.filedialog.askopenfilename(title=READABLETEXT[31], initialdir=r'./', filetypes=[(READABLETEXT[118], '.mcfunction'), (READABLETEXT[112], '*')], multiple=True)
|
||||
if fileName == None or fileName == '':
|
||||
log('取消')
|
||||
return;
|
||||
return
|
||||
else:
|
||||
fileName = fileName[0]
|
||||
log('获得文件名:'+fileName)
|
||||
bigFile = open(fileName,'r',encoding='utf-8')
|
||||
parts = funSplit(bigFile)
|
||||
if parts == -1:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您的函数文件不大于一万条指令,无需进行分割操作。");
|
||||
return;
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[121])
|
||||
return
|
||||
log('创建函数文件夹')
|
||||
packName = fileName[len(fileName)-fileName[::-1].index('/'):fileName.index('.')]
|
||||
packDire = hans2pinyin(packName)
|
||||
try:
|
||||
os.makedirs(Outdire+'behavior_packs/'+packDire+'/functions/');
|
||||
os.makedirs(Outdire+'behavior_packs/'+packDire+'/functions/')
|
||||
except:
|
||||
log('已存在文件夹')
|
||||
log('创建manifest.json以及world_behavior_packs.json')
|
||||
@ -792,7 +801,7 @@ def __main__():
|
||||
f.write('{\n \'format_version\': 1,\n \'header\': {\n \'description\': \''+packName+' Pack : behavior pack\',\n \'version\': [ 0, 0, 1 ],\n \'name\': \''+packName+'Pack\',\n \'uuid\': \'' + str(behaviorUuid) + '\'\n },\n \'modules\': [\n {\n \'description\': \''+packName+' Pack : behavior pack\',\n \'type\': \'data\',\n \'version\': [ 0, 0, 1 ],\n \'uuid\': \'' + str(uuid.uuid4()) + '\'\n }\n ]\n}')
|
||||
cmdlist = []
|
||||
for i in parts :
|
||||
open(Outdire+'behavior_packs/'+packDire+'/functions/'+packDire+str(parts.index(i)+1)+'.mcfunction','w',encoding='utf-8').writelines(i);
|
||||
open(Outdire+'behavior_packs/'+packDire+'/functions/'+packDire+str(parts.index(i)+1)+'.mcfunction','w',encoding='utf-8').writelines(i)
|
||||
cmdlist.append('function '+packDire+str(parts.index(i)+1))
|
||||
Cmd2World(cmdlist,Outdire,dire)
|
||||
del cmdlist,behaviorUuid,Outdire,fileName,bigFile,parts,dire,packName,packDire
|
||||
@ -804,33 +813,33 @@ def __main__():
|
||||
from msctspt.transfer import note2bdx
|
||||
while True:
|
||||
try:
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入执行链生成相对坐标:",initialvalue = '0 0 0');
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[122],initialvalue = '0 0 0')
|
||||
if dire == None or dire == '':
|
||||
return;
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])];
|
||||
return
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入。");
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[120])
|
||||
continue
|
||||
break
|
||||
|
||||
fileName = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[32], initialdir=r'./', filetypes=[("FastBuilder结构文件", '.bdx'), ("全部类型", '*')], defaultextension=dataset[0]['mainset']['PackName']+'.bdx',initialfile=dataset[0]['mainset']['PackName']+'.bdx')
|
||||
fileName = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[32], initialdir=r'./', filetypes=[(READABLETEXT[123], '.bdx'), (READABLETEXT[112], '*')], defaultextension=dataset[0]['mainset']['PackName']+'.bdx',initialfile=dataset[0]['mainset']['PackName']+'.bdx')
|
||||
if fileName == None or fileName == '':
|
||||
log('取消')
|
||||
return;
|
||||
return
|
||||
|
||||
log('获得文件名:'+fileName)
|
||||
|
||||
res = note2bdx(fileName,dire,dataset[0]['musics'][NowMusic]['notes'],dataset[0]['musics'][NowMusic]['set']['ScoreboardName'],dataset[0]['musics'][NowMusic]['set']['Instrument'],dataset[0]['mainset']['PlayerSelect'])
|
||||
log('转换结束!\n'+str(res))
|
||||
tkinter.messagebox.showinfo(READABLETEXT[33],"转换结束!\n{}".format(str(res)))
|
||||
tkinter.messagebox.showinfo(READABLETEXT[33],READABLETEXT[124].format(str(res)))
|
||||
|
||||
|
||||
|
||||
|
||||
def wsPlay():
|
||||
from msctspt.transfer import note2webs
|
||||
spd = tkinter.simpledialog.askfloat(READABLETEXT[34],prompt="一秒,音乐走几拍?",initialvalue = '5.0')
|
||||
tkinter.messagebox.showinfo(title=READABLETEXT[35], message="按下确认后,在游戏中使用connect指令连接localhost:8080,即可播放")
|
||||
spd = tkinter.simpledialog.askfloat(READABLETEXT[34],prompt=READABLETEXT[125],initialvalue = '5.0')
|
||||
tkinter.messagebox.showinfo(title=READABLETEXT[35], message=READABLETEXT[126])
|
||||
note2webs(dataset[0]['musics'][NowMusic]['notes'],dataset[0]['musics'][NowMusic]['set']['Instrument'],spd,dataset[0]['mainset']['PlayerSelect'])
|
||||
|
||||
|
||||
@ -843,25 +852,25 @@ def __main__():
|
||||
from msctspt.transfer import note2RSworld
|
||||
while True:
|
||||
try:
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入坐标:",initialvalue = '16 4 16');
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16')
|
||||
if dire == None or dire == '':
|
||||
return;
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])];
|
||||
return
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入!");
|
||||
continue;
|
||||
break;
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./');
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./')
|
||||
if Outdire == None or Outdire == '':
|
||||
return;
|
||||
return
|
||||
else:
|
||||
Outdire+='/'+dataset[0]['mainset']['PackName']+'/';
|
||||
Outdire+='/'+dataset[0]['mainset']['PackName']+'/'
|
||||
with zipfile.ZipFile('./nmcsup/EptWorld.zip', 'r') as zipobj:
|
||||
zipobj.extractall(Outdire);
|
||||
zipobj.extractall(Outdire)
|
||||
for i in range(len(dataset[0]['musics'])):
|
||||
note2RSworld(Outdire,dire,dataset[0]['musics'][i]['notes'],dataset[0]['musics'][i]['set']['Instrument'])
|
||||
|
||||
del dire,Outdire;
|
||||
del dire,Outdire
|
||||
|
||||
|
||||
|
||||
@ -869,54 +878,54 @@ def __main__():
|
||||
from msctspt.transfer import note2RSworld
|
||||
while True:
|
||||
try:
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入坐标:",initialvalue = '16 4 16')
|
||||
dire = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[116],initialvalue = '16 4 16')
|
||||
if dire == None or dire == '':
|
||||
return;
|
||||
return
|
||||
dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入!");
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./');
|
||||
Outdire = tkinter.filedialog.askdirectory(title=READABLETEXT[29], initialdir=r'./')
|
||||
if Outdire == None or Outdire == '':
|
||||
return;
|
||||
return
|
||||
else:
|
||||
Outdire+='/';
|
||||
Outdire+='/'
|
||||
for i in range(len(dataset[0]['musics'])):
|
||||
note2RSworld(Outdire,dire,dataset[0]['musics'][i]['notes'],dataset[0]['musics'][i]['set']['Instrument'])
|
||||
del dire,Outdire;
|
||||
del dire,Outdire
|
||||
|
||||
|
||||
|
||||
|
||||
def world2RyStruct():
|
||||
outdir = tkinter.filedialog.askdirectory(title=READABLETEXT[36], initialdir=r'./');
|
||||
outdir = tkinter.filedialog.askdirectory(title=READABLETEXT[36], initialdir=r'./')
|
||||
if outdir == None or outdir == '':
|
||||
return;
|
||||
return
|
||||
else:
|
||||
outdir+='/';
|
||||
outdir+='/'
|
||||
while True:
|
||||
try:
|
||||
begp = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入区域选择的开始坐标:",initialvalue = '16 4 16')
|
||||
begp = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[127],initialvalue = '16 4 16')
|
||||
if begp == None or begp == '':
|
||||
return;
|
||||
return
|
||||
begp = [int(begp.split(' ')[0]), int(begp.split(' ')[1]), int(begp.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入!");
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
while True:
|
||||
try:
|
||||
endp = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt="请输入区域选择的结束坐标:",initialvalue = '16 4 16')
|
||||
endp = tkinter.simpledialog.askstring(title = READABLETEXT[28],prompt=READABLETEXT[128],initialvalue = '16 4 16')
|
||||
if endp == None or endp == '':
|
||||
return;
|
||||
return
|
||||
endp = [int(endp.split(' ')[0]), int(endp.split(' ')[1]), int(endp.split(' ')[2])]
|
||||
except:
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message="您输入的格式有误,请重新输入!");
|
||||
tkinter.messagebox.showerror(title=READABLETEXT[0], message=READABLETEXT[117])
|
||||
continue
|
||||
break
|
||||
isAir = tkinter.messagebox.askyesno(READABLETEXT[37],"所选区块导出时是否需要保留空气方块?")
|
||||
fileName = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[38], initialdir=r'./', filetypes=[("音·创结构文件", '.RyStruct'), ("全部类型", '*')], defaultextension='*.RyStruct',initialfile='*.RyStruct')
|
||||
isAir = tkinter.messagebox.askyesno(READABLETEXT[37],READABLETEXT[129])
|
||||
fileName = tkinter.filedialog.asksaveasfilename(title=READABLETEXT[38], initialdir=r'./', filetypes=[(READABLETEXT[130], '.RyStruct'), (READABLETEXT[112], '*')], defaultextension='*.RyStruct',initialfile='*.RyStruct')
|
||||
if fileName == None or fileName == '':
|
||||
log('取消')
|
||||
return
|
||||
@ -926,15 +935,15 @@ def __main__():
|
||||
try:
|
||||
with open(fileName,'w',encoding='utf-8') as f:
|
||||
json.dump(rys.RyStruct,f,sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False)
|
||||
tkinter.messagebox.showinfo(READABLETEXT[33],"文件已生成\n{}".format(fileName))
|
||||
tkinter.messagebox.showinfo(READABLETEXT[33],READABLETEXT[131].format(fileName))
|
||||
except:
|
||||
tkinter.messagebox.showerror(READABLETEXT[39],"文件无法生成\n{}\n{}".format(fileName,str(rys.RyStruct)))
|
||||
tkinter.messagebox.showerror(READABLETEXT[39],READABLETEXT[132].format(fileName,str(rys.RyStruct)))
|
||||
rys.closeLevel()
|
||||
|
||||
|
||||
|
||||
def world2BDX():
|
||||
tkinter.messagebox.showerror(READABLETEXT[0],"本功能尚未开发。")
|
||||
tkinter.messagebox.showerror(READABLETEXT[0],READABLETEXT[133])
|
||||
|
||||
|
||||
|
||||
@ -952,9 +961,9 @@ def __main__():
|
||||
#使用邮件反馈bug
|
||||
def sendBugReport():
|
||||
from msctspt.bugReporter import report
|
||||
name = tkinter.simpledialog.askstring(title = READABLETEXT[40],prompt="您的称呼")
|
||||
contact = tkinter.simpledialog.askstring(title = READABLETEXT[40],prompt="您的联系方式")
|
||||
describetion = tkinter.simpledialog.askstring(title = READABLETEXT[40],prompt="您对问题的描述")
|
||||
name = tkinter.simpledialog.askstring(title = READABLETEXT[40],prompt=READABLETEXT[134])
|
||||
contact = tkinter.simpledialog.askstring(title = READABLETEXT[40],prompt=READABLETEXT[135])
|
||||
describetion = tkinter.simpledialog.askstring(title = READABLETEXT[40],prompt=READABLETEXT[136])
|
||||
report(name,contact,describetion).emailReport()
|
||||
del name,contact,describetion
|
||||
|
||||
@ -969,12 +978,12 @@ def __main__():
|
||||
|
||||
|
||||
def ClearLog():
|
||||
global clearLog;
|
||||
clearLog = not clearLog;
|
||||
global clearLog
|
||||
clearLog = not clearLog
|
||||
if clearLog:
|
||||
tkinter.messagebox.showinfo(READABLETEXT[33],"在程序结束后将清除日志及临时文件信息。")
|
||||
tkinter.messagebox.showinfo(READABLETEXT[33],READABLETEXT[137])
|
||||
else:
|
||||
tkinter.messagebox.showinfo(READABLETEXT[33],"在程序结束后将不会清除日志及临时文件信息。")
|
||||
tkinter.messagebox.showinfo(READABLETEXT[33],READABLETEXT[138])
|
||||
|
||||
|
||||
|
||||
@ -1052,7 +1061,7 @@ def __main__():
|
||||
|
||||
|
||||
def changePackName(event):
|
||||
a = tkinter.simpledialog.askstring(title=READABLETEXT[50], prompt="修改包名", initialvalue='Ryoun')
|
||||
a = tkinter.simpledialog.askstring(title=READABLETEXT[50], prompt=READABLETEXT[139], initialvalue='Ryoun')
|
||||
if a == None:
|
||||
return
|
||||
dataset[0]['mainset']['PackName'] = a
|
||||
@ -1061,7 +1070,7 @@ def __main__():
|
||||
|
||||
|
||||
def changeMusicTitle(event):
|
||||
a = tkinter.simpledialog.askstring(title=READABLETEXT[50], prompt="修改音乐标题", initialvalue='Noname')
|
||||
a = tkinter.simpledialog.askstring(title=READABLETEXT[50], prompt=READABLETEXT[140], initialvalue='Noname')
|
||||
if a == None:
|
||||
return
|
||||
dataset[0]['mainset']['MusicTitle'] = a
|
||||
@ -1074,7 +1083,7 @@ def __main__():
|
||||
|
||||
|
||||
def changePlayerSelect(event):
|
||||
dataset[0]['mainset']['PlayerSelect'] = tkinter.simpledialog.askstring(title=READABLETEXT[50], prompt="修改玩家选择器\n注意!要加上中括号“[]”", initialvalue='')
|
||||
dataset[0]['mainset']['PlayerSelect'] = tkinter.simpledialog.askstring(title=READABLETEXT[50], prompt=READABLETEXT[141], initialvalue='')
|
||||
if dataset[0]['mainset']['PlayerSelect'] == None:
|
||||
dataset[0]['mainset']['PlayerSelect'] = ''
|
||||
RefreshMain()
|
||||
@ -1082,7 +1091,7 @@ def __main__():
|
||||
|
||||
def changeEntityName(event):
|
||||
global NowMusic
|
||||
a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt="修改本音轨的执行实体名", initialvalue='musicSupport')
|
||||
a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[142], initialvalue='musicSupport')
|
||||
if a == None:
|
||||
return
|
||||
dataset[0]['musics'][NowMusic]['set']['EntityName'] = a
|
||||
@ -1091,7 +1100,7 @@ def __main__():
|
||||
|
||||
def changeScoreboardName(event):
|
||||
global NowMusic
|
||||
a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt="修改本音轨所用的积分板", initialvalue='musicSupport')
|
||||
a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[143], initialvalue='musicSupport')
|
||||
if a == None:
|
||||
return
|
||||
dataset[0]['musics'][NowMusic]['set']['ScoreboardName'] = a
|
||||
@ -1102,9 +1111,9 @@ def __main__():
|
||||
from nmcsup.const import Instuments as inst
|
||||
global NowMusic
|
||||
while(True):
|
||||
instemp = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt="修改本音轨所用乐器", initialvalue='note.harp')
|
||||
instemp = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[144], initialvalue='note.harp')
|
||||
if not instemp in inst.keys():
|
||||
if tkinter.messagebox.askyesno(title=READABLETEXT[1], message="您输入的乐器并非游戏内置乐器,是否继续用您输入的字符作为乐器?"):
|
||||
if tkinter.messagebox.askyesno(title=READABLETEXT[1], message=READABLETEXT[145]):
|
||||
dataset[0]['musics'][NowMusic]['set']['Instrument'] = instemp
|
||||
del instemp
|
||||
break
|
||||
@ -1123,7 +1132,7 @@ def __main__():
|
||||
|
||||
def changeFileName(event):
|
||||
global NowMusic
|
||||
a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt="修改本音轨生成的文件名", initialvalue='Music')
|
||||
a = tkinter.simpledialog.askstring(title=READABLETEXT[51], prompt=READABLETEXT[146], initialvalue='Music')
|
||||
if a == None:
|
||||
return
|
||||
dataset[0]['musics'][NowMusic]['set']['FileName'] = a
|
||||
@ -1199,31 +1208,31 @@ def __main__():
|
||||
|
||||
|
||||
#创建世界菜单
|
||||
worldmenu = tk.Menu(main_menu_bar, tearoff=0);
|
||||
worldmenu.add_command(label=READABLETEXT[68], command=ToBlockWorldEpt);
|
||||
worldmenu.add_command(label=READABLETEXT[69], command=ToBlockWorld);
|
||||
worldmenu = tk.Menu(main_menu_bar, tearoff=0)
|
||||
worldmenu.add_command(label=READABLETEXT[68], command=ToBlockWorldEpt)
|
||||
worldmenu.add_command(label=READABLETEXT[69], command=ToBlockWorld)
|
||||
worldmenu.add_separator()
|
||||
worldmenu.add_command(label=READABLETEXT[70], command=ToCmdWorldEpt);
|
||||
worldmenu.add_command(label=READABLETEXT[71], command=ToCmdWorld);
|
||||
worldmenu.add_command(label=READABLETEXT[70], command=ToCmdWorldEpt)
|
||||
worldmenu.add_command(label=READABLETEXT[71], command=ToCmdWorld)
|
||||
worldmenu.add_separator()
|
||||
worldmenu.add_command(label=READABLETEXT[72], command=toRSworldEPT);
|
||||
worldmenu.add_command(label=READABLETEXT[73], command=toRSworld);
|
||||
worldmenu.add_command(label=READABLETEXT[72], command=toRSworldEPT)
|
||||
worldmenu.add_command(label=READABLETEXT[73], command=toRSworld)
|
||||
# 将子菜单加入到菜单条中
|
||||
main_menu_bar.add_cascade(label=READABLETEXT[74], menu=worldmenu);
|
||||
main_menu_bar.add_cascade(label=READABLETEXT[74], menu=worldmenu)
|
||||
|
||||
|
||||
# 创建其他功能菜单
|
||||
otherMenu = tk.Menu(main_menu_bar, tearoff=0)
|
||||
otherMenu.add_command(label=READABLETEXT[75], command=MakeFuncPlayer)
|
||||
otherMenu.add_separator();
|
||||
otherMenu.add_separator()
|
||||
otherMenu.add_command(label=READABLETEXT[76], command=toScbBDXfile)
|
||||
otherMenu.add_command(label=READABLETEXT[77], command=world2BDX)
|
||||
otherMenu.add_command(label=READABLETEXT[78], command=world2RyStruct)
|
||||
otherMenu.add_separator();
|
||||
otherMenu.add_command(label=READABLETEXT[79], command=func2World);
|
||||
otherMenu.add_command(label=READABLETEXT[80], command=bigFunc2World);
|
||||
otherMenu.add_separator()
|
||||
otherMenu.add_command(label=READABLETEXT[79], command=func2World)
|
||||
otherMenu.add_command(label=READABLETEXT[80], command=bigFunc2World)
|
||||
|
||||
main_menu_bar.add_cascade(label=READABLETEXT[81], menu=otherMenu);
|
||||
main_menu_bar.add_cascade(label=READABLETEXT[81], menu=otherMenu)
|
||||
|
||||
|
||||
# 创建实验功能菜单
|
||||
@ -1265,10 +1274,10 @@ def __main__():
|
||||
# 大标题
|
||||
tk.Label(UpLeftFrame, text=READABLETEXT[91], font=('', 20)).pack()
|
||||
# 按钮式文本
|
||||
LabelPackName = tk.Label(UpLeftFrame, bg='white', text=READABLETEXT[92], font=('', 15))
|
||||
LabelMusicTitle = tk.Label(UpLeftFrame, bg='white',text=READABLETEXT[93], font=('', 15))
|
||||
LabelIsRepeat = tk.Label(UpLeftFrame, bg='white', text=READABLETEXT[94], font=('', 15))
|
||||
LabelPlayerSelect = tk.Label(UpLeftFrame, bg='white', text=READABLETEXT[95], font=('', 15))
|
||||
LabelPackName = tk.Label(UpLeftFrame, bg='white', text=READABLETEXT[46], font=('', 15))
|
||||
LabelMusicTitle = tk.Label(UpLeftFrame, bg='white',text=READABLETEXT[47], font=('', 15))
|
||||
LabelIsRepeat = tk.Label(UpLeftFrame, bg='white', text=READABLETEXT[48], font=('', 15))
|
||||
LabelPlayerSelect = tk.Label(UpLeftFrame, bg='white', text=READABLETEXT[49], font=('', 15))
|
||||
# 绑定按钮
|
||||
LabelPackName.bind('<Button-1>', changePackName)
|
||||
LabelMusicTitle.bind('<Button-1>', changeMusicTitle)
|
||||
@ -1306,10 +1315,10 @@ def __main__():
|
||||
# 大标题
|
||||
tk.Label(UpRightFrame, text=READABLETEXT[97], font=('', 20)).pack()
|
||||
# 按钮式文本
|
||||
LabelEntityName = tk.Label(UpRightFrame, bg='white',text=READABLETEXT[98], font=('', 15))
|
||||
LabelScoreboardName = tk.Label(UpRightFrame, bg='white', text=READABLETEXT[99], font=('', 15))
|
||||
LabelInstrument = tk.Label(UpRightFrame, bg='white',text=READABLETEXT[100], font=('', 15))
|
||||
LabelFileName = tk.Label(UpRightFrame, bg='white',text=READABLETEXT[101], font=('', 15))
|
||||
LabelEntityName = tk.Label(UpRightFrame, bg='white',text=READABLETEXT[42], font=('', 15))
|
||||
LabelScoreboardName = tk.Label(UpRightFrame, bg='white', text=READABLETEXT[43], font=('', 15))
|
||||
LabelInstrument = tk.Label(UpRightFrame, bg='white',text=READABLETEXT[44], font=('', 15))
|
||||
LabelFileName = tk.Label(UpRightFrame, bg='white',text=READABLETEXT[45], font=('', 15))
|
||||
# 绑定按钮
|
||||
LabelEntityName.bind('<Button-1>', changeEntityName)
|
||||
LabelScoreboardName.bind('<Button-1>', changeScoreboardName)
|
||||
@ -1399,6 +1408,6 @@ def __main__():
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
__main__();
|
||||
__main__()
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -11,6 +11,8 @@
|
||||
|
||||
支持 Windows7+ 以及各个支持 Python3.8 的 Linux
|
||||
|
||||
***各位开发人员注意!!!多语言支持请使用READABLETEXT常量输出文字!!!如需补充,请在相应的语言文件中补充!!!***
|
||||
|
||||
|
||||
### 安装教程
|
||||
|
||||
|
BIN
languages/__pycache__/enGB.cpython-38.pyc
Normal file
BIN
languages/__pycache__/enGB.cpython-38.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
languages/__pycache__/zhCN.cpython-38.pyc
Normal file
BIN
languages/__pycache__/zhCN.cpython-38.pyc
Normal file
Binary file not shown.
@ -9,6 +9,23 @@
|
||||
# 若需转载或借鉴 请附作者
|
||||
|
||||
|
||||
'''
|
||||
Copyright 2022 Eilles Wan (金羿)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the 'License')
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an 'AS IS' BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
'''
|
||||
|
||||
|
||||
# 代码写的并非十分的漂亮,还请大佬多多包涵;本软件源代码依照Apache软件协议公开
|
||||
|
||||
'''
|
||||
@ -17,6 +34,9 @@
|
||||
方便进行语言翻译支持。
|
||||
'''
|
||||
|
||||
startWith = 0
|
||||
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
@ -26,24 +46,23 @@ def __main__():
|
||||
print('读取文件: {}'.format(fileName))
|
||||
fileText = []
|
||||
for line in open(fileName, 'r', encoding='utf-8'):
|
||||
if line.count('"') >=2:
|
||||
while line.count('"') >=2:
|
||||
# 只有上帝看得懂我在写什么。
|
||||
if line[line.index('"'):2+line[line.index('"')+1:].index('"')+len(line[:line.index('"')])] in textList:
|
||||
thisText = textList.index(line[line.index('"'):2+line[line.index('"')+1:].index('"')+len(line[:line.index('"')])])
|
||||
else:
|
||||
thisText = len(textList)
|
||||
textList.append(line[line.index('"'):2+line[line.index('"')+1:].index('"')+len(line[:line.index('"')])])
|
||||
fileText.append(line.replace(
|
||||
line = line.replace(
|
||||
line[line.index('"'):2+line[line.index('"') + 1:].index('"')+len(line[:line.index('"')])],
|
||||
'READABLETEXT[{}]'.format(thisText)
|
||||
))
|
||||
else:
|
||||
'READABLETEXT[{}]'.format(thisText+startWith)
|
||||
)
|
||||
fileText.append(line)
|
||||
|
||||
open(fileName+'_C','w',encoding='utf-8').writelines(fileText)
|
||||
|
||||
|
||||
outFile = open('lang.py','w',encoding='utf-8')
|
||||
outFile = open('lang__.py','w',encoding='utf-8')
|
||||
outFile.write('''# -*- coding:utf-8 -*-
|
||||
|
||||
# 由金羿翻译工具生成字符串列表
|
||||
@ -54,7 +73,7 @@ def __main__():
|
||||
READABLETEXT = {
|
||||
''')
|
||||
for i in range(len(textList)):
|
||||
outFile.write(" {}:{},\n".format(i,textList[i]))
|
||||
outFile.write(" {}:{},\n".format(i+startWith,textList[i]))
|
||||
outFile.write('}')
|
||||
outFile.close()
|
||||
|
||||
|
161
languages/enGB.py
Normal file
161
languages/enGB.py
Normal file
@ -0,0 +1,161 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# 由金羿翻译工具生成字符串列表
|
||||
# 请在所需翻译的文件前from 此文件 import READABLETEXT
|
||||
|
||||
|
||||
|
||||
READABLETEXT = {
|
||||
'Translator':(("Eilles Wan (金羿)",True),),
|
||||
# 此处是语言翻译者列表,其中每个元组第一项为显示文本,第二项为此文本是否为开发者名字
|
||||
0:"ERROR❌",
|
||||
1:"TIPS❗",
|
||||
2:"Clearing log(this wont be in the file)",
|
||||
3:"Could not clear the temporary files or logs",
|
||||
4:"saved",
|
||||
5:"New Musicreater Project",
|
||||
6:"Select old-type project",
|
||||
7:"Select Musicreater Project",
|
||||
8:"Cant open:{}, please check if youve entered the right name",
|
||||
9:"Musicreat - Aboit",
|
||||
10:"Musicreater",
|
||||
11:"Ver. {}",
|
||||
12:"""Team-Ryoun for Minecraft\n×\nTeam-Ryoun for Software Development""",
|
||||
13:"OK",
|
||||
14:"Inpute Notes",
|
||||
15:(("- Developer(s) -",False),("Eilles Wan (金羿)",True),("EillesWan@outlook.com",False),("QQ 2647547478",False)),
|
||||
# 此处是开发者列表,其中每个元组第一项为显示文本,第二项为此文本是否为开发者名字
|
||||
16:"- Translators -",
|
||||
# 17:"",
|
||||
18:"QQ Group: 861684859",
|
||||
19:"Musicreater - Help",
|
||||
20:"Select sound file",
|
||||
21:"Select MIDI file",
|
||||
22:"Select NoteText file",
|
||||
23:"Get Note info",
|
||||
24:"Write in Note info: {}",
|
||||
25:"Select generating file",
|
||||
26:"Select generating folder",
|
||||
27:"Select generating .mcpack file",
|
||||
28:"Input position info",
|
||||
29:"Select generating world folder",
|
||||
30:"Select generating Function Pack",
|
||||
31:"Select .mcfunction file ",
|
||||
32:"Select .bdx file ",
|
||||
33:"DONE✔",
|
||||
34:"Input playing rate",
|
||||
35:"Generating",
|
||||
36:"Select a world folder",
|
||||
37:"Make sure",
|
||||
38:"Generate .RyStruct file",
|
||||
39:"FAILED❌",
|
||||
40:"Report message inpution",
|
||||
41:"Musicreater - Eilles - {}",
|
||||
42:"ExecutingEntityName: {}",
|
||||
43:"ScoreboardName: {}",
|
||||
44:"Instrument: {}",
|
||||
45:"TrackName: {}",
|
||||
46:"PackName: {}",
|
||||
47:"MusicTitle: {}",
|
||||
48:"IsRepeat?: {}",
|
||||
49:"Player'sTargetSelector: {}",
|
||||
50:"Modify Main Option",
|
||||
51:"Modify Track Option",
|
||||
52:"Default Instrument: Enter English\n",
|
||||
53:"Open...",
|
||||
54:"Open Old Project...",
|
||||
55:"Save",
|
||||
56:"Save as...",
|
||||
57:"Exit",
|
||||
58:"File",
|
||||
59:"Load tracks from sound",
|
||||
60:"Load tracks from Midi",
|
||||
61:"Load tracks from Text",
|
||||
62:"Input notes to track",
|
||||
63:"Edit",
|
||||
64:"Generate file...",
|
||||
65:"Generate function pack...",
|
||||
66:"Generate .mcpack file...",
|
||||
67:"Functions(Pack)",
|
||||
68:"Save music as blocks into a map",
|
||||
69:"Save music as blocks into a exist map...",
|
||||
70:"Save music as commands into a map",
|
||||
71:"Save music as commands into a exist map...",
|
||||
72:"Save music as notebox into a map",
|
||||
73:"Save music as notebox into a exist map...",
|
||||
74:"World",
|
||||
75:"Generate a function that fits current music...",
|
||||
76:"Save selected track as commands in .bdx file...",
|
||||
77:"Export .bdx file from map...",
|
||||
78:"Export .RyStruct file from map...",
|
||||
79:"Load functions into a world...",
|
||||
80:"Separate long .mcfunction file into small ones and set them into a world as a chain...",
|
||||
81:"Additional Functions",
|
||||
82:"Show generating result",
|
||||
83:"Set a websocket server on localhost:8080 and play the selected track",
|
||||
84:"Experimental Functions",
|
||||
85:"Clear log file",
|
||||
86:"Clear save file(obsolete)",
|
||||
87:"Help",
|
||||
88:"About",
|
||||
89:"Send a bug report",
|
||||
90:"Q&A",
|
||||
91:"Main Options",
|
||||
# 92:"",
|
||||
# 93:"",
|
||||
# 94:"",
|
||||
# 95:"",
|
||||
96:"Reset Main Options",
|
||||
97:"Track Options",
|
||||
# 98:"",
|
||||
# 99:"",
|
||||
# 100:"",
|
||||
# 101:"",
|
||||
102:"Delete Selected Track",
|
||||
# 103:"",
|
||||
# 104:"",
|
||||
|
||||
105:"找不到或无法读取文件😢:{}",
|
||||
106:"您当前的项目已修改但未存储,是否先保存当前项目?",
|
||||
107:"项目已经存储至:{}",
|
||||
108:"音·创工程文件",
|
||||
109:"任意类型",
|
||||
110:"函数音创工程文件",
|
||||
111:"MMFM0.0.6版本工程文件",
|
||||
112:"全部类型",
|
||||
113:"钢琴声音的音频文件",
|
||||
114:"Midi文件",
|
||||
115:"文本文件",
|
||||
116:"请输入坐标:",
|
||||
117:"您输入的格式有误,请重新输入!",
|
||||
118:"我的世界指令函数文件",
|
||||
119:"请输入执行链生成坐标:",
|
||||
120:"您输入的格式有误,请重新输入。",
|
||||
121:"您的函数文件不大于一万条指令,无需进行分割操作。",
|
||||
122:"请输入执行链生成相对坐标:",
|
||||
123:"FastBuilder结构文件",
|
||||
124:"转换结束!\n{}",
|
||||
125:"一秒,音乐走几拍?",
|
||||
126:"按下确认后,在游戏中使用connect指令连接localhost:8080,即可播放",
|
||||
127:"请输入区域选择的开始坐标:",
|
||||
128:"请输入区域选择的结束坐标:",
|
||||
129:"所选区块导出时是否需要保留空气方块?",
|
||||
130:"音·创结构文件",
|
||||
131:"文件已生成\n{}",
|
||||
132:"文件无法生成\n{}\n{}",
|
||||
133:"本功能尚未开发。",
|
||||
134:"您的称呼",
|
||||
135:"您的联系方式",
|
||||
136:"您对问题的描述",
|
||||
137:"在程序结束后将清除日志及临时文件信息。",
|
||||
138:"在程序结束后将不会清除日志及临时文件信息。",
|
||||
139:"修改包名",
|
||||
140:"修改音乐标题",
|
||||
141:"修改玩家选择器\n注意!要加上中括号“[]”",
|
||||
142:"修改本音轨的执行实体名",
|
||||
143:"修改本音轨所用的积分板",
|
||||
144:"修改本音轨所用乐器",
|
||||
145:"您输入的乐器并非游戏内置乐器,是否继续用您输入的字符作为乐器?",
|
||||
146:"修改本音轨生成的文件名",
|
||||
|
||||
}
|
@ -1,113 +1,23 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# 由金羿翻译工具生成字符串列表
|
||||
# 请在所需翻译文件前from 此文件 import READABLETEXT
|
||||
|
||||
DEFAULTLANGUAGE = 'en-GB'
|
||||
|
||||
|
||||
|
||||
READABLETEXT = {
|
||||
0:"错误❌",
|
||||
1:"提示❗",
|
||||
2:"清除log(此句不载入日志)",
|
||||
3:"无法清除日志及临时文件",
|
||||
4:"已存储",
|
||||
5:"新建 音·创 项目",
|
||||
6:"请选择旧类型的项目",
|
||||
7:"请选择 音·创 项目",
|
||||
8:"无法打开文件:{},请查看您是否输入正确",
|
||||
9:"音·创 - 关于",
|
||||
10:"我的世界音·创",
|
||||
11:"当前版本:{}",
|
||||
12:"凌云我的世界开发团队",
|
||||
13:"×",
|
||||
14:"凌云软件开发团队",
|
||||
15:"唯一开发者:金羿(W-YI)",
|
||||
16:"Email: EillesWan@outlook.com",
|
||||
17:"QQ: 2647547478",
|
||||
18:"讨论群: 861684859",
|
||||
19:"音·创 - 帮助",
|
||||
20:"请选择钢琴声音的音乐文件",
|
||||
21:"请选择 MIDI 文件",
|
||||
22:"请选择 音符文本 文件",
|
||||
23:"获取音符信息",
|
||||
24:"音符数据写入{}",
|
||||
25:"请选择文件生成的位置",
|
||||
26:"请选择文件夹生成的位置",
|
||||
27:"请选择.mcpack文件生成的位置",
|
||||
28:"坐标信息输入",
|
||||
29:"请选择世界文件夹生成的位置",
|
||||
30:"请选择函数包生成的位置",
|
||||
31:"请选择 .mcfunction 文件",
|
||||
32:"请选择需要生成的.bdx文件",
|
||||
33:"完成✔",
|
||||
34:"输入播放速度",
|
||||
35:"创建中",
|
||||
36:"请选择世界文件夹所在的位置",
|
||||
37:"请确认",
|
||||
38:"生成.RyStruct文件",
|
||||
39:"失败❌",
|
||||
40:"邮件反馈信息输入",
|
||||
41:"音·创 - 金羿 - {}",
|
||||
42:"执行实体名:{}",
|
||||
43:"使用计分板:{}",
|
||||
44:"所用的乐器:{}",
|
||||
45:"当前音轨名:{}",
|
||||
46:"包名:{}",
|
||||
47:"音乐标题:{}",
|
||||
48:"是否重复:{}",
|
||||
49:"玩家选择器:{}",
|
||||
50:"修改主设置",
|
||||
51:"修改节设置",
|
||||
52:"游戏内置乐器如下:请输入英文\n",
|
||||
53:"打开音·创项目...",
|
||||
54:"打开旧项目...",
|
||||
55:"保存项目",
|
||||
56:"另存为...",
|
||||
57:"退出",
|
||||
58:"文件",
|
||||
59:"从钢琴MP3导入音轨",
|
||||
60:"从midi导入音轨",
|
||||
61:"从文本文件导入音轨",
|
||||
62:"输入音符至音轨",
|
||||
63:"编辑",
|
||||
64:"生成文件至...",
|
||||
65:"生成函数包至...",
|
||||
66:"生成附加包文件至...",
|
||||
67:"函数(包)",
|
||||
68:"将音乐以方块存储生成地图",
|
||||
69:"将音乐以方块存储载入地图…",
|
||||
70:"将音乐以指令存储生成地图",
|
||||
71:"将音乐以指令存储载入地图…",
|
||||
72:"将音乐以音符盒存储生成地图",
|
||||
73:"将音乐以音符盒存储载入地图…",
|
||||
74:"世界",
|
||||
75:"生成符合当前音乐的函数播放器…",
|
||||
76:"将选中音轨以指令存储生成.bdx文件…",
|
||||
77:"由地图导出至.bdx文件…",
|
||||
78:"由地图导出至.RyStruct文件…",
|
||||
79:"将函数载入世界…",
|
||||
80:"将大函数分割并建立执行链…",
|
||||
81:"辅助功能",
|
||||
82:"展示生成结果",
|
||||
83:"建立位于localhost:8080上的websocket服务器播放选中音轨",
|
||||
84:"实验功能",
|
||||
85:"清除临时文件",
|
||||
86:"清除存在文件",
|
||||
87:"帮助",
|
||||
88:"关于",
|
||||
89:"发送错误日志反馈",
|
||||
90:"帮助与疑问",
|
||||
91:"音乐总设置(项目设置)",
|
||||
92:"地图/函数包名:",
|
||||
93:"音乐标题:",
|
||||
94:"是否重复:",
|
||||
95:"玩家选择器:",
|
||||
96:"重置项目设置",
|
||||
97:"当前音轨设置(段落设置)",
|
||||
98:"执行实体名:",
|
||||
99:"使用计分板:",
|
||||
100:"所用的乐器:",
|
||||
101:"当前音轨名:",
|
||||
102:"删除选中音轨",
|
||||
|
||||
LANGUAGELIST = {
|
||||
'zh-CN':(
|
||||
"简体中文 中国大陆",
|
||||
"Simplified Chinese, China Mainland",
|
||||
),
|
||||
'en-GB':(
|
||||
"英式英语 大不列颠",
|
||||
"British English, Great Britain",
|
||||
),
|
||||
}
|
||||
|
||||
if DEFAULTLANGUAGE == 'zh-CN':
|
||||
from languages.zhCN import READABLETEXT
|
||||
elif DEFAULTLANGUAGE == 'en-GB':
|
||||
from languages.enGB import READABLETEXT
|
||||
|
||||
|
||||
|
@ -1,113 +0,0 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# 由金羿翻译工具generate字符串列表
|
||||
# 请在所需翻译 file 前from 此 file import READABLETEXT
|
||||
|
||||
|
||||
|
||||
READABLETEXT = {
|
||||
0:"ERROR❌",
|
||||
1:"TIPS❗",
|
||||
2:"Clearing log(this wont be in the file)",
|
||||
3:"Could not clear the temporary files or logs",
|
||||
4:"saved",
|
||||
5:"New Musicreater Project",
|
||||
6:"Select old-type project",
|
||||
7:"Select Musicreater Project",
|
||||
8:"Cant open:{}, please check if youve entered the right name",
|
||||
9:"Musicreat - Aboit",
|
||||
10:"Musicreater",
|
||||
11:"Ver. {}",
|
||||
12:"RYOUN",
|
||||
13:"凌云团队",
|
||||
14:"Team-Ryoun",
|
||||
15:"Developer: Eilles(W-YI)",
|
||||
16:"Email: EillesWan@outlook.com",
|
||||
17:"QQ: 2647547478",
|
||||
18:"QQ group: 861684859",
|
||||
19:"Musicreater - Help",
|
||||
20:"Select sound file",
|
||||
21:"Select MIDI file",
|
||||
22:"Select NoteText file",
|
||||
23:"Get Note info",
|
||||
24:"Write in Note info: {}",
|
||||
25:"Select generating file",
|
||||
26:"Select generating folder",
|
||||
27:"Select generating .mcpack file",
|
||||
28:"Input position info",
|
||||
29:"Select generating world folder",
|
||||
30:"Select generating Function Pack",
|
||||
31:"Select .mcfunction file ",
|
||||
32:"Select .bdx file ",
|
||||
33:"DONE✔",
|
||||
34:"Input playing rate",
|
||||
35:"Generating",
|
||||
36:"Select a world folder",
|
||||
37:"Make sure",
|
||||
38:"Generate .RyStruct file",
|
||||
39:"FAILED❌",
|
||||
40:"邮件反馈信息输入",
|
||||
41:"Musicreater - Eilles - {}",
|
||||
42:"执行实体名: {}",
|
||||
43:"使用计分板: {}",
|
||||
44:"所用的乐器: {}",
|
||||
45:"当前音轨名: {}",
|
||||
46:"Pack Name: {}",
|
||||
47:"MusicTitle: {}",
|
||||
48:"IsRepeat?: {}",
|
||||
49:"玩家选择器: {}",
|
||||
50:"修改主设置",
|
||||
51:"修改节设置",
|
||||
52:"游戏内置乐器如下: 请输入英文\n",
|
||||
53:"Open...",
|
||||
54:"Open Old Project...",
|
||||
55:"Save",
|
||||
56:"Save as...",
|
||||
57:"Exit",
|
||||
58:"File",
|
||||
59:"Load tracks from sound",
|
||||
60:"Load tracks from Midi",
|
||||
61:"Load tracks from Text",
|
||||
62:"Input notes to track",
|
||||
63:"Edit",
|
||||
64:"Generate file...",
|
||||
65:"Generate function pack...",
|
||||
66:"Generate .mcpack file...",
|
||||
67:"Functions(Pack)",
|
||||
68:"Save music as blocks into a map",
|
||||
69:"Save music as blocks into a exist map...",
|
||||
70:"Save music as commands into a map",
|
||||
71:"Save music as commands into a exist map...",
|
||||
72:"Save music as notebox into a map",
|
||||
73:"Save music as notebox into a exist map...",
|
||||
74:"World",
|
||||
75:"generate符合当前音乐的函数播放器...",
|
||||
76:"Save selected track as commands in .bdx file...",
|
||||
77:"由 map导出至.bdx file...",
|
||||
78:"由 map导出至.RyStruct file...",
|
||||
79:"将函数载入 world...",
|
||||
80:"将大函数分割并建立执行链...",
|
||||
81:"辅助功能",
|
||||
82:"Show generating result",
|
||||
83:"建立位于localhost:8080上的websocket服务器播放选中音轨",
|
||||
84:"实验功能",
|
||||
85:"清除临时 file ",
|
||||
86:"清除存在 file ",
|
||||
87:"帮助",
|
||||
88:"关于",
|
||||
89:"发送错误日志反馈",
|
||||
90:"帮助与疑问",
|
||||
91:"音乐总设置(项目设置)",
|
||||
92:" map/函数包名: ",
|
||||
93:"音乐标题: ",
|
||||
94:"是否重复: ",
|
||||
95:"玩家选择器: ",
|
||||
96:"重置项目设置",
|
||||
97:"当前音轨设置(段落设置)",
|
||||
98:"执行实体名: ",
|
||||
99:"使用计分板: ",
|
||||
100:"所用的乐器: ",
|
||||
101:"当前音轨名: ",
|
||||
102:"删除选中音轨",
|
||||
|
||||
}
|
161
languages/zhCN.py
Normal file
161
languages/zhCN.py
Normal file
@ -0,0 +1,161 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
# 由金羿翻译工具生成字符串列表
|
||||
# 请在所需翻译文件前from 此文件 import READABLETEXT
|
||||
|
||||
|
||||
|
||||
|
||||
READABLETEXT = {
|
||||
'Translator':(("金羿 Eilles 原稿",True),),
|
||||
# 此处是语言翻译者列表,其中每个元组第一项为显示文本,第二项为此文本是否为开发者名字
|
||||
0:"错误❌",
|
||||
1:"提示❗",
|
||||
2:"清除log(此句不载入日志)",
|
||||
3:"无法清除日志及临时文件",
|
||||
4:"已存储",
|
||||
5:"新建 音·创 项目",
|
||||
6:"请选择旧类型的项目",
|
||||
7:"请选择 音·创 项目",
|
||||
8:"无法打开文件:{},请查看您是否输入正确",
|
||||
9:"音·创 - 关于",
|
||||
10:"音·创 Musicreater",
|
||||
11:"当前版本:{}",
|
||||
12:"""凌云我的世界开发团队\n×\n凌云计算机应用软件开发团队""",
|
||||
13:"确定",
|
||||
14:"请输入音符",
|
||||
15:(("- 开发者 -",False),("金羿 Eilles",True),("EillesWan@outlook.com",False),("QQ 2647547478",False)),
|
||||
# 此处是开发者列表,其中每个元组第一项为显示文本,第二项为此文本是否为开发者名字
|
||||
16:"- 翻译者 -",
|
||||
# 17:"",
|
||||
18:"讨论群: 861684859",
|
||||
19:"音·创 - 帮助",
|
||||
20:"请选择钢琴声音的音乐文件",
|
||||
21:"请选择 MIDI 文件",
|
||||
22:"请选择 音符文本 文件",
|
||||
23:"获取音符信息",
|
||||
24:"音符数据写入{}",
|
||||
25:"请选择文件生成的位置",
|
||||
26:"请选择文件夹生成的位置",
|
||||
27:"请选择.mcpack文件生成的位置",
|
||||
28:"坐标信息输入",
|
||||
29:"请选择世界文件夹生成的位置",
|
||||
30:"请选择函数包生成的位置",
|
||||
31:"请选择 .mcfunction 文件",
|
||||
32:"请选择需要生成的.bdx文件",
|
||||
33:"完成✔",
|
||||
34:"输入播放速度",
|
||||
35:"创建中",
|
||||
36:"请选择世界文件夹所在的位置",
|
||||
37:"请确认",
|
||||
38:"生成.RyStruct文件",
|
||||
39:"失败❌",
|
||||
40:"邮件反馈信息输入",
|
||||
41:"音·创 - 金羿 - {}",
|
||||
42:"执行实体名:{}",
|
||||
43:"使用计分板:{}",
|
||||
44:"所用的乐器:{}",
|
||||
45:"当前音轨名:{}",
|
||||
46:"包名:{}",
|
||||
47:"音乐标题:{}",
|
||||
48:"是否重复:{}",
|
||||
49:"玩家选择器:{}",
|
||||
50:"修改主设置",
|
||||
51:"修改节设置",
|
||||
52:"游戏内置乐器如下:请输入英文\n",
|
||||
53:"打开音·创项目...",
|
||||
54:"打开旧项目...",
|
||||
55:"保存项目",
|
||||
56:"另存为...",
|
||||
57:"退出",
|
||||
58:"文件",
|
||||
59:"从钢琴MP3导入音轨",
|
||||
60:"从midi导入音轨",
|
||||
61:"从文本文件导入音轨",
|
||||
62:"输入音符至音轨",
|
||||
63:"编辑",
|
||||
64:"生成文件至...",
|
||||
65:"生成函数包至...",
|
||||
66:"生成附加包文件至...",
|
||||
67:"函数(包)",
|
||||
68:"将音乐以方块存储生成地图",
|
||||
69:"将音乐以方块存储载入地图…",
|
||||
70:"将音乐以指令存储生成地图",
|
||||
71:"将音乐以指令存储载入地图…",
|
||||
72:"将音乐以音符盒存储生成地图",
|
||||
73:"将音乐以音符盒存储载入地图…",
|
||||
74:"世界",
|
||||
75:"生成符合当前音乐的函数播放器…",
|
||||
76:"将选中音轨以指令存储生成.bdx文件…",
|
||||
77:"由地图导出至.bdx文件…",
|
||||
78:"由地图导出至.RyStruct文件…",
|
||||
79:"将函数载入世界…",
|
||||
80:"将大函数分割并建立执行链…",
|
||||
81:"辅助功能",
|
||||
82:"展示生成结果",
|
||||
83:"建立位于localhost:8080上的websocket服务器播放选中音轨",
|
||||
84:"实验性功能",
|
||||
85:"清除日志文件",
|
||||
86:"清除早期版本的存储文件",
|
||||
87:"帮助",
|
||||
88:"关于",
|
||||
89:"发送错误日志反馈",
|
||||
90:"帮助与疑问",
|
||||
91:"音乐总设置(项目设置)",
|
||||
# 92:"",
|
||||
# 93:"",
|
||||
# 94:"",
|
||||
# 95:"",
|
||||
96:"重置项目设置",
|
||||
97:"当前音轨设置(段落设置)",
|
||||
# 98:"",
|
||||
# 99:"",
|
||||
# 100:"",
|
||||
# 101:"",
|
||||
102:"删除选中音轨",
|
||||
# 103:"",
|
||||
# 104:"",
|
||||
105:"找不到或无法读取文件😢:{}",
|
||||
106:"您当前的项目已修改但未存储,是否先保存当前项目?",
|
||||
107:"项目已经存储至:{}",
|
||||
108:"音·创工程文件",
|
||||
109:"任意类型",
|
||||
110:"函数音创工程文件",
|
||||
111:"MMFM0.0.6版本工程文件",
|
||||
112:"全部类型",
|
||||
113:"钢琴声音的音频文件",
|
||||
114:"Midi文件",
|
||||
115:"文本文件",
|
||||
116:"请输入坐标:",
|
||||
117:"您输入的格式有误,请重新输入!",
|
||||
118:"我的世界指令函数文件",
|
||||
119:"请输入执行链生成坐标:",
|
||||
120:"您输入的格式有误,请重新输入。",
|
||||
121:"您的函数文件不大于一万条指令,无需进行分割操作。",
|
||||
122:"请输入执行链生成相对坐标:",
|
||||
123:"FastBuilder结构文件",
|
||||
124:"转换结束!\n{}",
|
||||
125:"一秒,音乐走几拍?",
|
||||
126:"按下确认后,在游戏中使用connect指令连接localhost:8080,即可播放",
|
||||
127:"请输入区域选择的开始坐标:",
|
||||
128:"请输入区域选择的结束坐标:",
|
||||
129:"所选区块导出时是否需要保留空气方块?",
|
||||
130:"音·创结构文件",
|
||||
131:"文件已生成\n{}",
|
||||
132:"文件无法生成\n{}\n{}",
|
||||
133:"本功能尚未开发。",
|
||||
134:"您的称呼",
|
||||
135:"您的联系方式",
|
||||
136:"您对问题的描述",
|
||||
137:"在程序结束后将清除日志及临时文件信息。",
|
||||
138:"在程序结束后将不会清除日志及临时文件信息。",
|
||||
139:"修改包名",
|
||||
140:"修改音乐标题",
|
||||
141:"修改玩家选择器\n注意!要加上中括号“[]”",
|
||||
142:"修改本音轨的执行实体名",
|
||||
143:"修改本音轨所用的积分板",
|
||||
144:"修改本音轨所用乐器",
|
||||
145:"您输入的乐器并非游戏内置乐器,是否继续用您输入的字符作为乐器?",
|
||||
146:"修改本音轨生成的文件名",
|
||||
|
||||
}
|
Binary file not shown.
@ -21,7 +21,7 @@ def makeZip(sourceDir, outFilename,compression = 8,exceptFile = None):
|
||||
for parent, dirnames, filenames in os.walk(sourceDir):
|
||||
for filename in filenames:
|
||||
if filename == exceptFile:
|
||||
continue;
|
||||
continue
|
||||
print(filename)
|
||||
pathfile = os.path.join(parent, filename)
|
||||
arcname = pathfile[pre_len:].strip(os.path.sep) #相对路径
|
||||
@ -43,51 +43,51 @@ class report():
|
||||
''':param senderName 发送者名称
|
||||
:param senderContact 发送者联系方式
|
||||
:param describetion 问题描述'''
|
||||
self.senderName = senderName;
|
||||
self.senderContact = senderContact;
|
||||
self.describetion = describetion;
|
||||
self.senderName = senderName
|
||||
self.senderContact = senderContact
|
||||
self.describetion = describetion
|
||||
if not self.senderName :
|
||||
self.senderName = 'Unknown';
|
||||
self.senderName = 'Unknown'
|
||||
if not self.senderContact :
|
||||
self.senderContact = 'None';
|
||||
self.senderContact = 'None'
|
||||
|
||||
|
||||
|
||||
def emailReport(self):
|
||||
'''使用E-mail方法发送当前的日志和临时文件等'''
|
||||
import smtplib
|
||||
from email.mime.text import MIMEText;
|
||||
from email.mime.multipart import MIMEMultipart;
|
||||
from email.header import Header;
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.header import Header
|
||||
from nmcsup.log import log
|
||||
log("发送错误报告")
|
||||
import os;
|
||||
import os
|
||||
log("添加标题与正文")
|
||||
msg = MIMEMultipart();
|
||||
msg = MIMEMultipart()
|
||||
#发送者与接收者显示名称
|
||||
msg["From"] = Header(self.senderName,'utf-8');
|
||||
msg["To"] = Header("W-YI (QQ2647547478)",'utf-8');
|
||||
msg["From"] = Header(self.senderName,'utf-8')
|
||||
msg["To"] = Header("W-YI (QQ2647547478)",'utf-8')
|
||||
#标题
|
||||
msg["Subject"] = '音·创 - 来自 '+self.senderName+' 的错误报告';
|
||||
msg["Subject"] = '音·创 - 来自 '+self.senderName+' 的错误报告'
|
||||
#正文
|
||||
msg.attach(MIMEText("来自"+self.senderName+"( "+self.senderContact+" )的错误描述:\n"+self.describetion,'plain','utf-8'));
|
||||
msg.attach(MIMEText("来自"+self.senderName+"( "+self.senderContact+" )的错误描述:\n"+self.describetion,'plain','utf-8'))
|
||||
log("添加完毕,正在生成压缩包...")
|
||||
makeZip("./","Temps&Logs.zip",exceptFile="Temps&Logs.zip");
|
||||
attafile=MIMEText(open("Temps&Logs.zip",'rb').read(),"base64",'gb2312');
|
||||
attafile["Content-Type"] = 'application/octet-stream';
|
||||
attafile["Content-Disposition"] = 'attachment;filename="BugReport_from_'+self.senderName+'.zip"';
|
||||
msg.attach(attafile);
|
||||
makeZip("./","Temps&Logs.zip",exceptFile="Temps&Logs.zip")
|
||||
attafile=MIMEText(open("Temps&Logs.zip",'rb').read(),"base64",'gb2312')
|
||||
attafile["Content-Type"] = 'application/octet-stream'
|
||||
attafile["Content-Disposition"] = 'attachmentfilename="BugReport_from_'+self.senderName+'.zip"'
|
||||
msg.attach(attafile)
|
||||
log("完毕,准备发送")
|
||||
try:
|
||||
smtp = smtplib.SMTP()
|
||||
smtp.connect("smtp.163.com");
|
||||
#smtp.login("RyounDevTeam@163.com","RyounDaiYi99");
|
||||
smtp.connect("smtp.163.com")
|
||||
#smtp.login("RyounDevTeam@163.com","RyounDaiYi99")
|
||||
#SIQQKQQYCZRVIDFJ是授权密码
|
||||
smtp.login("RyounDevTeam@163.com","SIQQKQQYCZRVIDFJ");
|
||||
smtp.login("RyounDevTeam@163.com","SIQQKQQYCZRVIDFJ")
|
||||
smtp.sendmail("RyounDevTeam@163.com",["RyounDevTeam@163.com",],msg.as_string())
|
||||
log("错误汇报邮件已发送")
|
||||
except smtplib.SMTPException as e:
|
||||
log("错误汇报邮件发送失败:\n"+str(e));
|
||||
log("错误汇报邮件发送失败:\n"+str(e))
|
||||
log("清空内存和临时文件")
|
||||
del msg,attafile
|
||||
os.remove("./Temps&Logs.zip")
|
||||
@ -102,7 +102,7 @@ class version:
|
||||
libraries = ('mido','amulet','amulet-core','amulet-nbt','piano_transcription_inference','pypinyin','pyinstaller','py7zr','websockets','torch')
|
||||
'''当前所需库,有一些是开发用的,用户不需要安装'''
|
||||
|
||||
version = ('0.0.0','Delta',)
|
||||
version = ('0.0.1','Delta',)
|
||||
'''当前版本'''
|
||||
|
||||
def __init__(self) -> None:
|
||||
@ -122,12 +122,13 @@ class version:
|
||||
try:
|
||||
shutil.rmtree(os.getenv('APPDATA')+'\\Musicreater\\')
|
||||
except:
|
||||
pass;
|
||||
pass
|
||||
for i in self.libraries:
|
||||
print("安装库:"+i)
|
||||
os.system("python -m pip install "+i+" -i https://pypi.tuna.tsinghua.edu.cn/simple")
|
||||
elif platform == 'linux':
|
||||
os.system("sudo apt-get install python3-pip")
|
||||
os.system("sudo apt-get install python3-tk")
|
||||
os.system("sudo apt-get install python3-tkinter")
|
||||
for i in self.libraries:
|
||||
print("安装库:"+i)
|
||||
|
@ -12,21 +12,21 @@ def delPart(Data,starter,ender,includeStart :bool= True,includend :bool= True):
|
||||
starter与ender若为None则默认从首或尾开始'''
|
||||
try:
|
||||
if starter == None:
|
||||
includeStart = True;
|
||||
starter = Data[0];
|
||||
includeStart = True
|
||||
starter = Data[0]
|
||||
if ender == None:
|
||||
includend = True;
|
||||
ender = Data[len(Data)-1];
|
||||
includend = True
|
||||
ender = Data[len(Data)-1]
|
||||
if includend:
|
||||
if includeStart:
|
||||
return Data[Data.index(starter):len(Data)-Data[len(Data)::-1].index(ender)];
|
||||
return Data[Data.index(starter):len(Data)-Data[len(Data)::-1].index(ender)]
|
||||
else:
|
||||
return Data[Data.index(starter)+1:len(Data)-Data[len(Data)::-1].index(ender)];
|
||||
return Data[Data.index(starter)+1:len(Data)-Data[len(Data)::-1].index(ender)]
|
||||
else:
|
||||
if includeStart:
|
||||
return Data[Data.index(starter):len(Data)-Data[len(Data)::-1].index(ender)-1];
|
||||
return Data[Data.index(starter):len(Data)-Data[len(Data)::-1].index(ender)-1]
|
||||
else:
|
||||
return Data[Data.index(starter)+1:len(Data)-Data[len(Data)::-1].index(ender)-1];
|
||||
return Data[Data.index(starter)+1:len(Data)-Data[len(Data)::-1].index(ender)-1]
|
||||
except:
|
||||
return 0
|
||||
|
||||
@ -37,21 +37,21 @@ def keepart(Data,starter,ender,includeStart :bool= True,includend :bool= True):
|
||||
starter与ender若为None则默认从首或尾开始'''
|
||||
try:
|
||||
if starter == None:
|
||||
includeStart = True;
|
||||
starter = Data[0];
|
||||
includeStart = True
|
||||
starter = Data[0]
|
||||
if ender == None:
|
||||
includend = True;
|
||||
ender = Data[len(Data)-1];
|
||||
includend = True
|
||||
ender = Data[len(Data)-1]
|
||||
if includend:
|
||||
if includeStart:
|
||||
return Data[Data.index(starter):Data.index(ender)+1];
|
||||
return Data[Data.index(starter):Data.index(ender)+1]
|
||||
else:
|
||||
return Data[Data.index(starter)+1:Data.index(ender)+1];
|
||||
return Data[Data.index(starter)+1:Data.index(ender)+1]
|
||||
else:
|
||||
if includeStart:
|
||||
return Data[Data.index(starter):Data.index(ender)];
|
||||
return Data[Data.index(starter):Data.index(ender)]
|
||||
else:
|
||||
return Data[Data.index(starter)+1:Data.index(ender)];
|
||||
return Data[Data.index(starter)+1:Data.index(ender)]
|
||||
except:
|
||||
return 0
|
||||
|
||||
@ -66,13 +66,13 @@ def keepart(Data,starter,ender,includeStart :bool= True,includend :bool= True):
|
||||
def lenFunction(fun) -> int:
|
||||
'''取得函数指令部分长度,即忽略#开头的注释'''
|
||||
try:
|
||||
l = 0;
|
||||
l = 0
|
||||
for i in fun:
|
||||
if i.replace(" ",'')[0] == '#':
|
||||
l += 1;
|
||||
return len(fun)-l;
|
||||
l += 1
|
||||
return len(fun)-l
|
||||
except:
|
||||
return -1;
|
||||
return -1
|
||||
|
||||
|
||||
|
||||
@ -82,21 +82,21 @@ def funSplit(bigFile,maxCmdLen : int = 10000 ):
|
||||
返回-1为大小低于maxCmdLen最长函数指令长度'''
|
||||
bigFile = bigFile.readlines()
|
||||
if lenFunction(bigFile) < maxCmdLen:
|
||||
return -1;
|
||||
part = [];
|
||||
parts = [];
|
||||
l = 0;
|
||||
return -1
|
||||
part = []
|
||||
parts = []
|
||||
l = 0
|
||||
for i in bigFile:
|
||||
if i.replace(" ",'')[0] == '#':
|
||||
part.append(i+'\n');
|
||||
part.append(i+'\n')
|
||||
else:
|
||||
part.append(i+'\n');
|
||||
l += 1;
|
||||
part.append(i+'\n')
|
||||
l += 1
|
||||
if l >= 10000:
|
||||
parts.append(part)
|
||||
part = [];
|
||||
l = 0;
|
||||
return parts;
|
||||
part = []
|
||||
l = 0
|
||||
return parts
|
||||
|
||||
|
||||
|
||||
|
@ -13,7 +13,7 @@ def hans2pinyin(hans,style=3):
|
||||
result = lazy_pinyin(hans=hans,style=style)
|
||||
final = ''
|
||||
for i in result:
|
||||
final += i;
|
||||
final += i
|
||||
return final
|
||||
|
||||
|
||||
@ -83,7 +83,7 @@ def note2bdx(filePath:str,dire:list,Notes : list,ScoreboardName:str,Instrument:s
|
||||
i = 0
|
||||
down = False
|
||||
blocks = [formCmdBlock(dire,cdl.pop(0),1,1)]
|
||||
dire[1]+=1;
|
||||
dire[1]+=1
|
||||
for j in cdl:
|
||||
if dire[1]+i > height:
|
||||
dire[0]+=1
|
||||
@ -124,12 +124,12 @@ def note2webs(Notes : list,Instrument:str, speed:float = 5.0, PlayerSelect:str='
|
||||
await fcwslib.tellraw(websocket, '已连接服务器——音·创'+VER[1]+VER[0]+' 作者:金羿(W-YI)')
|
||||
if isProsess:
|
||||
length = len(Notes)
|
||||
j = 1;
|
||||
j = 1
|
||||
for i in range(len(Notes)):
|
||||
await fcwslib.send_command(websocket,'execute @a'+PlayerSelect+' ~ ~ ~ playsound '+Instrument+' @s ~ ~ ~ 1000 '+str(Notes[i][0])+' 1000')
|
||||
if isProsess:
|
||||
fcwslib.send_command(websocket,'execute @a'+PlayerSelect+' ~ ~ ~ title @s actionbar §e▶ 播放中: §a'+str(j)+'/'+str(length)+' || '+str(int(j/length*1000)/10))
|
||||
j+=1;
|
||||
j+=1
|
||||
time.sleep(Notes[i][1]/speed)
|
||||
|
||||
fcwslib.run_server(run_server)
|
||||
@ -170,19 +170,19 @@ def note2RSworld(world:str,startpos:list,notes:list,instrument:str,speed:float =
|
||||
:param note: 0~24
|
||||
:return Block()'''
|
||||
if powered:
|
||||
powered = 'true';
|
||||
powered = 'true'
|
||||
else:
|
||||
powered = 'false';
|
||||
powered = 'false'
|
||||
return Block('universal_minecraft','noteblock',{"instrument":ts(instrument.replace("note.",'')),'note':ts(str(note)),'powered':ts(powered)})
|
||||
|
||||
def formRepeater(delay:int,facing:str,locked:bool=False,powered:bool=False):
|
||||
'''生成中继器方块
|
||||
:param delay: 1~4
|
||||
:return Block()'''
|
||||
if powered:powered = 'true';
|
||||
else:powered = 'false';
|
||||
if locked:locked = 'true';
|
||||
else:locked = 'false';
|
||||
if powered:powered = 'true'
|
||||
else:powered = 'false'
|
||||
if locked:locked = 'true'
|
||||
else:locked = 'false'
|
||||
return Block('universal_minecraft','repeater',{"delay":ts(str(delay)),'facing':ts(facing),'locked':ts(locked),'powered':ts(powered)})
|
||||
|
||||
|
||||
|
@ -147,7 +147,7 @@ def Cmd2World(cmd:list,world:str,dire:list):
|
||||
chunk.block_entities[(dire[0], dire[1], dire[2])] = universal_block_entity
|
||||
chunk.changed = True
|
||||
#集体上移
|
||||
dire[1]+=1;
|
||||
dire[1]+=1
|
||||
#真正开始
|
||||
down = False
|
||||
for j in cdl:
|
||||
|
Loading…
x
Reference in New Issue
Block a user