1414from prime_backup .mcdr .crontab_manager import CrontabManager
1515from prime_backup .mcdr .online_player_counter import OnlinePlayerCounter
1616from prime_backup .mcdr .task_manager import TaskManager
17- from prime_backup .utils import misc_utils
17+ from prime_backup .mcdr .text_components import TextComponents
18+ from prime_backup .utils import misc_utils , mcdr_utils
1819
1920config : Optional [Config ] = None
2021task_manager : Optional [TaskManager ] = None
@@ -44,12 +45,14 @@ def is_enabled() -> bool:
4445
4546
4647def on_load (server : PluginServerInterface , old ):
48+ self_name = server .get_self_metadata ().name
49+
4750 @contextlib .contextmanager
4851 def handle_init_error ():
4952 try :
5053 yield
5154 except Exception :
52- server .logger .error ('{} initialization failed and will be disabled' .format (server . get_self_metadata (). name ))
55+ server .logger .error ('{} initialization failed and will be disabled' .format (self_name ))
5356 server .schedule_task (functools .partial (on_unload , server ))
5457 raise
5558
@@ -67,14 +70,28 @@ def init():
6770
6871 global init_ok
6972 init_ok = is_enabled ()
70- server .logger .debug ('{} init done, init_ok={}' .format (mcdr_globals .metadata .name , init_ok ))
73+ server .logger .debug ('{} init done, init_ok={}' .format (self_name , init_ok ))
74+
75+ def register_disabled_command ():
76+ from mcdreforged .api .all import SimpleCommandBuilder , CommandSource , RColor
77+ builder = SimpleCommandBuilder ()
78+
79+ @builder .command (config .command .prefix )
80+ def handle_root (source : CommandSource ):
81+ with source .preferred_language_context ():
82+ doc_url = mcdr_utils .tr ('command.disabled.doc_url' ).to_plain_text ()
83+ mcdr_utils .reply_message (source , mcdr_utils .tr ('command.disabled.disabled_by_config' , self_name ).set_color (RColor .yellow ))
84+ mcdr_utils .reply_message (source , mcdr_utils .tr ('command.disabled.read_doc' , self_name , TextComponents .url (doc_url )))
85+
86+ builder .register (server )
7187
7288 global config , task_manager , command_manager , crontab_manager , online_player_counter
7389 with handle_init_error ():
7490 config = server .load_config_simple (target_class = Config , failure_policy = 'raise' )
7591 set_config_instance (config )
7692 if not is_enabled ():
77- server .logger .warning ('{} is disabled by config' .format (mcdr_globals .metadata .name ))
93+ server .logger .warning ('{} is disabled by config' .format (self_name ))
94+ register_disabled_command ()
7895 return
7996
8097 task_manager = TaskManager ()
0 commit comments