Skip to content

Commit 8afa778

Browse files
committed
update README.md
1 parent 5b56720 commit 8afa778

File tree

1 file changed

+39
-29
lines changed

1 file changed

+39
-29
lines changed

README.md

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,26 @@
88

99
## 目的
1010

11+
hooks插件可以为脚本提供一系列的“钩子”(也就是hooks),让mcdr自动根据某些条件触发脚本,还提供了许多接口,让脚本的可定制化程度更高
12+
1113
有时,我们想要使用shell脚本管理服务器,但是不方便去让mc服务器全自动触发这些shell脚本,这个插件就是为了能更方便的使用各种脚本全自动维护/管理服务器,而无需为此特意编写一个mcdr插件,无需重复造轮子
1214

13-
他可以为shell脚本提供一系列的“钩子”(也就是hooks),还有许多接口,让脚本的可定制化程度更高
15+
甚至还可以用这个来调试,比如说你的mcdr出bug了,此时你想查看一下`server.is_server_running()`的返回值是什么,但是编写一个插件然后`print(server.is_server_running())`太麻烦了。这时候只需要`!!hooks create test1 server_command say {$server_func_is_server_running}`然后`!!hooks mount test1 on_user_info`然后就可以看到`is_server_running()`函数的结果了
16+
17+
总之玩法很多(
18+
19+
## hooks脚本相比mcdr插件的优势与劣势
20+
21+
优势:
22+
- 可以非常方便的热插拔各种任务以及任务被触发的条件
23+
- 使简单的脚本任务,编写起来更加简单,API的使用也更加简单(?
24+
- 原生支持多种类型的脚本,例如`shell`,使服务器管理更加方便
1425

15-
## 使用方法
26+
劣势:
27+
- 不如mcdr插件的可扩展性高
28+
- 复杂的脚本任务,编写起来也更加困难,所以编写复杂的任务还不如编写mcdr插件((
29+
30+
## 基本用法
1631

1732
### 几个概念
1833

@@ -38,9 +53,11 @@ Apply和加载有区别,Apply是指:**插件创建Task、挂载Task的操作
3853

3954
手动应用就是你自己打指令`!!hooks create ...`之类的,脚本自动应用就是插件加载脚本后自动解析脚本,然后根据脚本内容自动创建task,挂载之类的
4055

56+
两种应用方式本质上是相同的,只不过脚本自动应用手速更快(
57+
4158
### 应用方式
4259

43-
分为两种:手动应用和脚本自动应用,先介绍手动应用
60+
分为两种:手动应用和脚本自动应用
4461

4562
#### 手动应用
4663

@@ -54,6 +71,8 @@ Apply和加载有区别,Apply是指:**插件创建Task、挂载Task的操作
5471

5572
`!!hooks mount <task> <hook>`
5673

74+
- 挂载一个任务到一个hook
75+
5776
- `task` 要挂载的命令的名字
5877
- `hook` 要挂载到的钩子
5978
- 所有的合法hooks:(都是字面意思,很好理解)
@@ -80,7 +99,17 @@ Apply和加载有区别,Apply是指:**插件创建Task、挂载Task的操作
8099

81100
- 从一个hook卸载一个task
82101

83-
**注意:每一次!!hooks reload或者重载插件都会将所有task以及挂载信息删除,然后重新根据脚本进行应用,也就是说你手动应用的是留不住的,重载就没了,强烈建议写yaml脚本**
102+
**注意:每一次`!!hooks reload`或者重载插件都会将所有task以及挂载信息删除,然后重新根据脚本进行应用,也就是说你手动应用的是留不住的,重载就没了,强烈建议写yaml脚本**
103+
104+
`!!hooks schedule <name> <exec_interval> <task_type> <command>`
105+
106+
- 创建一个定时任务
107+
- 定时任务就是隔一段时间执行一次的任务,每一个定时任务都会被放到一个单独的线程调度,线程名`hooks - schedule_task_daemon(<任务名>)`,可以使用`!!MCDR status`查看
108+
109+
- `<name>`任务名字,定时任务本质上和任务一样,只不过多了执行间隔的属性
110+
- `<exec_interval>`执行间隔,单位秒,必须是整数
111+
- `<task_type>`任务类型
112+
- `<command>`指令
84113

85114
#### 脚本自动应用
86115

@@ -105,20 +134,6 @@ tasks: # 普通任务
105134

106135
将其命名为`<脚本名字>.yaml`,并且放到`config/hooks/scripts`文件夹或子文件夹中
107136

108-
### 定时任务(`schedule_task`
109-
110-
定时任务就是隔一段时间执行一次的任务
111-
112-
每一个定时任务都会被放到一个单独的线程调度,线程名`hooks - schedule_task_daemon(<任务名>)`,可以使用`!!MCDR status`查看
113-
114-
#### 指令
115-
116-
`!!hooks schedule <name> <exec_interval> <task_type> <command>`
117-
- `<name>`任务名字,定时任务本质上和任务一样,只不过多了执行间隔的属性
118-
- `<exec_interval>`执行间隔,单位秒,必须是整数
119-
- `<task_type>`任务类型
120-
- `<command>`指令
121-
122137
### 其他指令
123138

124139
`!!hooks list mount`
@@ -127,11 +142,17 @@ tasks: # 普通任务
127142
`!!hooks list task`
128143
- 显示所有被创建的task
129144

145+
`!!hooks list scripts`
146+
- 显示所有被加载的脚本
147+
130148
`!!hooks run <task> <env>`
131149
- 手动执行任务(跟挂没挂载没关系)
132150
- `<task>` 任务名
133151
- `<env>` 参数列表(具体用法往下看),必须用`json`格式
134152

153+
`!!hooks clear`
154+
- 一键清除所有task(别问我有啥用
155+
135156
## 高级用法
136157

137158
### 获取“参数”
@@ -215,17 +236,6 @@ def on_mcdr_start(server: PluginServerInterface):
215236
``````
216237
这样的代码,先看函数名`on_mcdr_start`,就能大致判断这块代码负责触发`on_mcdr_started`,再看`trigger_hooks(...)`,括号里面的最后一个参数是一个`dict`,只有一个`server`键对值,说明最终脚本可以访问到的参数全都在`PluginServerInterface`类中,然后看就完了((((逃
217238

218-
## hooks脚本相比mcdr插件的优势与劣势
219-
220-
优势:
221-
- 可以非常方便的热插拔各种任务以及任务被触发的条件
222-
- 使简单的脚本任务,编写起来更加简单,API的使用也更加简单(?
223-
- 原生支持多种类型的脚本,例如`shell`,使服务器管理更加方便
224-
225-
劣势:
226-
- 不如mcdr插件的可扩展性高
227-
- 复杂的脚本任务,编写起来也更加困难,所以编写复杂的任务还不如编写mcdr插件((
228-
229239
## 实例
230240

231241
### 1. 玩家非正常退出报告

0 commit comments

Comments
 (0)