Compare commits

...

4 Commits

Author SHA1 Message Date
延皓 3ce37c9abf 添加分数恢复脚本 2022-07-26 07:57:04 +08:00
延皓 5520832d55 beta.2 2022-07-25 13:39:47 +08:00
延皓 696adfa9d7 添加交互器打开方式选项、添加将假人分数忽略的地毯脚本 2022-07-25 13:34:40 +08:00
延皓 4ef9270a21 update LICENSE. 2022-07-19 19:53:18 +00:00
97 changed files with 655 additions and 213 deletions
-9
View File
@@ -1,9 +0,0 @@
data/minecraft/advancements
data/minecraft/loot_tables
data/minecraft/recipes
data/minecraft/tags/blocks
data/minecraft/tags/entity_types
data/minecraft/tags/fluids
data/minecraft/tags/game_events
data/minecraft/tags/items
data/minecraft/tags/worldgen
+5 -3
View File
@@ -5,14 +5,14 @@
- `函数`,指数据包`<命名空间>/functions`目录下的`.mcfunction`文件 - `函数`,指数据包`<命名空间>/functions`目录下的`.mcfunction`文件
- `标签`,指数据包`<命名空间>/tags`目录下的`.json`文件 - `标签`,指数据包`<命名空间>/tags`目录下的`.json`文件
- `覆盖标签并填入函数`时,`replace``true` - `覆盖标签并填入函数`时,`replace``true`
``` ``` json
{ {
"replace": true, "replace": true,
"values": ... "values": ...
} }
``` ```
- `向标签中注册函数`时,`replace`为`false` - `向标签中注册函数`时,`replace`为`false`
``` ``` json
{ {
"replace": false, "replace": false,
"values": ... "values": ...
@@ -73,7 +73,9 @@
### 配置模块 ### 配置模块
#### 按钮操作 #### 按钮操作
1. 定义一个显示按钮时执行的函数,使用形如`tellraw @s {"text": "[按钮]", "clickEvent": {"action": "run_command", "value": "/trigger fz.module.config.trigger set <触发器分数>"}}`的指令定义按钮。**大多数情况下这里的触发器分数必须是独一无二的** 1. 定义一个显示按钮时执行的函数,使用形如`tellraw @s {"text": "[按钮]", "clickEvent": {"action": "run_command", "value": "/trigger fz.module.config.trigger set <触发器分数>"}}`的指令定义按钮。
- 大多数情况下这里的触发器分数必须是独一无二的
- 建议使用`>10000`的随机数作为自定义按钮的触发器分数
2. 在[`#fz:module/config/display`](data/fz/tags/functions/module/config/display.json)标签中注册上述函数 2. 在[`#fz:module/config/display`](data/fz/tags/functions/module/config/display.json)标签中注册上述函数
3. 定义一个点击按钮时执行的函数,使用形如`execute if score @s fz.module.config.trigger matches <min>..<max> run ...`的指令判断玩家的触发器分数,并执行你的操作 3. 定义一个点击按钮时执行的函数,使用形如`execute if score @s fz.module.config.trigger matches <min>..<max> run ...`的指令判断玩家的触发器分数,并执行你的操作
4. 如需在点击后重新显示一遍配置页面,请在上述函数中调用一次[`#fz:module/config/display`](data/fz/tags/functions/module/config/display.json)标签,**请不要将此标签直接注册到[`#fz:module/config/on_click`](data/fz/tags/functions/module/config/on_click.json)标签中** 4. 如需在点击后重新显示一遍配置页面,请在上述函数中调用一次[`#fz:module/config/display`](data/fz/tags/functions/module/config/display.json)标签,**请不要将此标签直接注册到[`#fz:module/config/on_click`](data/fz/tags/functions/module/config/on_click.json)标签中**
+16 -17
View File
@@ -1,21 +1,20 @@
MIT License
Copyright (c) 2022 延皓 FZSD许可证
Permission is hereby granted, free of charge, to any person obtaining a copy 2022/7/20 https://gitee.com/harvey-husky/fz-survival-datapack/LICENSE
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all 版权所有 © 2019-2022 延皓<https://gitee.com/harvey-husky><https://space.bilibili.com/677233356>
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 定义:
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, “该许可证”指FZSD许可证。
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE “该软件”指许可在该许可证下的程序和相关文档的集合。
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER “官方网址”指由版权所有者提供的该软件的发布网址。
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 您对该软件的复制、使用、修改及分发受如下条款的约束:
SOFTWARE. 1. 禁止添加、修改或删除该许可证的内容。
2. 禁止未经授权的转载、销售或二次发布该软件。
3. 禁止添加、修改或抹除该软件中的原作者署名。
4. 如果您从部署了该软件的Minecraft服务器中以任何方式获取了收益,则您必须在游戏中的明显位置明确告知用户您的Minecraft服务器使用了该软件,并附上官方网址。
5. 如果您修改了该软件中的任何内容,您必须将修改部分开源在主流开源平台(如gitee<https://gitee.com/>或github<https://github.com/>等)。
6. 如果您修改了该软件中的任何内容,您必须保留该许可证,但您可以追加其他许可证(不包括不支持附加条款的许可证)。当您添加的许可证中的条款与该许可证冲突时,必须以该许可证为准。
7. 该软件在提供时不带任何明示或默示的担保。在任何情况下,版权所有者不对任何人因使用该软件而引发的任何直接或间接损失承担任何责任。
@@ -2,7 +2,7 @@
"replace": false, "replace": false,
"values": [ "values": [
{ {
"id": "fz.admin:autocarpet", "id": "fz.admin:preset_carpet",
"required": true "required": true
} }
] ]
@@ -19,6 +19,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_aviate_one_meter" "function": "fz:game_event/advancement/on_aviate_one_meter"
} }
} }
+1 -1
View File
@@ -19,6 +19,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_dead" "function": "fz:game_event/advancement/on_dead"
} }
} }
@@ -1,21 +1,32 @@
{ {
"parent": "fz:game_event",
"criteria": { "criteria": {
"on_entered_nether_portal": { "on_entered_nether_portal": {
"trigger": "minecraft:changed_dimension", "trigger": "minecraft:changed_dimension",
"conditions": { "conditions": {
"player": { "player": [
"location": { {
"block": { "condition": "minecraft:reference",
"blocks": [ "name": "fz:is_real_player"
"minecraft:nether_portal" },
] {
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"location": {
"block": {
"blocks": [
"minecraft:nether_portal"
]
}
}
} }
} }
} ]
} }
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_entered_nether_portal" "function": "fz:game_event/advancement/on_entered_nether_portal"
} }
} }
@@ -4,6 +4,12 @@
"on_fished": { "on_fished": {
"trigger": "minecraft:fishing_rod_hooked", "trigger": "minecraft:fishing_rod_hooked",
"conditions": { "conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fz:is_real_player"
}
],
"item": { "item": {
"tag": "fz:raw_fishes" "tag": "fz:raw_fishes"
} }
@@ -11,6 +17,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_fished" "function": "fz:game_event/advancement/on_fished"
} }
} }
@@ -4,17 +4,27 @@
"on_hurt_entity_with_tools": { "on_hurt_entity_with_tools": {
"trigger": "minecraft:player_hurt_entity", "trigger": "minecraft:player_hurt_entity",
"conditions": { "conditions": {
"player": { "player": [
"equipment": { {
"mainhand": { "condition": "minecraft:reference",
"tag": "fz:tools" "name": "fz:is_real_player"
},
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"equipment": {
"mainhand": {
"tag": "fz:tools"
}
}
} }
} }
} ]
} }
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_hurt_entity_with_tools" "function": "fz:game_event/advancement/on_hurt_entity_with_tools"
} }
} }
@@ -4,6 +4,12 @@
"on_killed_mob_or_player": { "on_killed_mob_or_player": {
"trigger": "minecraft:player_killed_entity", "trigger": "minecraft:player_killed_entity",
"conditions": { "conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fz:is_real_player"
}
],
"entity": [ "entity": [
{ {
"condition": "minecraft:inverted", "condition": "minecraft:inverted",
@@ -23,6 +29,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_killed_mob_or_player" "function": "fz:game_event/advancement/on_killed_mob_or_player"
} }
} }
@@ -22,6 +22,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_login" "function": "fz:game_event/advancement/on_login"
} }
} }
@@ -4,6 +4,12 @@
"on_piglin_trade": { "on_piglin_trade": {
"trigger": "minecraft:thrown_item_picked_up_by_entity", "trigger": "minecraft:thrown_item_picked_up_by_entity",
"conditions": { "conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fz:is_real_player"
}
],
"entity": { "entity": {
"type": "minecraft:piglin", "type": "minecraft:piglin",
"flags": { "flags": {
@@ -14,6 +20,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_piglin_trade" "function": "fz:game_event/advancement/on_piglin_trade"
} }
} }
@@ -2,10 +2,18 @@
"parent": "fz:game_event", "parent": "fz:game_event",
"criteria": { "criteria": {
"on_placed_block": { "on_placed_block": {
"trigger": "minecraft:placed_block" "trigger": "minecraft:placed_block",
"conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fz:is_real_player"
}
]
}
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_placed_block" "function": "fz:game_event/advancement/on_placed_block"
} }
} }
@@ -19,6 +19,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_play_one_hour" "function": "fz:game_event/advancement/on_play_one_hour"
} }
} }
@@ -4,6 +4,12 @@
"on_shears_used_on_entity": { "on_shears_used_on_entity": {
"trigger": "minecraft:player_interacted_with_entity", "trigger": "minecraft:player_interacted_with_entity",
"conditions": { "conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fz:is_real_player"
}
],
"entity": { "entity": {
"type": "#fz:shearable" "type": "#fz:shearable"
}, },
@@ -14,6 +20,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_shears_used_on_entity" "function": "fz:game_event/advancement/on_shears_used_on_entity"
} }
} }
+15 -5
View File
@@ -4,15 +4,25 @@
"on_sneak": { "on_sneak": {
"trigger": "minecraft:tick", "trigger": "minecraft:tick",
"conditions": { "conditions": {
"player": { "player": [
"flags": { {
"is_sneaking": true "condition": "minecraft:reference",
"name": "fz:is_real_player"
},
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"flags": {
"is_sneaking": true
}
}
} }
} ]
} }
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_sneak" "function": "fz:game_event/advancement/on_sneak"
} }
} }
@@ -19,6 +19,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_took_damage" "function": "fz:game_event/advancement/on_took_damage"
} }
} }
@@ -5,6 +5,12 @@
"__comment": "斧子剥树皮会触发两次!", "__comment": "斧子剥树皮会触发两次!",
"trigger": "minecraft:item_used_on_block", "trigger": "minecraft:item_used_on_block",
"conditions": { "conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fz:is_real_player"
}
],
"item": { "item": {
"tag": "fz:tools" "tag": "fz:tools"
} }
@@ -12,6 +18,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_tools_used_on_block" "function": "fz:game_event/advancement/on_tools_used_on_block"
} }
} }
@@ -4,21 +4,31 @@
"on_unsneak": { "on_unsneak": {
"trigger": "minecraft:tick", "trigger": "minecraft:tick",
"conditions": { "conditions": {
"player": { "player": [
"flags": { {
"is_sneaking": false "condition": "minecraft:reference",
"name": "fz:is_real_player"
}, },
"type_specific": { {
"type": "player", "condition": "minecraft:entity_properties",
"advancements": { "entity": "this",
"fz:game_event/on_sneak": true "predicate": {
"flags": {
"is_sneaking": false
},
"type_specific": {
"type": "player",
"advancements": {
"fz:game_event/on_sneak": true
}
}
} }
} }
} ]
} }
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_unsneak" "function": "fz:game_event/advancement/on_unsneak"
} }
} }
@@ -15,6 +15,6 @@
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_used_tool" "function": "fz:game_event/advancement/on_used_tool"
} }
} }
@@ -2,10 +2,18 @@
"parent": "fz:game_event", "parent": "fz:game_event",
"criteria": { "criteria": {
"on_villager_trade": { "on_villager_trade": {
"trigger": "minecraft:villager_trade" "trigger": "minecraft:villager_trade",
"conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fz:is_real_player"
}
]
}
} }
}, },
"rewards": { "rewards": {
"function": "fz:game_event/player/on_villager_trade" "function": "fz:game_event/advancement/on_villager_trade"
} }
} }
@@ -0,0 +1,7 @@
{
"criteria": {
"interactor": {
"trigger": "minecraft:impossible"
}
}
}
@@ -0,0 +1,29 @@
{
"parent": "fz:module/interactor",
"criteria": {
"on_click": {
"trigger": "minecraft:tick",
"conditions": {
"player": [
{
"condition": "minecraft:reference",
"name": "fz:is_real_player"
},
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:entity_scores",
"entity": "this",
"scores": {
"fz.module.interactor.trigger": 0
}
}
}
]
}
}
},
"rewards": {
"function": "fz:module/interactor/event/on_click"
}
}
@@ -0,0 +1,7 @@
# 调用者:advancements/fz:~
execute if predicate fz:is_real_player run function fz:game_event/player/on_aviate_one_meter
##
scoreboard players operation @s fz.event.aviating_distance %= 200 fz.variable.integer
advancement revoke @s only fz:game_event/on_aviate_one_meter
@@ -0,0 +1,7 @@
# 调用者:advancements/fz:~
execute if predicate fz:is_real_player run function fz:game_event/player/on_dead
##
scoreboard players set @s fz.event.death_count 0
advancement revoke @s only fz:game_event/on_dead
@@ -3,4 +3,5 @@ execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @
function #fz:game_event/player/on_entered_nether_portal function #fz:game_event/player/on_entered_nether_portal
##
advancement revoke @s only fz:game_event/on_entered_nether_portal advancement revoke @s only fz:game_event/on_entered_nether_portal
@@ -0,0 +1,7 @@
# 调用者:advancements/fz:~
execute if predicate fz:is_real_player run function fz:game_event/player/on_login
##
scoreboard players set @s fz.event.leave_game 0
function #fz:game_event/reset_all
@@ -0,0 +1,7 @@
# 调用者:advancements/fz:~
execute if predicate fz:is_real_player run function fz:game_event/player/on_play_one_hour
##
scoreboard players operation @s fz.event.play_ticks %= 72000 fz.variable.integer
advancement revoke @s only fz:game_event/on_play_one_hour
@@ -0,0 +1,7 @@
# 调用者:advancements/fz:~
execute if predicate fz:is_real_player run function fz:game_event/player/on_took_damage
##
scoreboard players operation @s fz.event.damage_taken %= 10 fz.variable.integer
advancement revoke @s only fz:game_event/on_took_damage
@@ -0,0 +1,9 @@
# 调用者:advancements/fz:~
execute if predicate fz:is_real_player run function fz:game_event/player/on_used_tool
##
function #fz:game_event/player/on_used_tool/reset_used_tool
##
advancement revoke @s only fz:game_event/on_used_tool
@@ -3,4 +3,4 @@
advancement revoke @s from fz:game_event advancement revoke @s from fz:game_event
## ##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "已重置玩家"}, {"selector": "@s"}, {"text": "所有事件进度"}] execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "已重置玩家"}, {"selector": "@s"}, {"text": "游戏事件进度"}]
@@ -3,7 +3,8 @@ scoreboard objectives add fz.event.aviating_distance minecraft.custom:aviate_one
scoreboard objectives add fz.event.damage_taken minecraft.custom:damage_taken scoreboard objectives add fz.event.damage_taken minecraft.custom:damage_taken
scoreboard objectives add fz.event.death_count deathCount scoreboard objectives add fz.event.death_count deathCount
scoreboard objectives add fz.event.leave_game minecraft.custom:leave_game scoreboard objectives add fz.event.leave_game minecraft.custom:leave_game
scoreboard objectives add fz.event.play_ticks minecraft.custom:play_time ### #fz:game_event/on_tick
scoreboard objectives add fz.event.play_ticks dummy
scoreboard objectives add fz.event.villager_trade minecraft.custom:traded_with_villager scoreboard objectives add fz.event.villager_trade minecraft.custom:traded_with_villager
## 使 ## 使
+1 -1
View File
@@ -1,4 +1,4 @@
execute as @a run function #fz:game_event/reset_all execute as @a[predicate=fz:is_real_player] run function #fz:game_event/player/on_login
## ##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "已加载系统组件:游戏事件"}] execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "已加载系统组件:游戏事件"}]
@@ -0,0 +1 @@
scoreboard players add @a[predicate=fz:is_real_player] fz.event.play_ticks 1
@@ -1,15 +1,9 @@
# 调用者:advancements/fz:~
## ##
execute if score fz.logger.level fz.variable.integer matches ..300 run tellraw @a [{"nbt": "fz.level.fine", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "飞行了1m"}] execute if score fz.logger.level fz.variable.integer matches ..300 run tellraw @a [{"nbt": "fz.level.fine", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "飞行了1m"}]
## ##
scoreboard players operation fz.var.score fz.variable.integer = @s fz.event.aviating_distance scoreboard players operation fz.var.score fz.variable.integer = @s fz.event.aviating_distance
scoreboard players operation fz.var.score fz.variable.integer /= 200 fz.variable.integer scoreboard players operation fz.var.score fz.variable.integer /= 200 fz.variable.integer
scoreboard players operation @s fz.event.aviating_distance %= 200 fz.variable.integer
## ##
function #fz:game_event/player/on_aviate_one_meter function #fz:game_event/player/on_aviate_one_meter
##
advancement revoke @s only fz:game_event/on_aviate_one_meter
@@ -0,0 +1,7 @@
# 调用者:fz:game_event/player/on_used_tool
##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "挖掘了方块"}]
##
function #fz:game_event/player/on_broke_block_with_tool
@@ -1,8 +1,3 @@
# 调用者:fz:game_event/player/on_used_tool
##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "挖掘了方块"}]
## ##
scoreboard players operation fz.var.score fz.variable.integer = @s fz.event.used_tool.diamond_axe scoreboard players operation fz.var.score fz.variable.integer = @s fz.event.used_tool.diamond_axe
scoreboard players operation fz.var.score fz.variable.integer += @s fz.event.used_tool.diamond_hoe scoreboard players operation fz.var.score fz.variable.integer += @s fz.event.used_tool.diamond_hoe
@@ -35,6 +30,7 @@ scoreboard players operation fz.var.score fz.variable.integer += @s fz.event.use
scoreboard players operation fz.var.score fz.variable.integer += @s fz.event.used_tool.wooden_pickaxe scoreboard players operation fz.var.score fz.variable.integer += @s fz.event.used_tool.wooden_pickaxe
scoreboard players operation fz.var.score fz.variable.integer += @s fz.event.used_tool.wooden_shovel scoreboard players operation fz.var.score fz.variable.integer += @s fz.event.used_tool.wooden_shovel
scoreboard players operation fz.var.score fz.variable.integer += @s fz.event.used_tool.wooden_sword scoreboard players operation fz.var.score fz.variable.integer += @s fz.event.used_tool.wooden_sword
scoreboard players operation fz.var.score fz.variable.integer += @s fz.event.used_tool.offset
## ##
function #fz:game_event/player/on_broke_block execute unless score fz.var.score fz.variable.integer matches ..0 run function fz:game_event/player/on_broke_block_with_tool
@@ -1,14 +1,8 @@
# 调用者:advancements/fz:~
## ##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "死亡"}] execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "死亡"}]
## ##
# scoreboard players operation fz.var.score fz.variable.integer = @s fz.event.death_count # scoreboard players operation fz.var.score fz.variable.integer = @s fz.event.death_count
scoreboard players set @s fz.event.death_count 0
## ##
function #fz:game_event/player/on_dead function #fz:game_event/player/on_dead
##
advancement revoke @s only fz:game_event/on_dead
@@ -1,10 +1,5 @@
# 调用者:advancements/fz:~
## ##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "登录游戏"}] execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "登录游戏"}]
scoreboard players set @s fz.event.leave_game 0
## ##
### reset_events标签
function #fz:game_event/player/on_login function #fz:game_event/player/on_login
@@ -1,15 +1,9 @@
# 调用者:advancements/fz:~
## ##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "游玩了1h"}] execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "游玩了1h"}]
## ##
# scoreboard players operation fz.var.score fz.variable.integer = @s fz.event.play_ticks # scoreboard players operation fz.var.score fz.variable.integer = @s fz.event.play_ticks
# scoreboard players operation fz.var.score fz.variable.integer /= 3600 fz.variable.integer # scoreboard players operation fz.var.score fz.variable.integer /= 3600 fz.variable.integer
scoreboard players operation @s fz.event.play_ticks %= 72000 fz.variable.integer
## ##
function #fz:game_event/player/on_play_one_hour function #fz:game_event/player/on_play_one_hour
##
advancement revoke @s only fz:game_event/on_play_one_hour
@@ -1,15 +1,9 @@
# 调用者:advancements/fz:~
## ##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "受到了伤害"}] execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "受到了伤害"}]
## ##
scoreboard players operation fz.var.score fz.variable.integer = @s fz.event.damage_taken scoreboard players operation fz.var.score fz.variable.integer = @s fz.event.damage_taken
scoreboard players operation fz.var.score fz.variable.integer /= 10 fz.variable.integer scoreboard players operation fz.var.score fz.variable.integer /= 10 fz.variable.integer
scoreboard players operation @s fz.event.damage_taken %= 10 fz.variable.integer
## ##
function #fz:game_event/player/on_took_damage function #fz:game_event/player/on_took_damage
##
advancement revoke @s only fz:game_event/on_took_damage
@@ -1,18 +1,5 @@
# 调用者:advancements/fz:~
## ##
execute if score fz.logger.level fz.variable.integer matches ..300 run tellraw @a [{"nbt": "fz.level.fine", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "使用了工具"}] execute if score fz.logger.level fz.variable.integer matches ..300 run tellraw @a [{"nbt": "fz.level.fine", "interpret": true, "storage": "fz:logger"}, {"text": "事件已触发:玩家"}, {"selector": "@s"}, {"text": "使用了工具"}]
## ##
function #fz:game_event/player/on_used_tool function #fz:game_event/player/on_used_tool
##
### fz:game_event/[on_tools_used_on_block, on_shears_used_on_entity, on_hurt_entity_with_tools]
### 使
execute unless score @s fz.event.used_tool.offset matches ..-1 run function fz:game_event/player/on_broke_block
##
function #fz:game_event/player/on_used_tool/reset_used_tool
##
advancement revoke @s only fz:game_event/on_used_tool
@@ -0,0 +1,5 @@
##
function #fz:module/interactor/event/on_click/on_click
##
advancement revoke @s only fz:module/interactor/on_click
@@ -1,3 +0,0 @@
# 本目录用于存放向事件中注册的函数,并不用来新建事件
execute if entity @s[x_rotation = -90] run function #fz:module/interactor/on_interact
@@ -0,0 +1,3 @@
# 本目录用于存放向事件中注册的函数,并不用来新建事件
execute unless score @s fz.module.interactor.player.config matches -1 if entity @s[x_rotation = -90] run function #fz:module/interactor/display
@@ -1,2 +1,4 @@
## ##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "玩家"}, {"selector": "@s"}, {"text": "触发了配置页面"}] execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "玩家"}, {"selector": "@s"}, {"text": "重置了交互器事件进度"}]
advancement revoke @s from fz:module/interactor/on_click
@@ -1,4 +1,5 @@
scoreboard objectives add fz.module.interactor.trigger trigger scoreboard objectives add fz.module.interactor.trigger trigger
scoreboard objectives add fz.module.interactor.player.config dummy
## ##
data modify storage fz:installed fz.module.interactor set value 1b data modify storage fz:installed fz.module.interactor set value 1b
@@ -0,0 +1,7 @@
##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "向玩家"}, {"selector": "@s"}, {"text": "显示了交互器"}]
execute if data storage fz:installed fz.module{last_death:1b} run tellraw @s {"text": "交互器打开方式:"}
execute if data storage fz:installed fz.module{last_death:1b} unless score @s fz.module.interactor.player.config matches -1 run tellraw @s [{"text": "- 抬头+蹲起:"}, [{"text": "[", "color": "dark_gray", "hoverEvent": {"action": "show_text", "value": "点击关闭"}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 900"}},{"text": "已开启", "color": "green"},{"text": "]"}]]
execute if data storage fz:installed fz.module{last_death:1b} if score @s fz.module.interactor.player.config matches -1 run tellraw @s [{"text": "- 抬头+蹲起:"}, [{"text": "[", "color": "dark_gray", "hoverEvent": {"action": "show_text", "value": "点击开启"}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 910"}},{"text": "已关闭", "color": "red"},{"text": "]"}]]
@@ -0,0 +1,8 @@
# 调用者:#fz:module/interactor/on_click
##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "玩家"}, {"selector": "@s"}, {"text": "的交互器分数为:"}, {"score": {"name": "@s", "objective": "fz.module.interactor.trigger"}}]
execute if score @s fz.module.interactor.trigger matches 900 run scoreboard players set @s fz.module.interactor.player.config -1
execute if score @s fz.module.interactor.trigger matches 910 run scoreboard players set @s fz.module.interactor.player.config 0
@@ -1,4 +1,3 @@
schedule clear fz:module/interactor/loop
execute as @a run function #fz:module/interactor/reset_trigger execute as @a run function #fz:module/interactor/reset_trigger
## ##
@@ -1,6 +0,0 @@
# 调用者:fz:module/interactor/trigger
## 0
execute as @a if score @s fz.module.interactor.trigger matches 1.. run function #fz:module/interactor/on_click/on_click
schedule function fz:module/interactor/loop 1t replace
@@ -1,4 +0,0 @@
# 调用者:#fz:module/interactor/on_click
##
execute if score fz.logger.level fz.variable.integer matches ..400 run tellraw @a [{"nbt": "fz.level.debug", "interpret": true, "storage": "fz:logger"}, {"text": "玩家"}, {"selector": "@s"}, {"text": "点击了配置按钮,触发器分数为:"}, {"score": {"name": "@s", "objective": "fz.module.interactor.trigger"}}]
@@ -1,2 +0,0 @@
##
schedule function #fz:module/interactor/timeout 300s replace
@@ -1,6 +1,6 @@
# 调用者:#fz:module/interactor/reset_trigger # 调用者:#fz:module/interactor/reset_trigger
scoreboard players reset @s fz.module.interactor.trigger scoreboard players set @s fz.module.interactor.trigger 0
scoreboard players enable @s fz.module.interactor.trigger scoreboard players enable @s fz.module.interactor.trigger
## ##
@@ -1,4 +0,0 @@
schedule clear fz:module/interactor/loop
##
execute if score fz.logger.level fz.variable.integer matches ..500 run tellraw @a [{"nbt": "fz.level.info", "interpret": true, "storage": "fz:logger"}, {"text": "五分钟无人回应,已关闭配置按钮监听,再次使用时需重新唤起"}]
@@ -20,5 +20,27 @@ scoreboard objectives remove fz.module.scoreboard.display.kill_count
### ###
scoreboard objectives remove fz.module.scoreboard.display.trade_count scoreboard objectives remove fz.module.scoreboard.display.trade_count
##
###
team remove fz.module.scoreboard.display.carousel
###
team remove fz.module.scoreboard.display.general
###
team remove fz.module.scoreboard.display.activation
###
team remove fz.module.scoreboard.display.aviating_distance
###
team remove fz.module.scoreboard.display.damage_taken
###
team remove fz.module.scoreboard.display.death_count
###
team remove fz.module.scoreboard.display.dig_count
###
team remove fz.module.scoreboard.display.fishing_count
###
team remove fz.module.scoreboard.display.kill_count
###
team remove fz.module.scoreboard.display.trade_count
## ##
execute if score fz.logger.level fz.variable.integer matches ..500 run tellraw @a [{"nbt": "level.info", "interpret": true, "storage": "fz:logger"}, {"text": "已删除计分板数据!"}] execute if score fz.logger.level fz.variable.integer matches ..500 run tellraw @a [{"nbt": "level.info", "interpret": true, "storage": "fz:logger"}, {"text": "已删除计分板数据!"}]
@@ -51,6 +51,11 @@ team add fz.module.scoreboard.display.placement_count
scoreboard objectives add fz.module.scoreboard.display.trade_count dummy scoreboard objectives add fz.module.scoreboard.display.trade_count dummy
team add fz.module.scoreboard.display.trade_count team add fz.module.scoreboard.display.trade_count
team add fz.module.scoreboard.fake
team add fz.module.scoreboard.shadow
team modify fz.module.scoreboard.fake prefix {"text": "假的"}
team modify fz.module.scoreboard.shadow prefix {"text": "挂机"}
## ##
data modify storage fz:installed fz.module.scoreboard set value 1b data modify storage fz:installed fz.module.scoreboard set value 1b
@@ -1,3 +1,5 @@
# 调用者:#fz:module/scoreboard/interactor/display # 调用者:#fz:module/scoreboard/interactor/display
execute if data storage fz:installed fz.module{scoreboard:1b} run tellraw @s {"text": "计分板:"}
execute if data storage fz:installed fz.module{scoreboard:1b} run tellraw @s [[{"text": "[", "color": "dark_gray", "hoverEvent": {"action": "show_text", "contents": {"text": "", "color": "dark_red"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1000"}}, {"text": "", "color": "dark_red"}, {"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.carousel", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1010"}}, {"nbt": "fz.scoreboard.text.carousel", "interpret": true, "storage": "fz:module"}, {"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.general", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1020"}}, {"nbt": "fz.scoreboard.text.general", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.activation", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1030"}}, {"nbt": "fz.scoreboard.text.activation", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.aviating_distance", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1040"}}, {"nbt": "fz.scoreboard.text.aviating_distance", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.damage_taken", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1050"}}, {"nbt": "fz.scoreboard.text.damage_taken", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.death_count", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1060"}}, {"nbt": "fz.scoreboard.text.death_count", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.dig_count", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1070"}}, {"nbt": "fz.scoreboard.text.dig_count", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.fishing_count", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1080"}}, {"nbt": "fz.scoreboard.text.fishing_count", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.kill_count", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1090"}}, {"nbt": "fz.scoreboard.text.kill_count", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.trade_count", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1100"}}, {"nbt": "fz.scoreboard.text.trade_count", "interpret": true, "storage": "fz:module"}, {"text": "]"}]] execute if data storage fz:installed fz.module{scoreboard:1b} run tellraw @s [[{"text": "[", "color": "dark_gray", "hoverEvent": {"action": "show_text", "contents": {"text": "", "color": "dark_red"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1000"}}, {"text": "", "color": "dark_red"}, {"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.carousel", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1010"}}, {"nbt": "fz.scoreboard.text.carousel", "interpret": true, "storage": "fz:module"}, {"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.general", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1020"}}, {"nbt": "fz.scoreboard.text.general", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.activation", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1030"}}, {"nbt": "fz.scoreboard.text.activation", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.aviating_distance", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1040"}}, {"nbt": "fz.scoreboard.text.aviating_distance", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.damage_taken", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1050"}}, {"nbt": "fz.scoreboard.text.damage_taken", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.death_count", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1060"}}, {"nbt": "fz.scoreboard.text.death_count", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.dig_count", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1070"}}, {"nbt": "fz.scoreboard.text.dig_count", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.fishing_count", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1080"}}, {"nbt": "fz.scoreboard.text.fishing_count", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.kill_count", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1090"}}, {"nbt": "fz.scoreboard.text.kill_count", "interpret": true, "storage": "fz:module"},{"text": "]"}], [{"text": "[", "hoverEvent": {"action": "show_text", "contents": {"nbt": "fz.scoreboard.text.trade_count", "interpret": true, "storage": "fz:module"}}, "clickEvent": {"action": "run_command", "value": "/trigger fz.module.interactor.trigger set 1100"}}, {"nbt": "fz.scoreboard.text.trade_count", "interpret": true, "storage": "fz:module"}, {"text": "]"}]]
@@ -1,3 +0,0 @@
# 调用者:#fz:module/scoreboard/interactor/display
execute if data storage fz:installed fz.module{scoreboard:1b} run tellraw @s {"text": "计分板:"}
@@ -3,28 +3,6 @@
## ##
schedule clear fz:module/scoreboard/display/carousel/loop schedule clear fz:module/scoreboard/display/carousel/loop
##
###
team remove fz.module.scoreboard.display.carousel
###
team remove fz.module.scoreboard.display.general
###
team remove fz.module.scoreboard.display.activation
###
team remove fz.module.scoreboard.display.aviating_distance
###
team remove fz.module.scoreboard.display.damage_taken
###
team remove fz.module.scoreboard.display.death_count
###
team remove fz.module.scoreboard.display.dig_count
###
team remove fz.module.scoreboard.display.fishing_count
###
team remove fz.module.scoreboard.display.kill_count
###
team remove fz.module.scoreboard.display.trade_count
## ##
scoreboard objectives setdisplay sidebar.team.aqua scoreboard objectives setdisplay sidebar.team.aqua
scoreboard objectives setdisplay sidebar.team.black scoreboard objectives setdisplay sidebar.team.black
@@ -43,6 +21,9 @@ scoreboard objectives setdisplay sidebar.team.red
scoreboard objectives setdisplay sidebar.team.white scoreboard objectives setdisplay sidebar.team.white
scoreboard objectives setdisplay sidebar.team.yellow scoreboard objectives setdisplay sidebar.team.yellow
team remove fz.module.scoreboard.fake
team remove fz.module.scoreboard.shadow
## ##
execute if score fz.logger.level fz.variable.integer matches ..600 run tellraw @s [{"nbt": "fz.level.alert", "interpret": true, "storage": "fz:logger"}, {"text": "您要删除计分板数据吗,它将会永久失去!(真的很久!)"}, {"text": "[确定]", "color": "dark_red", "clickEvent": {"action": "suggest_command", "value": "/function #fz:module/scoreboard/clear_data"}, "hoverEvent": {"action": "show_text", "contents": {"text": "将命令填入聊天框"}}}] execute if score fz.logger.level fz.variable.integer matches ..600 run tellraw @s [{"nbt": "fz.level.alert", "interpret": true, "storage": "fz:logger"}, {"text": "您要删除计分板数据吗,它将会永久失去!(真的很久!)"}, {"text": "[确定]", "color": "dark_red", "clickEvent": {"action": "suggest_command", "value": "/function #fz:module/scoreboard/clear_data"}, "hoverEvent": {"action": "show_text", "contents": {"text": "将命令填入聊天框"}}}]
@@ -0,0 +1 @@
script run if (system_info('app_list') ~ 'fz_score' == null, run('script load fz_score'))
@@ -1,5 +1,5 @@
function fz:system/carpet/try_load_fzsd_ignore_fakeplayer_scores
function #fz:uninstall function #fz:uninstall
function #fz:install function #fz:install
function #fz:load function #fz:load
+7
View File
@@ -0,0 +1,7 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"team": "fz.module.scoreboard.fake"
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:reference",
"name": "fz:not_real_player"
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"team": "fz.module.scoreboard.shadow"
}
}
+13
View File
@@ -0,0 +1,13 @@
{
"condition": "minecraft:alternative",
"terms": [
{
"condition": "minecraft:reference",
"name": "fz:is_fake_player"
},
{
"condition": "minecraft:reference",
"name": "fz:is_shadow_player"
}
]
}
@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"fz:game_event/advancement/reset_advancements"
]
}
@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"fz:game_event/on_tick/on_tick"
]
}
@@ -1,7 +1,7 @@
{ {
"replace": false, "replace": false,
"values": [ "values": [
"#fz:game_event/reset_all", "#fz:module/interactor/reset_trigger",
"#fz:module/interactor/reset_trigger" "#fz:module/interactor/event/reset_advancements"
] ]
} }
@@ -2,6 +2,6 @@
"__comment": "调用者:fz:game_event/on_unsneaked,当玩家蹲起后触发此事件", "__comment": "调用者:fz:game_event/on_unsneaked,当玩家蹲起后触发此事件",
"replace": false, "replace": false,
"values": [ "values": [
"fz:module/interactor/event/on_unsneak" "fz:module/interactor/event/on_unsneak/on_unsneak"
] ]
} }
@@ -1,6 +1,6 @@
{ {
"replace": false, "replace": false,
"values": [ "values": [
"fz:game_event/player/on_broke_block_with_tool/on_used_tool"
] ]
} }
@@ -1,6 +0,0 @@
{
"replace": false,
"values": [
"fz:game_event/player/reset_advancements"
]
}
@@ -1,7 +1,7 @@
{ {
"replace": false, "replace": false,
"values": [ "values": [
"#fz:game_event/player/reset_advancements", "#fz:game_event/advancement/reset_advancements",
"#fz:game_event/player/on_used_tool/reset_used_tool" "#fz:game_event/player/on_used_tool/reset_used_tool"
] ]
} }
@@ -2,6 +2,7 @@
"__comment": "调用者:fz:module/interactor/on_click、fz:module/interactor/trigger", "__comment": "调用者:fz:module/interactor/on_click、fz:module/interactor/trigger",
"replace": false, "replace": false,
"values": [ "values": [
"fz:module/interactor/interactor/display",
"#fz:module/scoreboard/interactor/display", "#fz:module/scoreboard/interactor/display",
"#fz:module/here/interactor/display", "#fz:module/here/interactor/display",
"#fz:module/last_death/interactor/display", "#fz:module/last_death/interactor/display",
@@ -1,7 +1,7 @@
{ {
"replace": false, "replace": false,
"values": [ "values": [
"fz:module/interactor/on_click", "fz:module/interactor/interactor/on_click",
"#fz:module/scoreboard/interactor/on_click", "#fz:module/scoreboard/interactor/on_click",
"#fz:module/here/interactor/on_click", "#fz:module/here/interactor/on_click",
"#fz:module/last_death/interactor/on_click", "#fz:module/last_death/interactor/on_click",
@@ -1,8 +1,8 @@
{ {
"replace": false, "replace": false,
"values": [ "values": [
"#fz:module/interactor/event/on_click",
"#fz:module/interactor/display", "#fz:module/interactor/display",
"#fz:module/interactor/on_click",
"#fz:module/interactor/reset_trigger" "#fz:module/interactor/reset_trigger"
] ]
} }
@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"fz:module/interactor/event/reset_advancements"
]
}
@@ -1,9 +0,0 @@
{
"__comment": "调用者:fz:event/on_unsneak,当玩家抬头到最高角度并蹲起后,触发此事件",
"replace": false,
"values": [
"fz:module/interactor/on_interact",
"fz:module/interactor/loop",
"#fz:module/interactor/display"
]
}
@@ -1,7 +1,6 @@
{ {
"replace": false, "replace": false,
"values": [ "values": [
"fz:module/scoreboard/interactor/display/1", "fz:module/scoreboard/interactor/display"
"fz:module/scoreboard/interactor/display/2"
] ]
} }
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"replace": false, "replace": false,
"values": [ "values": [
"fz:entry" "fz:system/entry"
] ]
} }
+6
View File
@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"#fz:game_event/on_tick"
]
}
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"pack": { "pack": {
"description": "FZ's Datapack - Code By Harvey_Husky", "description": "FZ Survival Datapack 3.0 | Author: Harvey_Husky",
"pack_format": 10 "pack_format": 10
} }
} }
-5
View File
@@ -1,5 +0,0 @@
// 一个用于生成皓皓的东西
__command() -> (
run('player Harvey_Husky spawn')
)
+267
View File
@@ -0,0 +1,267 @@
// 计分板模块扩展插件
// 忽略假人分数
// **请勿修改文件名**
global_app_version = '1.0-beta.1';
__config() -> {
'scope' -> 'global',
'requires' -> {
'carpet' -> '>=1.4.45',
'minecraft' -> '>=1.17'
},
'command_permission' -> 4,
'commands' -> {
'' -> 'help',
'help' -> 'help',
'delete_old' -> 'delete_old',
'merge_old' -> 'restore_merge_old',
'restore_from_stats' -> 'restore_from_stats',
'recalculate_total' -> 'recalculate_total_scores'
}
};
__on_start() -> (
global_team_cache = read_file('team_cache', 'json');
debug(global_team_cache);
print(player('all'), 'fz_score.sc已加载!');
);
__on_close() -> (
debug(global_team_cache);
delete_file('team_cache', 'json');
write_file('team_cache', 'json', global_team_cache);
);
__on_player_connects(player) -> (
debug(player ~ 'name');
debug(player ~ 'player_type');
debug(player ~ 'team');
debug(global_team_cache);
if(player ~ 'player_type' == 'fake' && player ~ 'team' != 'fz.module.scoreboard.fake',
(
debug('1~');
global_team_cache:(player ~ 'name') = player ~ 'team';
debug(global_team_cache);
team_add('fz.module.scoreboard.fake', player);
),
player ~ 'player_type' == 'shadow' && player ~ 'team' != 'fz.module.scoreboard.shadow',
(
debug('2~');
global_team_cache:(player ~ 'name') = player ~ 'team';
team_add('fz.module.scoreboard.shadow', player);
),
try_restore_team_from_cache(player);
);
debug(global_team_cache);
);
__on_player_disconnects(player, reason) -> (
debug(player ~ 'name');
debug(player ~ 'player_type');
debug(player ~ 'team');
debug(global_team_cache);
try_restore_team_from_cache(player);
);
try_restore_team_from_cache(player) -> (
debug('restore_team_from_cache');
if(player ~ 'team' == 'fz.module.scoreboard.fake'
|| player ~ 'team' == 'fz.module.scoreboard.shadow',
debug(global_team_cache);
if(global_team_cache:(player ~ 'name') == null,
(
debug('global_team_cache:(player ~ \'name\') == null');
team_leave(player);
),
debug('global_team_cache:(player ~ \'name\') != null');
team_add(global_team_cache:(player ~ 'name') , player);
delete(global_team_cache:(player ~ 'name'));
);
);
);
help() -> (
print('这是一条帮助');
return(0);
);
delete_old() -> (
old_scoreboards = [
'usedDiaAxe', 'usedDiaPickaxe', 'usedDiaShovel', 'usedDiaHoe', 'usedIroAxe', 'usedIroPickaxe',
'usedIroShovel', 'usedIroHoe', 'usedStoAxe', 'usedStoPickaxe', 'usedStoShovel', 'usedStoHoe',
'usedWooAxe', 'usedWooPickaxe', 'usedWooShovel', 'usedWooHoe', 'usedGolAxe', 'usedGolPickaxe',
'usedGolShovel', 'usedGolHoe', 'usedNetAxe', 'usedNetPickaxe', 'usedNetShovel', 'usedNetHoe',
'usedShears', 'damageTaken', '10xDamageTaken', 'deathCounter', 'deathTester', 'digCounter',
'fishingCounter', 'fishingTester', 'killCounter', 'tradingCounter', 'totalList',
'bedrockBreaked', 'fz.bbl', 'fz.aviate1m', 'fz.aviateCounter', 'fz.aviateOneTime', 'Health',
'carpetBot', 'parameter'
];
for(old_scoreboards, scoreboard_remove(_));
team_remove('carpetBot');
team_remove('shadowedPlayer');
print('已清除旧版计分板!');
return(0);
);
restore_merge_old() -> (
merge_score('activation', 'fz.module.scoreboard.display.activation');
merge_score('damageTaken', 'fz.module.scoreboard.display.damage_taken');
merge_score('deathCounter', 'fz.module.scoreboard.display.death_count');
merge_score('digCounter', 'fz.module.scoreboard.display.dig_count');
merge_score('fishingCounter', 'fz.module.scoreboard.display.fishing_count');
merge_score('killCounter', 'fz.module.scoreboard.display.kill_count');
merge_score('tradingCounter', 'fz.module.scoreboard.display.trade_count');
merge_score('bedrockBreaked', 'fz.module.scoreboard.display.bedrock_broke_count');
merge_score('fz.aviate1m', 'fz.module.scoreboard.display.aviating_distance');
// restore_score('fz.module.scoreboard.display.placement_count', );
// 清除旧计分板
delete_old();
print('完成!');
return(0);
);
merge_score(from, to) -> (
// 旧计分板总分名字
l_1 = sort(scoreboard(from));
total_name_old = l_1:(length(l_1 - 1));
// 如有非法字符则确定是总分
if(!(total_name_old ~ '\\W'),
total_name_old = null;
debug('1' + total_name_old);
);
// 如果目标计分板不存在则创建
if(scoreboard() ~ to == null, scoreboard_add(to));
// 旧版数据包的假人列表
fake_players = team_list('carpetBot');
// 新数据包的计分板中存储的玩家列表
new_players = scoreboard('fz.module.interactor.trigger');
debug('2' + new_players);
for(scoreboard(from),
debug('3' + _);
debug('3.1' + contains(fake_players, _));
debug('3.2' + contains(new_players, _));
debug('3.3' + str(_ != total_name_old));
debug('3.4' + str((!contains(fake_players, _)
|| contains(new_players, _)
) && _ != total_name_old));
if((!contains(fake_players, _)
|| contains(new_players, _)
) && _ != total_name_old,
debug('4' + _);
debug('from' + scoreboard(from, _));
debug('to' + scoreboard(to, _));
scoreboard(to, _, scoreboard(to, _) + scoreboard(from, _));
);
);
// 重新计算总分
recalculate_total_score(to, get_total_score_name_new(to));
print('已合并:' + to);
return(0);
);
// 因为新计分板允许玩家自定义显示的总榜名称故续做复杂判断才能使脚本确定之
get_total_score_name_new(scoreboard) -> (
INT_MIN = -2147483648;
// 获取系统总榜id
system_total_name = replace(scoreboard, 'display', 'total');
// 将系统总榜分数加上最小int值使其成为最低分
scoreboard(
'fz.module.scoreboard.assign.general',
system_total_name,
scoreboard(
'fz.module.scoreboard.assign.general',
system_total_name
) + INT_MIN
);
// 将总分赋值到显示计分板上
display_total_score(scoreboard);
// 查找榜内最低分
last_min_player = null;
for(scoreboard(scoreboard),
if(last_min_player == null,
(
last_min_player = _;
),
if(scoreboard(scoreboard, _) < scoreboard(scoreboard, last_min_player),
last_min_player = _;
)
);
debug(_);
);
// 恢复总榜分数
scoreboard(
'fz.module.scoreboard.assign.general',
system_total_name,
scoreboard(
'fz.module.scoreboard.assign.general',
system_total_name
) - INT_MIN
);
display_total_score(scoreboard);
// 返回榜内最低分的名称
return(last_min_player);
);
recalculate_total_scores() -> (
return(0);
);
recalculate_total_score(scoreboard, total_score_name_new) -> (
// 计算总分
total_score = 0;
for(scoreboard(scoreboard),
if(_ != total_score_name_new,
total_score += scoreboard(scoreboard, _);
);
);
// 赋值总分到系统总分计分板
scoreboard(
'fz.module.scoreboard.assign.general',
replace(scoreboard, 'display', 'total'),
total_score
);
display_total_score(scoreboard);
return(0);
);
display_total_score(scoreboard) -> (
// 获取计算总榜的函数标签名
str_1 = split('\\.', scoreboard);
function_name = str_1:(length(str_1) - 1);
// 运行函数将分数赋值到显示计分板上
run('function #fz:module/scoreboard/assign/scoreboard/general/' + function_name);
return(0);
);
restore_from_stats() -> (
return(0);
);
merge_stat(scoreboard, ...stats) -> (
return(0);
);
contains(list, value) -> (
return(list ~ value != null);
);
debug(msg) -> (
logger('debug', msg);
return(0);
);