TISUnion / QuickBackupM

A backup / restore plugin, with multiple backup slots
GNU General Public License v3.0
148 stars 20 forks source link

!!qb reload 坏了 #23

Closed alex3236 closed 3 years ago

alex3236 commented 3 years ago

错报

[MCDR] [20:15:14] [TaskExecutor/ERROR]: Error when executing command "!!qb reload" with command source "Player Alex3236" on Literal[literals={'!!qb'}] registered by quick_backup_multi@1.2.2
Traceback (most recent call last):
  File "C:\Program Files\Python39\lib\site-packages\mcdreforged\command\command_manager.py", line 70, in _traverse
    node.execute(source, command)
  File "C:\Program Files\Python39\lib\site-packages\mcdreforged\command\builder\nodes\basic.py", line 411, in execute
    self._execute_command(CommandContext(source, command))
  File "C:\Program Files\Python39\lib\site-packages\mcdreforged\command\builder\nodes\basic.py", line 326, in _execute_command
    child_literal._execute_command(context)
  File "C:\Program Files\Python39\lib\site-packages\mcdreforged\command\builder\nodes\basic.py", line 305, in _execute_command
    self.__smart_callback(self._callback, context.source, context)
  File "C:\Program Files\Python39\lib\site-packages\mcdreforged\command\builder\nodes\basic.py", line 267, in __smart_callback
    return callback(*args[:spec_args_len])
  File "plugins\QuickBackupM-v1.2.2.mcdr\quick_backup_multi\__init__.py", line 489, in <lambda>
    then(get_literal_node('reload').runs(lambda src: load_config(src.get_server(), src)))
  File "plugins\QuickBackupM-v1.2.2.mcdr\quick_backup_multi\__init__.py", line 495, in load_config
    config = server.load_config_simple(CONFIG_FILE, default_config, in_data_folder=False, source_to_reply=source)
AttributeError: 'ServerInterface' object has no attribute 'load_config_simple'

原因

# /quick_backup_multi/__init__.py

# ...
# Line 510
then(get_literal_node('reload').runs(lambda src: load_config(src.get_server(), src))) # <-- 此处向 load_config 传递 src.get_server() 为 ServerInterface

# ...
# Line 514
def load_config(server, source: CommandSource or None = None):
    # ...
    config = server.load_config_simple(...) # <-- 使用 PluginServerInterface 的 load_config_simple 方法
# ...

解决方案

  1. ServerInterface 中添加一个能获取 PluginServerInterface 的办法?
  2. on_load 时将 PluginServerInterface 给到全局变量
Fallen-Breath commented 3 years ago

Fixed in v1.3.1 via 2a5aa71f6d1a4584de87015578554fc991f3f5f2