Closed Allenobbin closed 1 year ago
MCDR版本和系统信息发一下 (我猜你应该是Windows?
MCDR2.7.2 64 位操作系统, 基于 x64 的处理器 Windows 11 家庭中文版
能解决吗?
用的Windows Terminal/Powershell/Command Prompt(cmd)的哪一个?
cmd
cmd还真没cp命令,PowerShell和Terminal有 =-= 晚点看看怎么判断终端类型吧
好
我看看如果是判断出cmd的话改成用xcopy好了 晚点改
关于使用还有一些细节问题。镜像服的世界文件夹是不是只能命名为world并放在服务器目录中。命名成别的名字并与镜像服的服务器配置中的level-name匹配是不是也能用?
是的 但是要注意修改配置 文件夹名字在插件的配置文件里面是可以改的
只要匹配就可以的
所以生存服和镜像服的世界文件夹名称必须一样吗?
我是不是可以这么理解,当使用!!msr sync时,插件会在镜像服的服务器目录中去寻找插件的配置文件里的world文件夹的名称,并将生存服正在运行的地图搬到那个文件夹去。
1、最好是一样 因为复制的时候文件夹名字是不会进行修改的 本来也就没想到会有人进行修改 2、你的理解是对的
复制的逻辑是这么写的
@new_thread('MSR-Sync')
def ServerSync(InterFace):
global syncFlag
syncFlag = True
start_time = datetime.datetime.now()
ignore = shutil.ignore_patterns('session.lock')
if MCDR:
if os.path.exists('./Mirror/server/world'):
shutil.rmtree('./Mirror/server/world')
# shutil.copytree('./server/world/',
# './Mirror/server/world', ignore=ignore)
os.system(f'cp -r ./server/world ./Mirror/server/world')
else:
for world in config['world']:
shutil.rmtree('./Mirror/{}/'.format(world))
# shutil.copytree('./server/world/', './Mirror/world/', ignore=ignore)
os.system(f'cp -r ./server/{world} ./Mirror/{world}')
end_time = datetime.datetime.now()
InterFace.execute(
f'say §b[MirrorServerReforged] §6同步完成!用时{end_time-start_time}')
syncFlag = False
def Sync():
InterFace = GetInterFace()
if syncFlag:
InterFace.execute(
'say §b[MirrorServerReforged] §d服务器正在进行同步,请不要重复提交同步任务!')
else:
InterFace.execute('say §b[MirrorServerReforged] §6正在同步服务器地图……')
InterFace.execute('save-off')
InterFace.execute('save-all')
ServerSync(InterFace)
InterFace.execute('save-on')
执行!!msr sync
的时候是调用了Sync
函数,Sync
函数里面去开多个线程调用ServerSync
函数,ServerSync
函数进行服务器的同步操作
(刚好看到了个逻辑bug一会一起修了)
我的生存服存档不是放在服务器目录里的,开启生存服的时候是使用的--universe 和--world选项,我怕插件识别不出来。
你是什么服务器类型?不是Vanilla
?
是,是装了Fabric的服务器。--universe和--world是原版的功能
这两个启动参数具体的作用是什么?
--universe <字符串> 指定查找world文件夹的位置(默认为.,即当前目录)。 --world <字符串> 指定一个level.dat所在文件夹的名称。
好像我应该加一个世界位置的配置项?不过你这个不是普遍情况……
我用这两个参数来启动我单人游戏的存档,以便在服务器上和朋友们一起玩。
copy
的问题我已经改完了 不过你这个嘛……
@new_thread('MSR-Sync')
def ServerSync(InterFace):
global syncFlag
syncFlag = True
start_time = datetime.datetime.now()
ignore = shutil.ignore_patterns('session.lock')
if MCDR:
for world in config['world']:
if os.path.exists(f'./Mirror/server/{world}'):
shutil.rmtree(f'./Mirror/{world}/')
# shutil.copytree('./server/world/', './Mirror/world/', ignore=ignore)
if sys.platform == 'win32':
os.system(f'xcopy ./server/{world} ./Mirror/server/{world} /e /h /k /y')
else:
os.system(f'cp -r ./server/{world} ./Mirror/server/{world}')
else:
for world in config['world']:
if os.path.exists(f'./Mirror/server/{world}'):
shutil.rmtree(f'./Mirror/{world}/')
if sys.platform == 'win32':
os.system(f'xcopy ./server/{world} ./Mirror/{world} /e /h /k /y')
else:
os.system(f'cp -r ./server/{world} ./Mirror/{world}')
end_time = datetime.datetime.now()
InterFace.execute(
f'say §b[MirrorServerReforged] §6同步完成!用时{end_time-start_time}')
syncFlag = False
def Sync():
InterFace = GetInterFace()
if syncFlag:
InterFace.execute(
'say §b[MirrorServerReforged] §d服务器正在进行同步,请不要重复提交同步任务!')
else:
InterFace.execute('say §b[MirrorServerReforged] §6正在同步服务器地图……')
InterFace.execute('save-off')
InterFace.execute('save-all')
ServerSync(InterFace)
InterFace.execute('save-on')
emmmm 那你自己改下文件的位置吧 我先把commit推上去 然后我告诉你在哪里改
当然,我可以把存档换个位置,问题不大。如果你的插件能有这种功能我也支持。
能写是能写 只不过没那么快
好的,多谢。
copy的那个问题你试试刚发的1.0.6
插件 应该是解决了的
它提示说无效的参数数量
我检查了一下,好像没成。
emmmm 完整的是啥发一下 刚刚睡觉去了
好吧我知道了 应该直接用copy
而不是xcopy
改好了 重新下一下1.0.6版本
它提示说 命令语法不正确
=-= 我等会看看 我这里明明可以的……
再试试?我把所有的可选参数删掉了,应该能够兼容多数电脑的
不行,它还是提示“命令语法不正确”。
你下了新的插件嘛 我是更在了Release里面
是的
在插件目录下开个cmd 运行这个 certutil -hashfile .\MirrorServerReforged-v1.0.6.mcdr md5 结果发下
MD5 的 .\MirrorServerReforged-v1.0.6.mcdr 哈希: 1fe957d8041739294b9542e078c8422c CertUtil: -hashfile 命令成功完成。
是最新的呀 今晚再看吧……
我知道了 Windows的垃圾机制
路径使用右斜杠\
来分割的 用左斜杠/
会被Windows认为是参数……
刚发了个新版 允许用户自定义存档位置了 你可以试试 顺带解决了Windows的同步问题
试了一下,服务器地图可以同步了。
OK 有啥问题再开issue找我吧
控制台提示说'cp' 不是内部或外部命令,也不是可运行的程序 或批处理文件。