Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f886ca2ed5 | |||
| ffe6930599 | |||
| 1bfe996fb5 | |||
| 4c66b76e1f | |||
| ab37f056d7 | |||
| caad1117c3 | |||
| 6ac7cbc246 | |||
| 6a26940eef | |||
| dec77bb496 | |||
| 8325f9ec08 |
@@ -18,6 +18,7 @@
|
|||||||
"values": ...
|
"values": ...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
- ***函数和标签是否能被扩展数据包成功覆盖,取决于数据包加载顺序***,请使用`/datapack enable <xxx> after <xxx>`指令,使您的扩展数据包在FZ's Survival Datapack之后加载
|
||||||
|
|
||||||
|
|
||||||
## 基本要求
|
## 基本要求
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
|
|
||||||
FZSD许可证
|
FZSD许可协议
|
||||||
|
|
||||||
2022/8/1 https://gitee.com/harvey-husky/fz-survival-datapack/blob/dev/3.0/LICENSE
|
2022/11/19 https://gitee.com/harvey-husky/fz-survival-datapack/blob/dev/3.0/LICENSE
|
||||||
|
|
||||||
版权所有 © 2019-2022 延皓<https://gitee.com/harvey-husky><https://space.bilibili.com/677233356>
|
版权所有 © 2019-2022 延皓<https://gitee.com/harvey-husky><https://space.bilibili.com/677233356>
|
||||||
|
|
||||||
定义:
|
定义:
|
||||||
“该许可证”指FZSD许可证。
|
“该许可协议”指FZSD许可协议。
|
||||||
“该软件”指许可在该许可证下的程序和相关文档的集合。
|
“该软件”指许可在该许可协议下的程序和相关文档的集合。
|
||||||
“官方网址”指由版权所有者提供的该软件的发布网址。
|
“官方网址”指由版权所有者提供的该软件的发布网址。
|
||||||
|
|
||||||
您对该软件的复制、使用、修改及分发受如下条款的约束:
|
您对该软件的复制、使用、修改及分发受如下条款的约束:
|
||||||
1. 禁止添加、修改或删除该许可证的内容。
|
1. 禁止添加、修改或删除该许可协议的内容。
|
||||||
2. 禁止未经授权的转载、销售或二次发布该软件。
|
2. 禁止未经授权的转载、销售或二次发布该软件。
|
||||||
3. 禁止添加、修改或抹除该软件中的原作者署名。
|
3. 禁止添加、修改或抹除该软件中的原作者署名。
|
||||||
4. 如果您从部署了该软件的Minecraft服务器中以任何方式获取了收益,则您必须在游戏中的明显位置明确告知用户您的Minecraft服务器使用了该软件,并附上官方网址。
|
4. 如果您从部署了该软件的Minecraft服务器中以任何方式获取了收益,则您必须在游戏中的明显位置明确告知用户您的Minecraft服务器使用了该软件,并附上该软件的官方网址。
|
||||||
5. 如果您修改了该软件中的任何内容,您必须将修改部分开源在主流开源平台(如gitee<https://gitee.com/>或github<https://github.com/>等)。
|
5. 如果您修改了该软件中的任何内容,您必须将修改部分开源在主流开源平台(如gitee<https://gitee.com/>或github<https://github.com/>等)。
|
||||||
6. 如果您修改了该软件中的任何内容,您必须保留该许可证,但您可以追加其他许可证(不包括不支持附加条款的许可证)。当您添加的许可证中的条款与该许可证冲突时,必须以该许可证为准。
|
6. 如果您修改了该软件中的任何内容,您必须保留该许可协议,但您可以追加其他许可协议(不包括不支持附加条款的许可协议)。当您添加的许可协议中的条款与该许可协议冲突时,必须以该许可协议为准。
|
||||||
7. 该软件在提供时不带任何明示或默示的担保。在任何情况下,版权所有者不对任何人因使用该软件而引发的任何直接或间接损失承担任何责任。
|
7. 该软件在提供时不带任何明示或默示的担保。在任何情况下,版权所有者不对任何人因使用该软件而引发的任何直接或间接损失承担任何责任。
|
||||||
@@ -20,12 +20,12 @@
|
|||||||
4. 将数据包 `zip` 文件放入 `world/datapacks` 中(在客户端位于 `.minecraft/saves/<存档名>/datapacks`)
|
4. 将数据包 `zip` 文件放入 `world/datapacks` 中(在客户端位于 `.minecraft/saves/<存档名>/datapacks`)
|
||||||
5. (可选)下载并安装 [Carpet Mod **1.4.24**](https://github.com/gnembon/fabric-carpet/releases) 或以上版本
|
5. (可选)下载并安装 [Carpet Mod **1.4.24**](https://github.com/gnembon/fabric-carpet/releases) 或以上版本
|
||||||
6. (可选)从数据包 `zip` 文件的 `scripts` 目录中解压 `.sc` 文件,将其放入 `world/scripts` 中(在客户端位于 `.minecraft/saves/<存档名>/scripts` )
|
6. (可选)从数据包 `zip` 文件的 `scripts` 目录中解压 `.sc` 文件,将其放入 `world/scripts` 中(在客户端位于 `.minecraft/saves/<存档名>/scripts` )
|
||||||
7. 执行 `reload` 指令(或重新打开存档)
|
7. 执行 `reload` 指令(或重新打开存档;在一些第三方服务端中可能需要改为`/minecraft:reload`)
|
||||||
|
|
||||||
|
|
||||||
# FZ生存数据包 3.0
|
# FZ生存数据包 3.0
|
||||||
|
|
||||||
[](https://gitee.com/harvey-husky/FZ-sDatapack/releases) [](https://minecraft.net/)
|
[](https://gitee.com/harvey-husky/FZ-sDatapack/releases) [](https://minecraft.net/)
|
||||||
|
|
||||||
> 其他版本见[发行页面](https://gitee.com/harvey-husky/FZ-sDatapack/releases)
|
> 其他版本见[发行页面](https://gitee.com/harvey-husky/FZ-sDatapack/releases)
|
||||||
|
|
||||||
@@ -79,12 +79,17 @@
|
|||||||
- `reset <player> <scoreboardID>`:重置该玩家该计分板的分数
|
- `reset <player> <scoreboardID>`:重置该玩家该计分板的分数
|
||||||
- `restore player <玩家名> <计分板ID>`:恢复该玩家的该计分板分数
|
- `restore player <玩家名> <计分板ID>`:恢复该玩家的该计分板分数
|
||||||
- `restore player <玩家名>`:恢复该玩家的所有计分板分数
|
- `restore player <玩家名>`:恢复该玩家的所有计分板分数
|
||||||
- `restore whitelist <玩家名> <计分板ID>`:恢复所有白名单玩家的该计分板分数
|
- `restore whitelist <计分板ID>`:恢复所有白名单玩家的该计分板分数
|
||||||
- `restore whitelist <玩家名>`:恢复所有白名单玩家的所有计分板分数
|
- `restore whitelist`:恢复所有白名单玩家的所有计分板分数
|
||||||
- *副作用:恢复完成后玩家会被放置在出生点,请确保出生点完全安全*
|
- *副作用:恢复完成后玩家会被放置在出生点,请确保出生点完全安全*
|
||||||
- `commandPlayer <permissionType>`:设置player命令权限类型
|
- `commandPlayer <permissionType>`:设置player命令权限类型
|
||||||
|
|
||||||
|
### 管理员
|
||||||
|
|
||||||
|
- 使用`/function admin.fzsd:admin`命令管理(安装、卸载等)各模块
|
||||||
|
|
||||||
### 其他
|
### 其他
|
||||||
|
|
||||||
- 见游戏内交互器按钮
|
- 见游戏内交互器按钮
|
||||||
|
|
||||||
## 开发者相关
|
## 开发者相关
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
execute if score @s fzsd.module.last_nether_portal.dimension matches -2147483648..2147483647 run tellraw @a [{"text": ""}, [{"selector": "@s"}, {"text": "说:我上次穿出的下界传送门位于", "color": "white"}, {"nbt": "fzsd.api.dimension.name", "interpret": true, "storage": "fzsd:global"}, [{"text": " [", "color": "green"}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.x"}}, {"text": ", "}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.z"}}, {"text": ", "}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.z"}}, {"text": "]"}]]]
|
execute if score @s fzsd.module.last_nether_portal.dimension matches -2147483648..2147483647 run tellraw @a [{"text": ""}, [{"selector": "@s"}, {"text": "说:我上次穿出的下界传送门位于", "color": "white"}, {"nbt": "fzsd.api.dimension.name", "interpret": true, "storage": "fzsd:global"}, [{"text": " [", "color": "green"}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.x"}}, {"text": ", "}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.y"}}, {"text": ", "}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.z"}}, {"text": "]"}]]]
|
||||||
execute unless score @s fzsd.module.last_nether_portal.dimension matches -2147483648..2147483647 run tellraw @s {"text": "你从未穿出过下界传送门!"}
|
execute unless score @s fzsd.module.last_nether_portal.dimension matches -2147483648..2147483647 run tellraw @s {"text": "你从未穿出过下界传送门!"}
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
execute if score @s fzsd.module.last_nether_portal.dimension matches -2147483648..2147483647 run tellraw @s [{"text": "你上次穿出的下界传送门位于"}, {"nbt": "fzsd.api.dimension.name", "interpret": true, "storage": "fzsd:global"}, [{"text": " [", "color": "green"}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.x"}}, {"text": ", "}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.z"}}, {"text": ", "}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.z"}}, {"text": "]"}]]
|
execute if score @s fzsd.module.last_nether_portal.dimension matches -2147483648..2147483647 run tellraw @s [{"text": "你上次穿出的下界传送门位于"}, {"nbt": "fzsd.api.dimension.name", "interpret": true, "storage": "fzsd:global"}, [{"text": " [", "color": "green"}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.x"}}, {"text": ", "}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.y"}}, {"text": ", "}, {"score": {"name": "@s", "objective": "fzsd.module.last_nether_portal.z"}}, {"text": "]"}]]
|
||||||
execute unless score @s fzsd.module.last_nether_portal.dimension matches -2147483648..2147483647 run tellraw @s {"text": "你从未穿出过下界传送门!"}
|
execute unless score @s fzsd.module.last_nether_portal.dimension matches -2147483648..2147483647 run tellraw @s {"text": "你从未穿出过下界传送门!"}
|
||||||
+97
-28
@@ -1,7 +1,66 @@
|
|||||||
// 计分板模块扩展插件
|
// 计分板模块扩展插件
|
||||||
// 忽略假人分数
|
// 忽略假人分数
|
||||||
// **请勿修改文件名!!**
|
// **请勿修改文件名!!**
|
||||||
global_app_version = '1.0-beta.13';
|
|
||||||
|
//** 工具函数 **//
|
||||||
|
|
||||||
|
contains(list, value) -> (
|
||||||
|
return(list ~ value != null);
|
||||||
|
);
|
||||||
|
|
||||||
|
debug(msg) -> (
|
||||||
|
logger('debug', msg);
|
||||||
|
return();
|
||||||
|
);
|
||||||
|
|
||||||
|
require_not_null(value) -> (
|
||||||
|
if(value == null, throw('空指针异常!'));
|
||||||
|
return(value);
|
||||||
|
);
|
||||||
|
|
||||||
|
require_version(requirement) -> (
|
||||||
|
req_0 = slice(requirement, 0, 1);
|
||||||
|
req_1 = slice(requirement, 1, 2);
|
||||||
|
if(req_0 == '>',
|
||||||
|
if(req_1 == '=',
|
||||||
|
req_ver = split('>=|\\.', requirement);
|
||||||
|
print(player('all'), req_ver);
|
||||||
|
cur_ver = split('\\.', global_carpet_version);
|
||||||
|
return(number(req_ver:1) >= number(cur_ver:0)
|
||||||
|
&& number(req_ver:2) >= number(cur_ver:1)
|
||||||
|
&& number(req_ver:3) >= number(cur_ver:2));
|
||||||
|
);
|
||||||
|
req_ver = split('>|\\.', requirement);
|
||||||
|
print(player('all'), req_ver);
|
||||||
|
cur_ver = split('\\.', global_carpet_version);
|
||||||
|
return(number(req_ver:1) > number(cur_ver:0)
|
||||||
|
&& number(req_ver:2) > number(cur_ver:1)
|
||||||
|
&& number(req_ver:3) > number(cur_ver:2));
|
||||||
|
);
|
||||||
|
if(req_0 == '<',
|
||||||
|
if(req_1 == '=',
|
||||||
|
req_ver = split('<=|\\.', requirement);
|
||||||
|
print(player('all'), req_ver);
|
||||||
|
cur_ver = split('\\.', global_carpet_version);
|
||||||
|
return(number(req_ver:1) <= number(cur_ver:0)
|
||||||
|
&& number(req_ver:2) <= number(cur_ver:1)
|
||||||
|
&& number(req_ver:3) <= number(cur_ver:2));
|
||||||
|
);
|
||||||
|
req_ver = split('<|\\.', requirement);
|
||||||
|
print(player('all'), req_ver);
|
||||||
|
cur_ver = split('\\.', global_carpet_version);
|
||||||
|
return(number(req_ver:1) < number(cur_ver:0)
|
||||||
|
&& number(req_ver:2) < number(cur_ver:1)
|
||||||
|
&& number(req_ver:3) < number(cur_ver:2));
|
||||||
|
);
|
||||||
|
return(false);
|
||||||
|
);
|
||||||
|
|
||||||
|
//** 主要逻辑 **//
|
||||||
|
|
||||||
|
global_app_name = system_info('app_name');
|
||||||
|
global_app_version = '1.1-beta.1';
|
||||||
|
global_carpet_version = split('\\+', system_info('scarpet_version')):0;
|
||||||
global_current_scoreboard_list = [
|
global_current_scoreboard_list = [
|
||||||
'fzsd.module.scoreboard.display.activation',
|
'fzsd.module.scoreboard.display.activation',
|
||||||
'fzsd.module.scoreboard.display.damage_taken',
|
'fzsd.module.scoreboard.display.damage_taken',
|
||||||
@@ -14,13 +73,12 @@ global_current_scoreboard_list = [
|
|||||||
'fzsd.module.scoreboard.display.aviating_distance',
|
'fzsd.module.scoreboard.display.aviating_distance',
|
||||||
'fzsd.module.scoreboard.display.placement_count'
|
'fzsd.module.scoreboard.display.placement_count'
|
||||||
];
|
];
|
||||||
global_app_name = system_info('app_name');
|
|
||||||
|
|
||||||
__config() -> {
|
__config() -> {
|
||||||
'scope' -> 'global',
|
'scope' -> 'global',
|
||||||
'requires' -> {
|
'requires' -> {
|
||||||
'carpet' -> '>=1.4.45',
|
'carpet' -> '>=1.4.45',
|
||||||
'minecraft' -> '>=1.17'
|
'minecraft' -> '>=1.18'
|
||||||
},
|
},
|
||||||
'command_permission' -> 2,
|
'command_permission' -> 2,
|
||||||
'commands' -> {
|
'commands' -> {
|
||||||
@@ -34,8 +92,8 @@ __config() -> {
|
|||||||
'restore player <playerName> <scoreboardID>' -> 'command_restore',
|
'restore player <playerName> <scoreboardID>' -> 'command_restore',
|
||||||
'restore <custom> whitelist <trade_count>' -> _(custom, trade_count) -> command_restore_trade_count_confirm(custom, null, trade_count),
|
'restore <custom> whitelist <trade_count>' -> _(custom, trade_count) -> command_restore_trade_count_confirm(custom, null, trade_count),
|
||||||
'restore <custom> player <playerName> <trade_count>' -> 'command_restore_trade_count_confirm',
|
'restore <custom> player <playerName> <trade_count>' -> 'command_restore_trade_count_confirm',
|
||||||
'recalculate <scoreboardID>' -> 'recalculate_total_score',
|
'recalculate <scoreboardID>' -> 'command_recalculate_total_score',
|
||||||
'recalculate' -> ['recalculate_total_score', null],
|
'recalculate' -> ['command_recalculate_total_score', null],
|
||||||
'commandPlayer <permissionType>' -> 'carpet_command_player',
|
'commandPlayer <permissionType>' -> 'carpet_command_player',
|
||||||
'reset <scoreboardPlayer> <scoreboardID>' -> 'command_reset',
|
'reset <scoreboardPlayer> <scoreboardID>' -> 'command_reset',
|
||||||
'reset <scoreboardPlayer>' -> ['command_reset', null],
|
'reset <scoreboardPlayer>' -> ['command_reset', null],
|
||||||
@@ -87,6 +145,22 @@ __config() -> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
__on_start() -> (
|
__on_start() -> (
|
||||||
|
// 读取配置文件
|
||||||
|
global_config = read_file('config', 'json');
|
||||||
|
if(global_config == null, // carpet 1.4.69 兼容
|
||||||
|
global_config = {};
|
||||||
|
);
|
||||||
|
if(length(global_config) == 0, // 读取失败或不存在
|
||||||
|
delete_file('config', 'json'); // 避免一些意外的问题
|
||||||
|
global_config:'config_version' = '1.0.0'; // 占位用,无实际作用
|
||||||
|
if(require_version('>=1.99.99'), // 等待新功能支持
|
||||||
|
global_config:'allow_spawn_whitelist_player' = false;
|
||||||
|
write_file('config', 'json', global_config);
|
||||||
|
,
|
||||||
|
// else
|
||||||
|
write_file('config', 'json', global_config);
|
||||||
|
);
|
||||||
|
);
|
||||||
global_team_cache = read_file('team_cache', 'json');
|
global_team_cache = read_file('team_cache', 'json');
|
||||||
if(global_team_cache == null, // carpet 1.4.69 兼容
|
if(global_team_cache == null, // carpet 1.4.69 兼容
|
||||||
global_team_cache = {};
|
global_team_cache = {};
|
||||||
@@ -99,6 +173,17 @@ __on_close() -> (
|
|||||||
write_file('team_cache', 'json', global_team_cache);
|
write_file('team_cache', 'json', global_team_cache);
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if(require_version('>=1.99.99'), // 等待新功能支持
|
||||||
|
__on_player_command(player, message) -> (
|
||||||
|
print(player('all'), 'command!');
|
||||||
|
if(length(message) > 7
|
||||||
|
&& slice(message, 0, 7) == '/player'
|
||||||
|
&& !(global_config:'allow_spawn_whitelist_player'),
|
||||||
|
return('cancel');
|
||||||
|
);
|
||||||
|
);
|
||||||
|
);
|
||||||
|
|
||||||
__on_player_connects(player) -> (
|
__on_player_connects(player) -> (
|
||||||
player_type = player ~ 'player_type';
|
player_type = player ~ 'player_type';
|
||||||
player_team = player ~ 'team';
|
player_team = player ~ 'team';
|
||||||
@@ -156,12 +241,12 @@ command_reset(player, scoreboard) -> (
|
|||||||
for(scoreboard(),
|
for(scoreboard(),
|
||||||
scoreboard_remove(_, player);
|
scoreboard_remove(_, player);
|
||||||
);
|
);
|
||||||
recalculate_total_score(null);
|
command_recalculate_total_score(null);
|
||||||
print('已重置' + player + '的所有分数');
|
print('已重置' + player + '的所有分数');
|
||||||
return();
|
return();
|
||||||
);
|
);
|
||||||
scoreboard_remove(scoreboard, player);
|
scoreboard_remove(scoreboard, player);
|
||||||
recalculate_total_score(scoreboard);
|
command_recalculate_total_score(scoreboard);
|
||||||
print('已重置' + player + '的' + scoreboard + '分数');
|
print('已重置' + player + '的' + scoreboard + '分数');
|
||||||
return();
|
return();
|
||||||
);
|
);
|
||||||
@@ -269,7 +354,7 @@ command_update(fzsd_version) -> (
|
|||||||
print('参数错误!');
|
print('参数错误!');
|
||||||
return();
|
return();
|
||||||
);
|
);
|
||||||
recalculate_total_score(null);
|
command_recalculate_total_score(null);
|
||||||
print('已从' + fzsd_version + '升级!');
|
print('已从' + fzsd_version + '升级!');
|
||||||
return();
|
return();
|
||||||
);
|
);
|
||||||
@@ -357,9 +442,9 @@ get_total_score_name_new(scoreboard) -> (
|
|||||||
);
|
);
|
||||||
|
|
||||||
// 重算总分,scoreboard == null 时重算所有总分
|
// 重算总分,scoreboard == null 时重算所有总分
|
||||||
recalculate_total_score(scoreboard) -> (
|
command_recalculate_total_score(scoreboard) -> (
|
||||||
if(scoreboard == null,
|
if(scoreboard == null,
|
||||||
for(global_current_scoreboard_list, recalculate_total_score(_));
|
for(global_current_scoreboard_list, command_recalculate_total_score(_));
|
||||||
return();
|
return();
|
||||||
);
|
);
|
||||||
total_score_name_new = get_total_score_name_new(scoreboard);
|
total_score_name_new = get_total_score_name_new(scoreboard);
|
||||||
@@ -503,7 +588,7 @@ restore_score(player_name, scoreboard) -> (
|
|||||||
print('未识别的计分板ID!' + scoreboard);
|
print('未识别的计分板ID!' + scoreboard);
|
||||||
return(false);
|
return(false);
|
||||||
);
|
);
|
||||||
recalculate_total_score(scoreboard);
|
command_recalculate_total_score(scoreboard);
|
||||||
if(player_is_offline,
|
if(player_is_offline,
|
||||||
world_spawn = system_info('world_spawn_point');
|
world_spawn = system_info('world_spawn_point');
|
||||||
run('spreadplayers ' + world_spawn:0 + ' ' + world_spawn:2 + ' 0 10 false ' + player);
|
run('spreadplayers ' + world_spawn:0 + ' ' + world_spawn:2 + ' 0 10 false ' + player);
|
||||||
@@ -548,22 +633,6 @@ carpet_command_player(level) -> (
|
|||||||
command_set(player, scoreboard, score) -> (
|
command_set(player, scoreboard, score) -> (
|
||||||
i = scoreboard(scoreboard, player, score);
|
i = scoreboard(scoreboard, player, score);
|
||||||
print('玩家' + player + '修改前的分数为:' + i);
|
print('玩家' + player + '修改前的分数为:' + i);
|
||||||
recalculate_total_score(scoreboard);
|
command_recalculate_total_score(scoreboard);
|
||||||
return(i);
|
return(i);
|
||||||
);
|
);
|
||||||
|
|
||||||
// 工具函数
|
|
||||||
|
|
||||||
contains(list, value) -> (
|
|
||||||
return(list ~ value != null);
|
|
||||||
);
|
|
||||||
|
|
||||||
debug(msg) -> (
|
|
||||||
logger('debug', msg);
|
|
||||||
return();
|
|
||||||
);
|
|
||||||
|
|
||||||
require_not_null(value) -> (
|
|
||||||
if(value == null, throw('空指针异常!'));
|
|
||||||
return(value);
|
|
||||||
);
|
|
||||||
Reference in New Issue
Block a user