From 13ec1d9b9a3c03c3d0fa2f522f953b98196e639b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BB=B6=E7=9A=93?= <1214946206@qq.com> Date: Tue, 3 Aug 2021 06:30:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0restore=5Fscore=20|=20?= =?UTF-8?q?=E7=BE=8E=E5=8C=96README=EF=BC=8C=E4=BD=9C=E8=80=85=EF=BC=9AMax?= =?UTF-8?q?=5F=E5=B0=8F=E8=91=B5=20|=20=E5=AE=9E=E9=AA=8C=E6=80=A7?= =?UTF-8?q?=EF=BC=9A=E9=87=8D=E6=96=B0=E8=AE=BE=E8=AE=A1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 116 ++++++++++-------- .../advancements/scoreboards/killcounter.json | 5 +- .../scoreboards/tradingcounter.json | 5 +- data/fz/functions/config/display.mcfunction | 30 ++--- data/fz/functions/config/install.mcfunction | 2 +- data/fz/functions/config/uninstall.mcfunction | 2 +- data/fz/functions/config/unsneak.mcfunction | 2 +- data/fz/functions/health/install.mcfunction | 2 +- data/fz/functions/health/uninstall.mcfunction | 2 +- data/fz/functions/install.mcfunction | 12 +- data/fz/functions/load.mcfunction | 26 +++- .../login/logintips/install.mcfunction | 2 +- .../login/logintips/uninstall.mcfunction | 2 +- data/fz/functions/login/onlogin.mcfunction | 4 +- .../functions/scoreboards/install.mcfunction | 2 +- .../scoreboards/uninstall.mcfunction | 6 +- data/fz/functions/start.mcfunction | 7 -- data/fz/functions/start/000x.mcfunction | 2 + data/fz/functions/start/00xx.mcfunction | 3 + data/fz/functions/start/start.mcfunction | 7 ++ data/fz/functions/start/update.mcfunction | 6 + data/fz/functions/sweeper/bossbar.mcfunction | 4 +- .../functions/sweeper/config/off.mcfunction | 2 +- .../fz/functions/sweeper/config/on.mcfunction | 2 +- .../sweeper/config/trigger.mcfunction | 2 +- data/fz/functions/sweeper/install.mcfunction | 6 +- data/fz/functions/sweeper/main.mcfunction | 4 +- data/fz/functions/sweeper/start.mcfunction | 2 +- .../fz/functions/sweeper/uninstall.mcfunction | 4 +- data/fz/functions/uninstall.mcfunction | 2 +- data/fz/functions/update.mcfunction | 12 -- restore_scores.sc | 13 +- 图片示例:设置界面.png | Bin 0 -> 30821 bytes 33 files changed, 162 insertions(+), 136 deletions(-) delete mode 100644 data/fz/functions/start.mcfunction create mode 100644 data/fz/functions/start/000x.mcfunction create mode 100644 data/fz/functions/start/00xx.mcfunction create mode 100644 data/fz/functions/start/start.mcfunction create mode 100644 data/fz/functions/start/update.mcfunction delete mode 100644 data/fz/functions/update.mcfunction create mode 100644 图片示例:设置界面.png diff --git a/README.md b/README.md index d2c2ad7..5ddb1e2 100644 --- a/README.md +++ b/README.md @@ -4,59 +4,71 @@ A Minecraft Datapack #### This project is licensed under the terms of the GNU General Public License v3.0. #### Copyright (C)2019-2021 Harvey_Husky -### 总览 -- v2.1.x支持Minecraft1.17+ -- v2.0.x支持Minecraft1.16.3-1.16.5 +[B站链接](https://www.bilibili.com/read/cv4267319) +## 总览 +![设置界面](./图片示例:设置界面.png) - 抬头并按一下shift来打开设置界面 - 提供玩家挖掘、死亡、击杀、受伤、交易、钓鱼、滑翔、(破基岩)数据的榜单 - - 无需配置即可支持该铁头功破基岩榜Mod:https://gitee.com/harvey-husky/FZ-BBL/releases - - 破基岩榜的分数和订阅设置会在铁头功记分板的总分大于0时显示,以免未添加该mod的服务器显示破基岩榜 - - 记分板对照表: - - activation - 活跃时间(h) - - damageTaken - 受伤害榜 - - deathCounter - 死亡榜 - - digCounter - 挖掘榜 - - fishingCounter - 钓鱼榜 - - killCounter - 击杀榜 - - tradingCounter - 交易榜 - - totalList - 总 量 - - bedrockBreaked - 铁头功 - - fz.aviate1m - 滑翔距离 -- 提供一些地毯脚本:*请在升级数据包的同时替换这些工具!!* +- 提供扫地机 +- 配套的无需配置即可支持该铁头功破基岩榜Mod:[FZ-BBL](https://gitee.com/harvey-husky/FZ-BBL/releases) + - 破基岩榜的分数和订阅设置会在铁头功记分板的总分大于0时显示,以免未添加该mod的服务器显示破基岩榜 +- 记分板对照表: + | Object Name | 内容 | + | ----------- | ---- | + | activation | 活跃时间(h) | + | damageTaken | 受伤害榜 | + | deathCounter | 死亡榜 | + | digCounter | 挖掘榜 | + | fishingCounter | 钓鱼榜 | + | killCounter | 击杀榜 | + | tradingCounter | 交易榜 | + | totalList | 总 量 | + | bedrockBreaked | [铁头功破基岩](https://www.bilibili.com/video/BV1KJ411b73z) | + | fz.aviate1m | 滑翔距离 | +- 提供一些地毯脚本(.sc文件):***请在升级数据包的同时替换这些工具!!*** - 安装方法: - - 需要carpet mod 1.4.24+:https://github.com/gnembon/fabric-carpet/releases - - 将其放入“world/scripts”中(在客户端位于“.minecraft/saves/存档名/scripts”或“.minecraft/config/carpet/scripts”) - - here.sc: - - “/here”向所有人发送自己的位置和所在维度 - - 发送的消息使用voxelmap可识别的数组格式 - - 安装voxelmap mod后,左键高亮该坐标,ctrl+左键新建坐标点 - - c.sc - - “/c”修改玩家模式为旁观模式 - - s.sc - - “/s”修改玩家模式为生存模式 - - tagplayer.sc: - - 这个工具可以防止将地毯mod生成的假人计入记分板 - - 可以通过自定义文件名来自定义游戏内命令 - - 配置文件: - - “allow_bot_tp”:用于控制是否允许tp假人 - - “allow_spawning_whitelist_players”:用于控制是否允许生成白名单内的玩家 - - 使用方法: - - 输入“/script load tagplayer”加载工具 - - 包含全部地毯假人自带的功能,以及新功能,如: - - “/tagplayer check xxx”:检查玩家的状态 - - “/tagplayer checkall”:检查所有玩家的状态 - - “/tagplayer killall”:清除所有假人 - - 其他用法可以在游戏内输入“/tagplayer”查看 - - restore_scores.sc: - - 从数据包1.4升级时也需要使用这个工具 - - 这个工具可以从白名单读取玩家列表,逐一召唤假人,读取统计信息并赋值给记分板 - - 悄悄说一句没白名单的服把usercache.json复制一份改成whitelist.json就可以啦 - - *注意:原有的记分板会被删除* - - 使用方法: - - 输入“/script load restore_scores”加载工具 - - 输入“/restore_scores by_whitelist”开始恢复 - - 输入“/script unload restore_scores”卸载工具 - - 记得用完就删掉它! + - 需要[carpet mod](https://github.com/gnembon/fabric-carpet/releases) 1.4.24+ + - 将其放入`world/scripts`中(在客户端位于`.minecraft/saves/存档名/scripts`或`.minecraft/config/carpet/scripts`) +### `here.sc`: +- `/here`向所有人发送自己的位置和所在维度 + - 发送的消息使用voxelmap可识别的数组格式 + - 安装[voxelmap mod](https://www.curseforge.com/minecraft/mc-mods/voxelmap/files)后,左键高亮该坐标,ctrl+左键新建坐标点 +### `c.sc` +- `/c`修改玩家模式为旁观模式 +### `s.sc` +- `/s`修改玩家模式为生存模式 +### `tagplayer.sc`: +- [B站链接](https://www.bilibili.com/read/cv9178207) +- 这个工具可以防止将地毯mod生成的假人计入记分板 +- 可以通过自定义文件名来自定义游戏内命令 +- 配置文件: + - `allow_bot_tp`:用于控制是否允许tp假人 + - `allow_spawning_whitelist_players`:用于控制是否允许生成白名单内的玩家 +- 使用方法: + - 安装[carpet mod](https://github.com/gnembon/fabric-carpet/releases) + - 输入`/script load tagplayer`加载工具 + - 包含全部地毯假人自带的功能,如: + - `/tagplayer use xxx once`让假人xxx按一次使用键 + - 包含新功能,如: + - `/tagplayer check xxx`:检查玩家的状态 + - `/tagplayer checkall`:检查所有玩家的状态 + - `/tagplayer killall`:清除所有假人 + - 其他用法可以在游戏内输入`/tagplayer`查看 + +### `restore_scores.sc`: +- 从数据包1.4升级时也需要使用这个工具 +- 这个工具可以从白名单读取玩家列表,逐一召唤假人,读取统计信息并赋值给记分板 + - 悄悄说一句没白名单的服把usercache.json复制一份改成whitelist.json就可以啦 +- *注意:原有的记分板会被删除* +- 使用方法: + - 输入`/script load restore_scores`加载工具 + - 输入`/restore_scores by_whitelist`开始恢复 + - 输入`/script unload restore_scores`卸载工具 + - 记得用完就删掉它! + +### 更新日志 +##### v2.1.x支持Minecraft1.17+ +##### v2.0.x支持Minecraft1.16.3-1.16.5 ##### v2.1.2/2.0.10 - 添加鞘翅滑翔距离榜单 ##### v2.1.0 @@ -91,7 +103,7 @@ A Minecraft Datapack - 无需配置即可支持该铁头功破基岩榜Mod:https://gitee.com/harvey-husky/FZ-BBL/releases - 破基岩榜的分数和订阅设置会在铁头功记分板的总分大于0时显示,以免未添加该mod的服务器显示破基岩榜 ##### v2.0.0.11 -- “/tagplayer spawn xxx”后面现在可以追加“at”、“facing”、“in”参数 +- `/tagplayer spawn xxx`后面现在可以追加`at`、`facing`、`in`参数 ##### v2.0.0.10 - 扫地机添加了位于怪物血条栏的文字提示,同时添加了各种提示的开关功能 ##### v2.0.0.9 @@ -102,7 +114,7 @@ A Minecraft Datapack - tagplayer添加了新版carpet新指令,可以为假人切换热键栏 - 现在tagplayer需要carpet1.4.21或以上版本运行! - 现在tagplayer可以给自己设置动作了 -- 添加“/tagplayer shadow”指令将自己变为前缀为“挂机”的假人 +- 添加`/tagplayer shadow`指令将自己变为前缀为`挂机`的假人 ##### v2.0.0.6 - 修复restore_scores.sc工具不能恢复受伤害榜(抖M榜)的bug ##### v2.0.0.5 diff --git a/data/fz/advancements/scoreboards/killcounter.json b/data/fz/advancements/scoreboards/killcounter.json index 7bf3eeb..813a1bb 100644 --- a/data/fz/advancements/scoreboards/killcounter.json +++ b/data/fz/advancements/scoreboards/killcounter.json @@ -10,10 +10,7 @@ "condition": "minecraft:entity_scores", "entity": "this", "scores": { - "carpetBot": { - "max": 1, - "min": 1 - } + "carpetBot": 1 } } } diff --git a/data/fz/advancements/scoreboards/tradingcounter.json b/data/fz/advancements/scoreboards/tradingcounter.json index e362658..c38c72d 100644 --- a/data/fz/advancements/scoreboards/tradingcounter.json +++ b/data/fz/advancements/scoreboards/tradingcounter.json @@ -10,10 +10,7 @@ "condition": "minecraft:entity_scores", "entity": "this", "scores": { - "carpetBot": { - "max": 1, - "min": 1 - } + "carpetBot": 1 } } } diff --git a/data/fz/functions/config/display.mcfunction b/data/fz/functions/config/display.mcfunction index a9f5b5c..2705174 100644 --- a/data/fz/functions/config/display.mcfunction +++ b/data/fz/functions/config/display.mcfunction @@ -2,27 +2,27 @@ schedule function fz:config/timeout 300s #输出玩家可见的设置页面 ##扫地机 -execute if data storage fz.installed {sweeper: 1b} run tellraw @s {"text": "扫地机:","color": "#ccff00"} +execute if data storage fz:survival installed{sweeper: 1b} run tellraw @s {"text": "扫地机:","color": "#ccff00"} ##扫地机时间,对应分数1478966210-1478966215 - execute if data storage fz.installed {sweeper: 1b} run tellraw @s [{"text": "- "},{"text": "[关]","color": "#00ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966210"}},{"text": "[30秒]","color": "#5fff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966211"}},{"text": "[1分钟]","color": "#d7ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966212"}},{"text": "[2分钟]","color": "#ffd900","clickEvent": {"action": "run_command","value": "/trigger config set 1478966213"}},{"text": "[3分钟]","color": "#ff6100","clickEvent": {"action": "run_command","value": "/trigger config set 1478966214"}},{"text": "[4分钟]","color": "#ff0000","clickEvent": {"action": "run_command","value": "/trigger config set 1478966215"}}] + execute if data storage fz:survival installed{sweeper: 1b} run tellraw @s [{"text": "- "},{"text": "[关]","color": "#00ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966210"}},{"text": "[30秒]","color": "#5fff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966211"}},{"text": "[1分钟]","color": "#d7ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966212"}},{"text": "[2分钟]","color": "#ffd900","clickEvent": {"action": "run_command","value": "/trigger config set 1478966213"}},{"text": "[3分钟]","color": "#ff6100","clickEvent": {"action": "run_command","value": "/trigger config set 1478966214"}},{"text": "[4分钟]","color": "#ff0000","clickEvent": {"action": "run_command","value": "/trigger config set 1478966215"}}] ##开启矿车白名单1478966216 - execute if data storage fz.installed {sweeper: 1b} unless score keepMinecart parameter matches 1 run tellraw @s [{"text": "- "},{"text": "矿车白名单:","color": "#8c8f91"},{"text": "[已关闭]","color": "#ff0000","clickEvent": {"action": "run_command","value": "/trigger config set 1478966216"}}] + execute if data storage fz:survival installed{sweeper: 1b} unless score keepMinecart parameter matches 1 run tellraw @s [{"text": "- "},{"text": "矿车白名单:","color": "#8c8f91"},{"text": "[已关闭]","color": "#ff0000","clickEvent": {"action": "run_command","value": "/trigger config set 1478966216"}}] ##关闭矿车白名单1478966217 - execute if data storage fz.installed {sweeper: 1b} if score keepMinecart parameter matches 1 run tellraw @s [{"text": "- "},{"text": "矿车白名单:","color": "#8c8f91"},{"text": "[已开启]","color": "#00ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966217"}}] + execute if data storage fz:survival installed{sweeper: 1b} if score keepMinecart parameter matches 1 run tellraw @s [{"text": "- "},{"text": "矿车白名单:","color": "#8c8f91"},{"text": "[已开启]","color": "#00ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966217"}}] ##声音提示 - execute if data storage fz.installed {sweeper: 1b} run tellraw @s[tag=!fz.sweeperSoundOff] [{"text": "- "},{"text": "声音:","color": "#8c8f91"},{"text": "[已开启]","color": "#00ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966209"}}] - execute if data storage fz.installed {sweeper: 1b} run tellraw @s[tag=fz.sweeperSoundOff] [{"text": "- "},{"text": "声音:","color": "#8c8f91"},{"text": "[已关闭]","color": "#ff0000","clickEvent": {"action": "run_command","value": "/trigger config set 1478966208"}}] + execute if data storage fz:survival installed{sweeper: 1b} run tellraw @s[tag=!fz.sweeperSoundOff] [{"text": "- "},{"text": "声音:","color": "#8c8f91"},{"text": "[已开启]","color": "#00ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966209"}}] + execute if data storage fz:survival installed{sweeper: 1b} run tellraw @s[tag=fz.sweeperSoundOff] [{"text": "- "},{"text": "声音:","color": "#8c8f91"},{"text": "[已关闭]","color": "#ff0000","clickEvent": {"action": "run_command","value": "/trigger config set 1478966208"}}] ##消息提示 - execute if data storage fz.installed {sweeper: 1b} run tellraw @s[tag=!fz.sweeperMessageOff] [{"text": "- "},{"text": "消息:","color": "#8c8f91"},{"text": "[已开启]","color": "#00ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966205"}}] - execute if data storage fz.installed {sweeper: 1b} run tellraw @s[tag=fz.sweeperMessageOff] [{"text": "- "},{"text": "消息:","color": "#8c8f91"},{"text": "[已关闭]","color": "#ff0000","clickEvent": {"action": "run_command","value": "/trigger config set 1478966204"}}] + execute if data storage fz:survival installed{sweeper: 1b} run tellraw @s[tag=!fz.sweeperMessageOff] [{"text": "- "},{"text": "消息:","color": "#8c8f91"},{"text": "[已开启]","color": "#00ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966205"}}] + execute if data storage fz:survival installed{sweeper: 1b} run tellraw @s[tag=fz.sweeperMessageOff] [{"text": "- "},{"text": "消息:","color": "#8c8f91"},{"text": "[已关闭]","color": "#ff0000","clickEvent": {"action": "run_command","value": "/trigger config set 1478966204"}}] ##血条栏提示 - execute if data storage fz.installed {sweeper: 1b} run tellraw @s[tag=!fz.sweeperBossbarOff] [{"text": "- "},{"text": "血条栏:","color": "#8c8f91"},{"text": "[已开启]","color": "#00ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966207"}}] - execute if data storage fz.installed {sweeper: 1b} run tellraw @s[tag=fz.sweeperBossbarOff] [{"text": "- "},{"text": "血条栏:","color": "#8c8f91"},{"text": "[已关闭]","color": "#ff0000","clickEvent": {"action": "run_command","value": "/trigger config set 1478966206"}}] + execute if data storage fz:survival installed{sweeper: 1b} run tellraw @s[tag=!fz.sweeperBossbarOff] [{"text": "- "},{"text": "血条栏:","color": "#8c8f91"},{"text": "[已开启]","color": "#00ff00","clickEvent": {"action": "run_command","value": "/trigger config set 1478966207"}}] + execute if data storage fz:survival installed{sweeper: 1b} run tellraw @s[tag=fz.sweeperBossbarOff] [{"text": "- "},{"text": "血条栏:","color": "#8c8f91"},{"text": "[已关闭]","color": "#ff0000","clickEvent": {"action": "run_command","value": "/trigger config set 1478966206"}}] ##记分板 -execute if data storage fz.installed {scoreboards: 1b} run tellraw @s {"text": "记分板:","color": "#ccff00"} +execute if data storage fz:survival installed{scoreboards: 1b} run tellraw @s {"text": "记分板:","color": "#ccff00"} ##计分板显示,对应分数1838019370-1838019379 - execute if data storage fz.installed {scoreboards: 1b} unless score 全员头铁 bedrockBreaked matches 1.. run tellraw @s [{"text": "- "},{"text": "[关]","color": "#ff0000","hoverEvent": {"action": "show_text","contents": {"text": "关", "color": "#ff0000"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019370"}},{"text": "[轮播]","color": "gold","hoverEvent": {"action": "show_text","contents": {"text": "轮播", "color": "gold"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019371"}},{"text": "[总量]","color": "dark_aqua","hoverEvent": {"action": "show_text","contents": {"text": "总量","color": "dark_aqua"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019379"}},{"text": "[在线时间(h)]","color": "aqua","hoverEvent": {"action": "show_text","contents": {"text": "在线时间(h)","color": "aqua"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019372"}},{"text": "[抖M名单]","color": "yellow","hoverEvent": {"action": "show_text","contents": {"text": "受伤害量","color": "yellow"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019373"}},{"text": "[死亡榜]","color": "dark_red","hoverEvent": {"action": "show_text","contents": {"text": "死亡榜","color": "dark_red"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019374"}},{"text": "[挖掘榜]","color": "gray","hoverEvent": {"action": "show_text","contents": {"text": "挖掘榜","color": "gray"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019375"}},{"text": "[钩直饵咸]","color": "blue","hoverEvent": {"action": "show_text","contents": {"text": "钓鱼榜","color": "blue"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019376"}},{"text": "[击杀榜]","color": "red","hoverEvent": {"action": "show_text","contents": {"text": "击杀榜","color": "red"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019377"}},{"text": "[交♂易榜]","color": "green","hoverEvent": {"action": "show_text","contents": {"text": "交易榜","color": "green"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019378"}}] - execute if data storage fz.installed {scoreboards: 1b} unless score 全员头铁 bedrockBreaked matches 1.. run tellraw @s [{"text": "- "},{"text": "[滑翔距离]", "color": "light_purple", "hoverEvent": {"action": "show_text","contents": {"text": "滑翔距离", "color": "light_purple"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019368"}}] + execute if data storage fz:survival installed{scoreboards: 1b} unless score 全员头铁 bedrockBreaked matches 1.. run tellraw @s [{"text": "- "},{"text": "[关]","color": "#ff0000","hoverEvent": {"action": "show_text","contents": {"text": "关", "color": "#ff0000"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019370"}},{"text": "[轮播]","color": "gold","hoverEvent": {"action": "show_text","contents": {"text": "轮播", "color": "gold"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019371"}},{"text": "[总量]","color": "dark_aqua","hoverEvent": {"action": "show_text","contents": {"text": "总量","color": "dark_aqua"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019379"}},{"text": "[在线时间(h)]","color": "aqua","hoverEvent": {"action": "show_text","contents": {"text": "在线时间(h)","color": "aqua"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019372"}},{"text": "[抖M名单]","color": "yellow","hoverEvent": {"action": "show_text","contents": {"text": "受伤害量","color": "yellow"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019373"}},{"text": "[死亡榜]","color": "dark_red","hoverEvent": {"action": "show_text","contents": {"text": "死亡榜","color": "dark_red"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019374"}},{"text": "[挖掘榜]","color": "gray","hoverEvent": {"action": "show_text","contents": {"text": "挖掘榜","color": "gray"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019375"}},{"text": "[钩直饵咸]","color": "blue","hoverEvent": {"action": "show_text","contents": {"text": "钓鱼榜","color": "blue"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019376"}},{"text": "[击杀榜]","color": "red","hoverEvent": {"action": "show_text","contents": {"text": "击杀榜","color": "red"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019377"}},{"text": "[交♂易榜]","color": "green","hoverEvent": {"action": "show_text","contents": {"text": "交易榜","color": "green"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019378"}}] + execute if data storage fz:survival installed{scoreboards: 1b} unless score 全员头铁 bedrockBreaked matches 1.. run tellraw @s [{"text": "- "},{"text": "[滑翔距离]", "color": "light_purple", "hoverEvent": {"action": "show_text","contents": {"text": "滑翔距离", "color": "light_purple"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019368"}}] ##计分板显示,对应分数1838019369-1838019379(有破基岩榜) - execute if data storage fz.installed {scoreboards: 1b} if score 全员头铁 bedrockBreaked matches 1.. run tellraw @s [{"text": "- "},{"text": "[关]","color": "#ff0000","hoverEvent": {"action": "show_text","contents": {"text": "关", "color": "#ff0000"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019370"}},{"text": "[轮播]","color": "gold","hoverEvent": {"action": "show_text","contents": {"text": "轮播", "color": "gold"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019371"}},{"text": "[总量]","color": "dark_aqua","hoverEvent": {"action": "show_text","contents": {"text": "总量","color": "dark_aqua"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019379"}},{"text": "[在线时间(h)]","color": "aqua","hoverEvent": {"action": "show_text","contents": {"text": "在线时间(h)","color": "aqua"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019372"}},{"text": "[抖M名单]","color": "yellow","hoverEvent": {"action": "show_text","contents": {"text": "受伤害量","color": "yellow"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019373"}},{"text": "[死亡榜]","color": "dark_red","hoverEvent": {"action": "show_text","contents": {"text": "死亡榜","color": "dark_red"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019374"}},{"text": "[挖掘榜]","color": "gray","hoverEvent": {"action": "show_text","contents": {"text": "挖掘榜","color": "gray"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019375"}},{"text": "[钩直饵咸]","color": "blue","hoverEvent": {"action": "show_text","contents": {"text": "钓鱼榜","color": "blue"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019376"}},{"text": "[击杀榜]","color": "red","hoverEvent": {"action": "show_text","contents": {"text": "击杀榜","color": "red"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019377"}},{"text": "[交♂易榜]","color": "green","hoverEvent": {"action": "show_text","contents": {"text": "交易榜","color": "green"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019378"}}] - execute if data storage fz.installed {scoreboards: 1b} if score 全员头铁 bedrockBreaked matches 1.. run tellraw @s [{"text": "- "},{"text": "[滑翔距离]", "color": "light_purple", "hoverEvent": {"action": "show_text","contents": {"text": "滑翔距离", "color": "light_purple"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019368"}},{"text": "[铁头功]","color": "dark_green","hoverEvent": {"action": "show_text","contents": {"text": "破基岩榜","color": "dark_green"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019369"}}] \ No newline at end of file + execute if data storage fz:survival installed{scoreboards: 1b} if score 全员头铁 bedrockBreaked matches 1.. run tellraw @s [{"text": "- "},{"text": "[关]","color": "#ff0000","hoverEvent": {"action": "show_text","contents": {"text": "关", "color": "#ff0000"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019370"}},{"text": "[轮播]","color": "gold","hoverEvent": {"action": "show_text","contents": {"text": "轮播", "color": "gold"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019371"}},{"text": "[总量]","color": "dark_aqua","hoverEvent": {"action": "show_text","contents": {"text": "总量","color": "dark_aqua"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019379"}},{"text": "[在线时间(h)]","color": "aqua","hoverEvent": {"action": "show_text","contents": {"text": "在线时间(h)","color": "aqua"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019372"}},{"text": "[抖M名单]","color": "yellow","hoverEvent": {"action": "show_text","contents": {"text": "受伤害量","color": "yellow"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019373"}},{"text": "[死亡榜]","color": "dark_red","hoverEvent": {"action": "show_text","contents": {"text": "死亡榜","color": "dark_red"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019374"}},{"text": "[挖掘榜]","color": "gray","hoverEvent": {"action": "show_text","contents": {"text": "挖掘榜","color": "gray"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019375"}},{"text": "[钩直饵咸]","color": "blue","hoverEvent": {"action": "show_text","contents": {"text": "钓鱼榜","color": "blue"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019376"}},{"text": "[击杀榜]","color": "red","hoverEvent": {"action": "show_text","contents": {"text": "击杀榜","color": "red"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019377"}},{"text": "[交♂易榜]","color": "green","hoverEvent": {"action": "show_text","contents": {"text": "交易榜","color": "green"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019378"}}] + execute if data storage fz:survival installed{scoreboards: 1b} if score 全员头铁 bedrockBreaked matches 1.. run tellraw @s [{"text": "- "},{"text": "[滑翔距离]", "color": "light_purple", "hoverEvent": {"action": "show_text","contents": {"text": "滑翔距离", "color": "light_purple"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019368"}},{"text": "[铁头功]","color": "dark_green","hoverEvent": {"action": "show_text","contents": {"text": "破基岩榜","color": "dark_green"}},"clickEvent": {"action": "run_command","value": "/trigger config set 1838019369"}}] \ No newline at end of file diff --git a/data/fz/functions/config/install.mcfunction b/data/fz/functions/config/install.mcfunction index d9b5356..e44be2e 100644 --- a/data/fz/functions/config/install.mcfunction +++ b/data/fz/functions/config/install.mcfunction @@ -2,7 +2,7 @@ #初始化触发器记分板 scoreboard objectives add config trigger #存入已安装信息 -data merge storage fz.installed {config: 1b} +data modify storage fz:survival installed.config set value 1b #提示已安装 tellraw @a {"text": "[信息]设置功能已安装","color": "#5fff00"} #开始运行 diff --git a/data/fz/functions/config/uninstall.mcfunction b/data/fz/functions/config/uninstall.mcfunction index 1bd213a..14483b4 100644 --- a/data/fz/functions/config/uninstall.mcfunction +++ b/data/fz/functions/config/uninstall.mcfunction @@ -4,6 +4,6 @@ schedule clear fz:config/main schedule clear fz:config/timeout data remove storage fz.config is_open #写入已卸载的信息 -data merge storage fz.installed {config: 0b} +data modify storage fz:survival installed.config set value 0b #提示已卸载 tellraw @a {"text": "[信息]设置功能已卸载","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/config/unsneak.mcfunction b/data/fz/functions/config/unsneak.mcfunction index e2cb0ce..02cca45 100644 --- a/data/fz/functions/config/unsneak.mcfunction +++ b/data/fz/functions/config/unsneak.mcfunction @@ -1,6 +1,6 @@ #由config/sneak和config/unsneak成就触发 #判断玩家视角是否指向正上方,是则运行turnon函数 -execute if data storage fz.installed {config: 1b} if entity @s[x_rotation=-90] run function fz:config/turnon +execute if data storage fz:survival installed{config: 1b} if entity @s[x_rotation=-90] run function fz:config/turnon #重置该玩家的两个成就 advancement revoke @s only fz:config/sneak advancement revoke @s only fz:config/unsneak \ No newline at end of file diff --git a/data/fz/functions/health/install.mcfunction b/data/fz/functions/health/install.mcfunction index a35a56b..0e5bcce 100644 --- a/data/fz/functions/health/install.mcfunction +++ b/data/fz/functions/health/install.mcfunction @@ -5,6 +5,6 @@ scoreboard objectives modify Health rendertype hearts scoreboard objectives setdisplay list Health scoreboard objectives setdisplay belowName Health #写入已安装的信息 -data merge storage fz.installed {health: 1b} +data modify storage fz:survival installed.health set value 1b #提示已安装 tellraw @a {"text": "[信息]血量显示已安装","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/health/uninstall.mcfunction b/data/fz/functions/health/uninstall.mcfunction index d709f66..0f06464 100644 --- a/data/fz/functions/health/uninstall.mcfunction +++ b/data/fz/functions/health/uninstall.mcfunction @@ -2,6 +2,6 @@ #删除计分板 scoreboard objectives remove Health #写入已卸载的信息 -data merge storage fz.installed {health: 0b} +data modify storage fz:survival installed.health set value 0b #提示已卸载 tellraw @a {"text": "[信息]血量显示已卸载","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/install.mcfunction b/data/fz/functions/install.mcfunction index fd6d948..b882c47 100644 --- a/data/fz/functions/install.mcfunction +++ b/data/fz/functions/install.mcfunction @@ -17,15 +17,13 @@ function fz:health/install function fz:login/logintips/install function fz:carpet/carpet #版本信息 -data merge storage fz.installed {installed: 1b} -data merge storage fz {version: 2.1.2} -data merge storage fz {date: 2020-7.21} -data merge storage fz {time: "1:14"} -##data merge storage fz {snapshot: -SNAPSHOT} -data remove storage fz snapshot -tellraw @a {"text": "[信息]启动完毕","color": "#5fff00"} +data modify storage fz:survival version set from storage fz:survival newVersion +data modify storage fz:survival date set value "2020-7.21" +data modify storage fz:survival time set value "1:14" #提示已安装 +data modify storage fz:survival installed.datapack set value 1b tellraw @a {"text": "[信息]安装完成!","color": "#5fff00"} +tellraw @a {"text": "[信息]启动完毕","color": "#5fff00"} #info: #5fff00 信息 #alert: #d7ff00 提醒 #warn: #ffd900 警告 diff --git a/data/fz/functions/load.mcfunction b/data/fz/functions/load.mcfunction index d4cb1e2..2d78008 100644 --- a/data/fz/functions/load.mcfunction +++ b/data/fz/functions/load.mcfunction @@ -1,8 +1,22 @@ +#新版本号 +data modify storage fz:survival newVersion set value [2,1,3,0] +execute if data storage fz:survival newVersion[3] run data modify storage fz:survival snapshot set value 1b +execute unless data storage fz:survival newVersion[3] run data remove storage fz:survival snapshot +##data remove storage fz:survival snapshot +#版本号识别 +scoreboard objectives add fz.cache dummy +execute store result score version1 fz.cache run data get storage fz:survival version[1] +execute store result score version2 fz.cache run data get storage fz:survival version[2] +execute store result score version3 fz.cache run data get storage fz:survival version[3] +execute store result score newVersion1 fz.cache run data get storage fz:survival newVersion[1] +execute store result score newVersion2 fz.cache run data get storage fz:survival newVersion[2] +execute store result score newVersion3 fz.cache run data get storage fz:survival newVersion[3] +#版本号比较 +execute if data storage fz:survival installed{datapack: 1b} unless score version1 fz.cache = newVersion1 fz.cache run function fz:start/update +execute if data storage fz:survival installed{datapack: 1b} if score version1 fz.cache = newVersion1 fz.cache run function fz:start/00xx +scoreboard objectives remove fz.cache #如果未安装且未卸载则安装 -execute unless data storage fz.installed {installed: 1b} unless data storage fz.installed {installed: 0b} run function fz:install -#如果版本正确且已安装则开始运行 -execute if data storage fz {version: 2.1.2} if data storage fz.installed {installed: 1b} run function fz:start -#如果版本不符则更新 -execute unless data storage fz {version: 2.1.2} run function fz:update +execute unless data storage fz:survival installed{datapack: 1b} unless data storage fz:survival installed{datapack: 0b} run function fz:install #输出版本信息 -tellraw @a [{"text": "[版本信息]FZ's Datapack-","color": "#ffd900"},{"nbt":"version","storage":"fz","color": "#ffd900"},{"nbt": "snapshot", "storage": "fz","color": "red"}] \ No newline at end of file +execute unless data storage fz:survival {snapshot:1b} unless data storage fz:survival installed{datapack: 0b} run tellraw @a [{"text": "[版本信息]FZ's Datapack-","color": "#ffd900"},{"nbt":"version[0]","storage":"fz:survival","color": "#ffd900"},{"text":".","color": "#ffd900"},{"nbt":"version[1]","storage":"fz:survival","color": "#ffd900"},{"text": ".","color": "#ffd900"},{"nbt":"version[2]","storage":"fz:survival","color": "#ffd900"}] +execute if data storage fz:survival {snapshot:1b} unless data storage fz:survival installed{datapack: 0b} run tellraw @a [{"text": "[版本信息]FZ's Datapack-","color": "#ffd900"},{"nbt":"version[0]","storage":"fz:survival","color": "#ffd900"},{"text":".","color": "#ffd900"},{"nbt":"version[1]","storage":"fz:survival","color": "#ffd900"},{"text": ".","color": "#ffd900"},{"nbt":"version[2]","storage":"fz:survival","color": "#ffd900"},{"text": ".","color": "#ffd900"},{"nbt":"version[3]","storage":"fz:survival","color": "#ffd900"},{"text": "-SNAPSHOT","color": "red"}] \ No newline at end of file diff --git a/data/fz/functions/login/logintips/install.mcfunction b/data/fz/functions/login/logintips/install.mcfunction index 48cdff3..63a3b7f 100644 --- a/data/fz/functions/login/logintips/install.mcfunction +++ b/data/fz/functions/login/logintips/install.mcfunction @@ -1,4 +1,4 @@ #安装登陆提示 -data merge storage fz.installed {logintips: 1b} +data modify storage fz:survival installed.logintips set value 1b #提示已安装 tellraw @a {"text": "[信息]登陆提示已安装","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/login/logintips/uninstall.mcfunction b/data/fz/functions/login/logintips/uninstall.mcfunction index 5b383c3..3799ce9 100644 --- a/data/fz/functions/login/logintips/uninstall.mcfunction +++ b/data/fz/functions/login/logintips/uninstall.mcfunction @@ -1,4 +1,4 @@ #卸载登陆提示 -data merge storage fz.installed {logintips: 0b} +data modify storage fz:survival installed.logintips set value 0b #提示已卸载 tellraw @a {"text": "[信息]登陆提示已卸载","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/login/onlogin.mcfunction b/data/fz/functions/login/onlogin.mcfunction index d817020..a80ee2b 100644 --- a/data/fz/functions/login/onlogin.mcfunction +++ b/data/fz/functions/login/onlogin.mcfunction @@ -1,4 +1,4 @@ -execute if data storage fz.installed {logintips: 1b} run tellraw @s {"text": "[提醒]站在地面,抬头并按一下shift即可打开设置页面","color": "#66ffff"} +execute if data storage fz:survival installed{logintips: 1b} run tellraw @s {"text": "[提醒]站在地面,抬头并按一下shift即可打开设置页面","color": "#66ffff"} scoreboard players set @s leaveGame 0 @@ -14,4 +14,4 @@ advancement revoke @s only fz:scoreboards/digcounter/toolsfix2 advancement revoke @s only fz:config/sneak advancement revoke @s only fz:config/unsneak -advancement revoke @s from fz:leavegame \ No newline at end of file +execute if data storage fz:survival installed{datapack: 1b} run advancement revoke @s from fz:leavegame \ No newline at end of file diff --git a/data/fz/functions/scoreboards/install.mcfunction b/data/fz/functions/scoreboards/install.mcfunction index e199649..b0faa7a 100644 --- a/data/fz/functions/scoreboards/install.mcfunction +++ b/data/fz/functions/scoreboards/install.mcfunction @@ -118,7 +118,7 @@ scoreboard objectives setdisplay sidebar.team.green tradingCounter scoreboard objectives setdisplay sidebar.team.dark_green bedrockBreaked scoreboard objectives setdisplay sidebar.team.light_purple fz.aviate1m -data merge storage fz.installed {scoreboards:1b} +data modify storage fz:survival installed.scoreboards set value 1b #提示已安装 tellraw @a {"text": "[信息]记分板已安装","color": "#5fff00"} diff --git a/data/fz/functions/scoreboards/uninstall.mcfunction b/data/fz/functions/scoreboards/uninstall.mcfunction index b23db68..3129f09 100644 --- a/data/fz/functions/scoreboards/uninstall.mcfunction +++ b/data/fz/functions/scoreboards/uninstall.mcfunction @@ -53,8 +53,8 @@ scoreboard objectives setdisplay sidebar.team.light_purple scoreboard objectives setdisplay sidebar.team.green scoreboard objectives setdisplay sidebar.team.gold +data modify storage fz:survival installed.scoreboards set value 0b + #提示已卸载 tellraw @a {"text": "[信息]记分板已卸载","color": "#5fff00"} -tellraw @s [{"text": "[警告]您要删除计分板数据吗,它将会永久失去!(真的很久!)", "color": "#ffd900"},{"text": "[确定]","clickEvent": {"action": "run_command", "value": "/function fz:scoreboards/delscore"}, "color": "#00ff00"}] - -data merge storage fz.installed {scoreboards:0b} \ No newline at end of file +tellraw @s [{"text": "[警告]您要删除计分板数据吗,它将会永久失去!(真的很久!)", "color": "#ffd900"},{"text": "[确定]","clickEvent": {"action": "run_command", "value": "/function fz:scoreboards/delscore"}, "color": "#00ff00"}] \ No newline at end of file diff --git a/data/fz/functions/start.mcfunction b/data/fz/functions/start.mcfunction deleted file mode 100644 index 761cf37..0000000 --- a/data/fz/functions/start.mcfunction +++ /dev/null @@ -1,7 +0,0 @@ -#判断各功能是否已安装并运行 -execute if data storage fz.installed {scoreboards: 1b} run function fz:scoreboards/start -execute if data storage fz.installed {sweeper: 1b} run function fz:sweeper/start -execute if data storage fz.installed {config: 1b} run function fz:config/start -function fz:carpet/carpet -#测试用的输出 -tellraw @a {"text": "[信息]启动完毕","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/start/000x.mcfunction b/data/fz/functions/start/000x.mcfunction new file mode 100644 index 0000000..03da677 --- /dev/null +++ b/data/fz/functions/start/000x.mcfunction @@ -0,0 +1,2 @@ +execute unless score version3 fz.cache = newVersion3 fz.cache run function fz:start/update +execute if score version3 fz.cache = newVersion3 fz.cache run function fz:start/start \ No newline at end of file diff --git a/data/fz/functions/start/00xx.mcfunction b/data/fz/functions/start/00xx.mcfunction new file mode 100644 index 0000000..9b03286 --- /dev/null +++ b/data/fz/functions/start/00xx.mcfunction @@ -0,0 +1,3 @@ +execute unless score version2 fz.cache = newVersion2 fz.cache run function fz:start/update +execute if data storage fz:survival {snapshot: 1b} if score version2 fz.cache = newVersion2 fz.cache run function fz:start/000x +execute unless data storage fz:survival {snapshot: 1b} run function fz:start/start \ No newline at end of file diff --git a/data/fz/functions/start/start.mcfunction b/data/fz/functions/start/start.mcfunction new file mode 100644 index 0000000..74e64b4 --- /dev/null +++ b/data/fz/functions/start/start.mcfunction @@ -0,0 +1,7 @@ +#判断各功能是否已安装并运行 +execute if data storage fz:survival installed{scoreboards: 1b} run function fz:scoreboards/start +execute if data storage fz:survival installed{sweeper: 1b} run function fz:sweeper/start +execute if data storage fz:survival installed{config: 1b} run function fz:config/start +function fz:carpet/carpet +#测试用的输出 +tellraw @a {"text": "[信息]启动完毕","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/start/update.mcfunction b/data/fz/functions/start/update.mcfunction new file mode 100644 index 0000000..e45cfa7 --- /dev/null +++ b/data/fz/functions/start/update.mcfunction @@ -0,0 +1,6 @@ +#卸载 +function fz:uninstall +#安装 +function fz:install +#提示已安装 +tellraw @a {"text": "[信息]升级完成","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/sweeper/bossbar.mcfunction b/data/fz/functions/sweeper/bossbar.mcfunction index 901f8d2..d1802ce 100644 --- a/data/fz/functions/sweeper/bossbar.mcfunction +++ b/data/fz/functions/sweeper/bossbar.mcfunction @@ -1,4 +1,4 @@ -bossbar set fz.sweeper name [{"score": {"name": "sweeperBossbar","objective": "parameter"},"color": "#ff6100","underlined": true,"bold": true},{"text": "秒后清理垃圾","color": "#ffd900","bold": false}] -bossbar set fz.sweeper players @a[tag=!fz.sweeperBossbarOff] +bossbar set fz:sweeper name [{"score": {"name": "sweeperBossbar","objective": "parameter"},"color": "#ff6100","underlined": true,"bold": true},{"text": "秒后清理垃圾","color": "#ffd900","bold": false}] +bossbar set fz:sweeper players @a[tag=!fz.sweeperBossbarOff] scoreboard players remove sweeperBossbar parameter 1 schedule function fz:sweeper/bossbar 1s \ No newline at end of file diff --git a/data/fz/functions/sweeper/config/off.mcfunction b/data/fz/functions/sweeper/config/off.mcfunction index 93f4d1f..aaac352 100644 --- a/data/fz/functions/sweeper/config/off.mcfunction +++ b/data/fz/functions/sweeper/config/off.mcfunction @@ -13,7 +13,7 @@ schedule clear fz:sweeper/timer/2min schedule clear fz:sweeper/timer/3min schedule clear fz:sweeper/timer/4min #设置怪物血条 -bossbar set minecraft:fz.sweeper visible false +bossbar set fz:sweeper visible false tellraw @a[tag=!fz.sweeperMessageOff] {"text": "[信息]扫地机已关闭","color": "#5fff00"} execute as @a[tag=!fz.sweeperSoundOff] at @s run playsound minecraft:block.note_block.pling voice @s ~ ~ ~ 1 2 \ No newline at end of file diff --git a/data/fz/functions/sweeper/config/on.mcfunction b/data/fz/functions/sweeper/config/on.mcfunction index 302b44a..f8f98d3 100644 --- a/data/fz/functions/sweeper/config/on.mcfunction +++ b/data/fz/functions/sweeper/config/on.mcfunction @@ -17,7 +17,7 @@ schedule clear fz:sweeper/timer/2min schedule clear fz:sweeper/timer/3min schedule clear fz:sweeper/timer/4min #设置怪物血条 -bossbar set minecraft:fz.sweeper visible true +bossbar set fz:sweeper visible true function fz:sweeper/main function fz:sweeper/bossbar \ No newline at end of file diff --git a/data/fz/functions/sweeper/config/trigger.mcfunction b/data/fz/functions/sweeper/config/trigger.mcfunction index d3c7de1..480ff15 100644 --- a/data/fz/functions/sweeper/config/trigger.mcfunction +++ b/data/fz/functions/sweeper/config/trigger.mcfunction @@ -13,7 +13,7 @@ execute if score @s config matches 1478966205 run tag @s add fz.sweeperMessageOf execute if score @s config matches 1478966216 run scoreboard players set keepMinecart parameter 1 execute if score @s config matches 1478966217 run scoreboard players reset keepMinecart parameter -bossbar set minecraft:fz.sweeper players @a[tag=!fz.sweeperBossbarOff] +bossbar set fz:sweeper players @a[tag=!fz.sweeperBossbarOff] scoreboard players reset @s config function fz:config/display \ No newline at end of file diff --git a/data/fz/functions/sweeper/install.mcfunction b/data/fz/functions/sweeper/install.mcfunction index 4705a8e..1f8ca2e 100644 --- a/data/fz/functions/sweeper/install.mcfunction +++ b/data/fz/functions/sweeper/install.mcfunction @@ -1,6 +1,6 @@ -data merge storage fz.installed {sweeper: 1b} -bossbar add fz.sweeper {"text":"null"} -bossbar set fz.sweeper value 0 +data modify storage fz:survival installed.sweeper set value 1b +bossbar add fz:sweeper {"text":"null"} +bossbar set fz:sweeper value 0 #提示已安装 tellraw @a {"text": "[信息]扫地机已安装","color": "#5fff00"} function fz:sweeper/start \ No newline at end of file diff --git a/data/fz/functions/sweeper/main.mcfunction b/data/fz/functions/sweeper/main.mcfunction index 5bce38c..39865ff 100644 --- a/data/fz/functions/sweeper/main.mcfunction +++ b/data/fz/functions/sweeper/main.mcfunction @@ -1,5 +1,5 @@ -execute if score keepMinecart parameter matches 1 run execute store result score sweeperItem parameter run kill @e[type=item,predicate=!fz:sweeper/minecart] -execute unless score keepMinecart parameter matches 1 run execute store result score sweeperItem parameter run kill @e[type=item] +execute if score keepMinecart parameter matches 1 store result score sweeperItem parameter run kill @e[type=item,predicate=!fz:sweeper/minecart] +execute unless score keepMinecart parameter matches 1 store result score sweeperItem parameter run kill @e[type=item] tellraw @a [{"text": "[信息]本次清理了","color": "#5fff00"},{"score": {"objective": "parameter", "name": "sweeperItem"},"color": "#5fff00"},{"text": "堆物品","color": "#5fff00"}] execute as @a[tag=!fz.sweeperSoundOff] at @s run playsound minecraft:block.note_block.pling voice @s ~ ~ ~ 1 2 execute if score sweeperTime parameter matches 30 run function fz:sweeper/timer/30s diff --git a/data/fz/functions/sweeper/start.mcfunction b/data/fz/functions/sweeper/start.mcfunction index 9e39f82..871f393 100644 --- a/data/fz/functions/sweeper/start.mcfunction +++ b/data/fz/functions/sweeper/start.mcfunction @@ -11,6 +11,6 @@ schedule clear fz:sweeper/timer/1min schedule clear fz:sweeper/timer/2min schedule clear fz:sweeper/timer/3min schedule clear fz:sweeper/timer/4min -bossbar set fz.sweeper visible false +bossbar set fz:sweeper visible false tellraw @a {"text": "[信息]扫地机已启用","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/sweeper/uninstall.mcfunction b/data/fz/functions/sweeper/uninstall.mcfunction index e19627a..cdfc2de 100644 --- a/data/fz/functions/sweeper/uninstall.mcfunction +++ b/data/fz/functions/sweeper/uninstall.mcfunction @@ -12,6 +12,8 @@ schedule clear fz:sweeper/timer/2min schedule clear fz:sweeper/timer/3min schedule clear fz:sweeper/timer/4min -data merge storage fz.installed {sweeper: 0b} +bossbar remove fz:sweeper + +data modify storage fz:survival installed.sweeper set value 0b #提示已卸载 tellraw @a {"text": "[信息]扫地机已卸载","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/uninstall.mcfunction b/data/fz/functions/uninstall.mcfunction index 9f72e0b..e665165 100644 --- a/data/fz/functions/uninstall.mcfunction +++ b/data/fz/functions/uninstall.mcfunction @@ -9,6 +9,6 @@ scoreboard objectives remove parameter scoreboard objectives remove calculator scoreboard objectives remove leaveGame #存入已卸载信息,下次启动不会重新安装 -data merge storage fz.installed {installed: 0b} +data modify storage fz:survival installed.datapack set value 0b #提示已卸载 tellraw @a {"text": "[信息]FZ'sDatapack已卸载","color": "#5fff00"} \ No newline at end of file diff --git a/data/fz/functions/update.mcfunction b/data/fz/functions/update.mcfunction deleted file mode 100644 index 6525bce..0000000 --- a/data/fz/functions/update.mcfunction +++ /dev/null @@ -1,12 +0,0 @@ -#卸载 -function fz:uninstall -#安装 -function fz:install -#再卸载已经被卸载的项目 -execute if data storage fz.installed {config: 0b} run function fz:config/uninstall -execute if data storage fz.installed {sweeper: 0b} run function fz:sweeper/uninstall -execute if data storage fz.installed {scoreboards: 0b} run function fz:scoreboards/uninstall -execute if data storage fz.installed {health: 0b} run function fz:health/uninstall -execute if data storage fz.installed {logintips: 0b} run function fz:login/logintips/uninstall -#提示已安装 -tellraw @a {"text": "[信息]升级完成","color": "#5fff00"} \ No newline at end of file diff --git a/restore_scores.sc b/restore_scores.sc index 44827b7..7470d71 100644 --- a/restore_scores.sc +++ b/restore_scores.sc @@ -150,8 +150,14 @@ __restore(pl, s_player) ->( c_for(i = 0, i < length(pl), i += 1, run('player ' + pl:i + ' spawn'); game_tick(50); + //滑翔距离 + //mc会统计多一倍的数据,所以除以200 + aviate = statistic(pl:i, 'custom', 'aviate_one_cm')/200; + print(aviate); + scoreboard('fz.aviate1m', pl:i, aviate); + total_aviate += aviate; //活跃时间 - actime = statistic(pl:i, 'custom', 'play_one_minute')/72000; + actime = statistic(pl:i, 'custom', 'play_time')/72000; print(actime); scoreboard('activation', pl:i, actime); total_actime += actime; @@ -205,8 +211,9 @@ __restore(pl, s_player) ->( scoreboard('totalList', '总在线时间(h)', total_actime); scoreboard('damageTaken', '群p抖M', total_hurt); scoreboard('totalList', '群p抖M', total_hurt); + scoreboard('fz.aviate1m', '总滑翔距离', total_aviate); + scoreboard('totalList', '总滑翔距离', total_aviate); game_tick(50); - print('完成!'); run('function fz:scoreboards/install') ); by_whitelist() ->( @@ -214,6 +221,6 @@ by_whitelist() ->( s_player = player(); game_tick(50); __restore(pl, s_player); - print('done! '); + print('完成!'); return() ) \ No newline at end of file diff --git a/图片示例:设置界面.png b/图片示例:设置界面.png new file mode 100644 index 0000000000000000000000000000000000000000..8b53a645688dfa51ac0bfc1533bc9f8d3ac903ed GIT binary patch literal 30821 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 Ak^lez literal 0 HcmV?d00001