This commit is contained in:
Harvey_Husky 2024-05-12 22:03:28 +08:00
parent 218b24b4a4
commit d6124efa12
20 changed files with 310 additions and 135 deletions

23
.vscode/settings.json vendored
View File

@ -17,6 +17,25 @@
"storageText": "{\"nbt\": \"${1:NBT}\", \"interpret\": true, \"storage\": \"${2:A namespaced ID}\"}",
"ifInstalled": "execute if data storage fzsd:installed fzsd.module{${1:module_name}:1b} run ${tellraw}"
},
"datapack.env.cmdVersion": "1.20.2",
"datapack.env.dataVersion": "1.20.4"
"datapack.env.exclude": [
"data/fzsd/functions/system/carpet/*"
],
"datapack.lint.blockStateCommaSpacing": {
"before": 0,
"after": 1
},
"datapack.lint.blockStateEqualSpacing": {
"before": 1,
"after": 1
},
"datapack.lint.selectorCommaSpacing": {
"before": 0,
"after": 1
},
"datapack.lint.selectorEqualSpacing": {
"before": 1,
"after": 1
},
"datapack.env.cmdVersion": "1.20.3",
"datapack.env.dataVersion": "1.20.6"
}

View File

@ -1,73 +1,85 @@
# 开发文档
## 指引
- `函数`,指数据包`<命名空间>/functions`目录下的`.mcfunction`文件
- `标签`,指数据包`<命名空间>/tags`目录下的`.json`文件
- `覆盖标签并填入函数`时,`replace`为`true`
``` json
{
"replace": true,
"values": ...
}
```
- `向标签中注册函数`时,`replace`为`false`
``` json
{
"replace": false,
"values": ...
}
```
- `覆盖标签并填入函数`时,`replace`为`true`
``` json
{
"replace": true,
"values": ...
}
```
- `向标签中注册函数`时,`replace`为`false`
``` json
{
"replace": false,
"values": ...
}
```
- ***函数和标签是否能被扩展数据包成功覆盖,取决于数据包加载顺序***,请使用`/datapack enable <xxx> after <xxx>`指令使您的扩展数据包在FZ's Survival Datapack之后加载
## 基本要求
- 函数由两个以上的函数调用,或由不同包下的函数调用,或需要作为接口开放给下游数据包时,应改用标签调用!
- 函数调用尽量不要使用`function`命令,应改在标签中按顺序调用!
## 系统模块
### 频繁使用的计算单元
- [`#fzsd:calculation/*`](data/fzsd/tags/functions/calculation/)标签通常被用来进行简单重复的计算任务
### 事件模块
- 通常由**进度**触发,触发后调用同名的事件标签
- 在[`#fzsd:game_event/(<...>/)on_<事件>`](data/fzsd/tags/functions/game_event/)标签中注册触发时需要调用的函数即可
### 日志模块
- 仓库中提供了日志相关的代码片段,位于[`.vscode/settings.json`](.vscode/settings.json)
- 暂时没有找到方法在服务端控制台打印日志,但会被记录在客户端
#### 详细 Fine
- 等级300
- 使用方法:`execute if score fzsd.logger.level fzsd.variable.integer matches ..300 run tellraw @a [{"nbt": "fzsd.level.fine", "interpret": true, "storage": "fzsd:logger"}, {"text": "你的日志"}`
#### 调试 Debug
- 等级400
- 使用方法:`execute if score fzsd.logger.level fzsd.variable.integer matches ..400 run tellraw @a [{"nbt": "fzsd.level.debug", "interpret": true, "storage": "fzsd:logger"}, {"text": "你的日志"}`
#### 信息 Info
- 等级500
- 使用方法:`execute if score fzsd.logger.level fzsd.variable.integer matches ..500 run tellraw @a [{"nbt": "fzsd.level.info", "interpret": true, "storage": "fzsd:logger"}, {"text": "你的日志"}`
#### 提醒 Alert
- 等级600
- 使用方法:`execute if score fzsd.logger.level fzsd.variable.integer matches ..600 run tellraw @a [{"nbt": "fzsd.level.alert", "interpret": true, "storage": "fzsd:logger"}, {"text": "你的日志"}`
#### 意外 Exception
- 暂不提供
#### 错误 Error
- 等级800
- 使用方法:`execute if score fzsd.logger.level fzsd.variable.integer matches ..800 run tellraw @a [{"nbt": "fzsd.level.error", "interpret": true, "storage": "fzsd:logger"}, {"text": "你的日志"}`
## 功能模块
### 交互器模块
#### 按钮操作
1. 定义一个显示按钮时执行的函数,使用形如`tellraw @s {"text": "[按钮]", "clickEvent": {"action": "run_command", "value": "/trigger fzsd.module.interactor.trigger set <触发器分数>"}}`的指令定义按钮。
- *触发器分数为正数会重新向玩家发送交互按钮,如不想重新发送,请使用负数*
- 大多数情况下这里的触发器分数必须是独一无二的
@ -77,19 +89,23 @@
4. 在[`#fzsd:module/interactor/event/on_click`](data/fzsd/tags/functions/module/interactor/event/on_click.json)标签中注册上述函数
#### 其他标签
- 标签[`#fzsd:module/interactor/reset_trigger`](data/fzsd/tags/functions/module/interactor/reset_trigger.json):重置玩家`@s`的触发器计分板
### 计分板模块
#### 自定义计分板颜色
- 数据包提供了所有计分板的全部16色命名函数
- 使用方法:**覆盖**[`#fzsd:module/scoreboard/display/set_text/<计分板名称>`](data/fzsd/tags/functions/module/scoreboard/display/set_text/)标签,填入[`fzsd:module/scoreboard/display/set_text/<计分板名称>/<颜色名称>`](data/fzsd/functions/module/scoreboard/display/set_text/)函数
#### 自定义计分板名称
1. 定义一个设置计分板颜色、文本的函数,格式可以参考[`fzsd:module/scoreboard/display/set_text/general/*`](data/fzsd/functions/module/scoreboard/display/set_text/general/)函数
2. **覆盖**[`#fzsd:module/scoreboard/display/set_text/<计分板名称>`](data/fzsd/tags/functions/module/scoreboard/display/set_text/)标签,填入上述函数
#### 扩展自己的计分板
1. 定义一个安装函数,参考[`fzsd:module/scoreboard/install`](data/fzsd/functions/module/scoreboard/install.mcfunction)函数
2. 在[`#fzsd:module/scoreboard/install`](data/fzsd/tags/functions/module/scoreboard/install.json)标签中注册该函数
3. 按照“自定义计分板颜色”和“自定义计分板名称”中的操作,定义你的计分板颜色和名称
@ -99,18 +115,20 @@
7. 定义一个用来判断在轮播时是否轮到你的计分板的函数,在判断后调用上一条中的函数,参考[`fzsd:module/scoreboard/display/carousel/try_display/*`](data/fzsd/functions/module/scoreboard/display/carousel/try_display/activation.mcfunction)函数
8. 将该函数注册到[`#fzsd:module/scoreboard/display/try_display`](data/fzsd/tags/functions/module/scoreboard/display/carousel/try_display.json)标签中
## 自定义模块
### 排除假人
- 如果您不想对假人执行您的命令,请将以下语句添加在您要执行的命令之前:
<pre><code><font color=ee82ee>execute </font><font color=1e90ff>if predicate </font><font color=f0e68c>fzsd:is_real_player</font></code></pre>
#### 注册安装、卸载、加载函数
- 在下列标签中注册你的安装、卸载、加载函数:
- [`#fzsd:system/install/module`](data/fzsd/tags/functions/system/install/module.json)
- [`#fzsd:system/uninstall/module`](data/fzsd/tags/functions/system/uninstall/module.json)
- [`#fzsd:system/load/module`](data/fzsd/tags/functions/system/load/module.json)
- [`#fzsd:system/install/module`](data/fzsd/tags/functions/system/install/module.json)
- [`#fzsd:system/uninstall/module`](data/fzsd/tags/functions/system/uninstall/module.json)
- [`#fzsd:system/load/module`](data/fzsd/tags/functions/system/load/module.json)
#### 注册交互器按钮
- 见[交互器按钮](#按钮操作)

View File

@ -1,12 +1,16 @@
# FZ生存数据包
# FZ生存数据包 v3.1
为FZ服务器写的Minecraft生存辅助数据包
[![数据包版本](https://img.shields.io/badge/正式版-3.1.7-blue.svg)](https://gitee.com/harvey-husky/FZ-sDatapack/releases) [![MC版本](https://img.shields.io/badge/Minecraft-1.20+-blue.svg)](https://minecraft.net/)
> 其他版本见[发行页面](https://gitee.com/harvey-husky/FZ-sDatapack/releases)
## 安装教程
1. 兼容性
- `数据包 v3.1.x` 支持 `Minecraft 1.20.x`
- `数据包 v3.0.x` 支持 `Minecraft 1.18.2-1.19.x`
- `数据包 v3.0.x` 支持 `Minecraft 1.18.2-1.19.x` (不再维护)
2. 前往[发行页面](https://gitee.com/harvey-husky/FZ-sDatapack/releases)下载对应MC版本的数据包
3. 将数据包 `zip` 文件放入 `world/datapacks` 中(在客户端位于 `.minecraft/saves/<存档名>/datapacks`
4. (可选)下载并安装 [Carpet Mod](https://github.com/gnembon/fabric-carpet/releases)
@ -14,12 +18,6 @@
- **注意:如果未正确安装该脚本,数据包会强制禁用 carpet mod 的 `player` 命令以避免假人污染记分板,需要在安装好脚本后手动启用 `player` 命令**
6. 执行 `reload` 指令(或重新打开存档;在一些第三方服务端中可能需要改为`/minecraft:reload`
# FZ生存数据包 3.1
[![数据包版本](https://img.shields.io/badge/正式版-3.1.7-blue.svg)](https://gitee.com/harvey-husky/FZ-sDatapack/releases) [![MC版本](https://img.shields.io/badge/Minecraft-1.20+-blue.svg)](https://minecraft.net/)
> 其他版本见[发行页面](https://gitee.com/harvey-husky/FZ-sDatapack/releases)
## 功能
### 交互器
@ -77,6 +75,9 @@
- 可避免Carpet假人污染计分板
- 可以标记哪些玩家是假人
- 子命令( `/fzsd_score <子命令>`
- ***使用前请务必备份存档!请报告不符预期的结果***
- ***使用前请务必备份存档!请报告不符预期的结果***
- ***使用前请务必备份存档!请报告不符预期的结果***
- `updateFrom <version>`:用于从给定的数据包版本恢复计分板数据(需要测试!)
- `recalculate`:重新计算所有计分板总分
- `recalculate <scoreboardID>`:重新计算该计分板总分
@ -91,7 +92,8 @@
- `commandPlayer <permissionType>`设置player命令权限类型
### 幻翼预警
- 首次使用需要先睡一觉
- 首次使用需要先睡一觉
### 管理员

View File

@ -0,0 +1,22 @@
{
"parent": "fzsd:game_event",
"criteria": {
"on_fished": {
"trigger": "minecraft:fishing_rod_hooked",
"conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fzsd:is_real_player"
}
],
"item": {
"items": "#fzsd:raw_fishes"
}
}
}
},
"rewards": {
"function": "fzsd:game_event/advancement/on_fished"
}
}

View File

@ -0,0 +1,30 @@
{
"parent": "fzsd:game_event",
"criteria": {
"on_hurt_entity_with_tools": {
"trigger": "minecraft:player_hurt_entity",
"conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fzsd:is_real_player"
},
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"items": "#fzsd:tools"
}
}
}
}
]
}
}
},
"rewards": {
"function": "fzsd:game_event/advancement/on_hurt_entity_with_tools"
}
}

View File

@ -1,9 +1,8 @@
{
"parent": "fzsd:game_event",
"parent": "fzsd:game_event/on_placed_block",
"criteria": {
"on_tools_exclude_axes_used_on_block": {
"__comment": "斧子剥树皮会触发两次!",
"trigger": "minecraft:item_used_on_block",
"on_placed_liquid": {
"trigger": "minecraft:placed_block",
"conditions": {
"location": [
{
@ -11,9 +10,11 @@
"name": "fzsd:is_real_player"
},
{
"condition": "minecraft:match_tool",
"condition": "minecraft:location_check",
"predicate": {
"tag": "fzsd:tools_exclude_axes"
"block": {
"blocks": "#fzsd:liquid"
}
}
}
]
@ -21,6 +22,6 @@
}
},
"rewards": {
"function": "fzsd:game_event/advancement/on_tools_used_on_block"
"function": "fzsd:game_event/advancement/on_placed_block/on_placed_liquid"
}
}

View File

@ -0,0 +1,31 @@
{
"parent": "fzsd:game_event/on_placed_block",
"criteria": {
"on_placed_solid": {
"trigger": "minecraft:placed_block",
"conditions": {
"location": [
{
"condition": "minecraft:reference",
"name": "fzsd:is_real_player"
},
{
"condition": "minecraft:inverted",
"term":
{
"condition": "minecraft:location_check",
"predicate": {
"block": {
"blocks": "#fzsd:liquid"
}
}
}
}
]
}
}
},
"rewards": {
"function": "fzsd:game_event/advancement/on_placed_block/on_placed_solid"
}
}

View File

@ -0,0 +1,25 @@
{
"parent": "fzsd:game_event",
"criteria": {
"on_shears_used_on_entity": {
"trigger": "minecraft:player_interacted_with_entity",
"conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fzsd:is_real_player"
}
],
"entity": {
"type": "#fzsd:shearable"
},
"item": {
"items": "#fzsd:tool/shears"
}
}
}
},
"rewards": {
"function": "fzsd:game_event/advancement/on_shears_used_on_entity"
}
}

View File

@ -0,0 +1,50 @@
{
"parent": "fzsd:game_event",
"criteria": {
"on_tools_exclude_axes_used_on_block": {
"trigger": "minecraft:item_used_on_block",
"conditions": {
"location": [
{
"condition": "minecraft:reference",
"name": "fzsd:is_real_player"
},
{
"condition": "minecraft:any_of",
"terms": [
{
"condition": "minecraft:match_tool",
"predicate": {
"items": "#fzsd:tools_exclude_axes"
}
},
{
"condition": "minecraft:all_of",
"terms": [
{
"condition": "minecraft:match_tool",
"predicate": {
"items": "#fzsd:tool/axes"
}
},
{
"condition": "minecraft:location_check",
"predicate": {
"__comment": "斧子剥树皮会触发两次,所以用目标方块限定只触发一次",
"block": {
"blocks": "#fzsd:stripped_blocks"
}
}
}
]
}
]
}
]
}
}
},
"rewards": {
"function": "fzsd:game_event/advancement/on_tools_used_on_block"
}
}

View File

@ -1,7 +1,7 @@
# #fzsd.extra.bbl:display/set_text
data modify storage fzsd:module fzsd.scoreboard.text.bedrock_broken_count set value '{"text": "破基岩榜", "color": "purple"}'
data modify storage fzsd:module fzsd.scoreboard.text.bedrock_broken_count set value '{"text": "破基岩榜", "color": "light_purple"}'
scoreboard objectives setdisplay sidebar.team.light_purple fzsd.module.scoreboard.display.bedrock_broken_count
scoreboard objectives modify fzsd.module.scoreboard.display.bedrock_broken_count displayname {"text": "破基岩榜", "color": "purple"}
scoreboard objectives modify fzsd.module.scoreboard.display.bedrock_broken_count displayname {"text": "破基岩榜", "color": "light_purple"}
team modify fzsd.module.scoreboard.display.bedrock_broken_count color light_purple
team modify fzsd.module.scoreboard.display.bedrock_broken_count displayName {"text": "破基岩榜", "color": "purple"}
team modify fzsd.module.scoreboard.display.bedrock_broken_count displayName {"text": "破基岩榜", "color": "light_purple"}

View File

@ -1,34 +0,0 @@
{
"parent": "fzsd:game_event",
"criteria": {
"on_tools_exclude_axes_used_on_block": {
"trigger": "minecraft:item_used_on_block",
"conditions": {
"location": [
{
"condition": "minecraft:reference",
"name": "fzsd:is_real_player"
},
{
"condition": "minecraft:match_tool",
"predicate": {
"tag": "fzsd:tool/axes"
}
},
{
"condition": "minecraft:location_check",
"predicate": {
"__comment": "斧子剥树皮会触发两次,所以用目标方块限定只触发一次",
"block": {
"tag": "fzsd:stripped_blocks"
}
}
}
]
}
}
},
"rewards": {
"function": "fzsd:game_event/advancement/on_tools_used_on_block"
}
}

View File

@ -0,0 +1,50 @@
{
"parent": "fzsd:game_event",
"criteria": {
"on_tools_exclude_axes_used_on_block": {
"trigger": "minecraft:item_used_on_block",
"conditions": {
"location": [
{
"condition": "minecraft:reference",
"name": "fzsd:is_real_player"
},
{
"condition": "minecraft:any_of",
"terms": [
{
"condition": "minecraft:match_tool",
"predicate": {
"tag": "fzsd:tools_exclude_axes"
}
},
{
"condition": "minecraft:all_of",
"terms": [
{
"condition": "minecraft:match_tool",
"predicate": {
"tag": "fzsd:tool/axes"
}
},
{
"condition": "minecraft:location_check",
"predicate": {
"__comment": "斧子剥树皮会触发两次,所以用目标方块限定只触发一次",
"block": {
"tag": "fzsd:stripped_blocks"
}
}
}
]
}
]
}
]
}
}
},
"rewards": {
"function": "fzsd:game_event/advancement/on_tools_used_on_block"
}
}

View File

@ -1,4 +1,4 @@
execute store success storage fzsd:version fzsd.need_update byte 1 run data merge storage fzsd:version {fzsd: {version: '3.1.7'}}
execute store success storage fzsd:version fzsd.need_update byte 1 run data merge storage fzsd:version {fzsd: {version: '3.1.8-beta.1'}}
execute if data storage fzsd:version fzsd{need_update: 1b} run function fzsd:system/update
function fzsd:system/carpet/try_load_fzsd_score
function #fzsd:load

View File

@ -1,5 +1,8 @@
# 调用者advancements/fzsd:~
## 调试
execute if score fzsd.logger.level fzsd.variable.integer matches ..400 run tellraw @a [{"nbt": "fzsd.level.debug", "interpret": true, "storage": "fzsd:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "放置了方块/流体"}]
function #fzsd:game_event/player/on_placed_block
## 重置事件进度

View File

@ -10,5 +10,4 @@ scoreboard players remove @s fzsd.event.used_tool.dig_offset 1
function #fzsd:game_event/player/on_tools_used_on_block
## 重置事件进度
advancement revoke @s from fzsd:game_event/on_tool_axes_used_on_block
advancement revoke @s from fzsd:game_event/on_tools_exclude_axes_used_on_block
advancement revoke @s from fzsd:game_event/on_tools_used_on_block

View File

@ -1,48 +0,0 @@
{
"condition": "minecraft:any_of",
"terms": [
{
"__comment": "主手==斧子",
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"tag": "fzsd:tool/axes"
}
}
}
},
{
"__comment": "主手!=工具&&副手==斧子",
"condition": "minecraft:all_of",
"terms": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"tag": "fzsd:tools"
}
}
}
}
},
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"offhand": {
"tag": "fzsd:tool/axes"
}
}
}
}
]
}
]
}

View File

@ -1,6 +1,6 @@
{
"replace": false,
"values": [
"fzsd:module/scoreboard/display/set_text/placement_count/dark_green"
"fzsd:module/scoreboard/display/set_text/placement_count/dark_blue"
]
}

View File

@ -8,6 +8,6 @@
"replace": false,
"__comment_values": "此处只能填写一个函数!",
"values": [
"fzsd:module/scoreboard/display/set_text/trade_count/green"
"fzsd:module/scoreboard/display/set_text/trade_count/dark_green"
]
}

View File

@ -4,7 +4,7 @@
"pack_format": 15,
"supported_formats": {
"min_inclusive": 15,
"max_inclusive": 26
"max_inclusive": 41
}
},
"overlays": {
@ -15,6 +15,13 @@
"max_inclusive": 26
},
"directory": "compat_16"
},
{
"formats": {
"min_inclusive": 27,
"max_inclusive": 41
},
"directory": "compat_27"
}
]
}