完整版BedrockWiki镜像!
This commit is contained in:
184
docs/wiki/entities/disabling-team-damage.md
Normal file
184
docs/wiki/entities/disabling-team-damage.md
Normal file
@@ -0,0 +1,184 @@
|
||||
---
|
||||
title: 禁用团队伤害
|
||||
category: 巧思案例
|
||||
tags:
|
||||
- 中级
|
||||
mentions:
|
||||
- SirLich
|
||||
- solvedDev
|
||||
- Joelant05
|
||||
- MedicalJewel105
|
||||
- Luthorius
|
||||
- TCLynx
|
||||
---
|
||||
|
||||
# 禁用团队伤害
|
||||
|
||||
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
|
||||
|
||||
若需禁用团队伤害(使玩家无法攻击队友),请为每位玩家分配带有队伍名称的标签(本教程将使用`team1`、`team2`、`team3`和`team4`作为示例)。
|
||||
警告:该方法在领域服(Realms)中**不可用**,原因是领域服存在一个漏洞会导致行为包中修改后的player.json文件失效,游戏会直接忽略这些修改(该问题可能在后续版本中修复,但在1.20.15版本中尚未解决。此问题也影响更早的Minecraft版本)。
|
||||
|
||||
现在将以下伤害感应器组件添加至你的`player.json`文件的`"components": {}`部分。查看注释以获取详细说明。
|
||||
|
||||
::: code-group
|
||||
```json [BP/entities/player.json#components]
|
||||
"minecraft:damage_sensor":{
|
||||
"triggers":[
|
||||
{ //若已有伤害感应器组件,只需将此对象复制到"triggers"数组中
|
||||
"on_damage":{
|
||||
"filters":{
|
||||
"any_of":[
|
||||
{
|
||||
"all_of":[
|
||||
{ "test":"has_tag", "value":"team1" }, //该玩家是否拥有此标签?
|
||||
{ "test":"has_tag", "subject":"other", "value":"team1" } //被攻击实体是否拥有此标签?
|
||||
]
|
||||
},
|
||||
{
|
||||
"all_of":[ //以下为重复结构,为每个队伍添加相同配置
|
||||
{ "test":"has_tag", "value":"team2" },
|
||||
{ "test":"has_tag", "subject":"other", "value":"team2" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"all_of":[
|
||||
{ "test":"has_tag", "value":"team3" },
|
||||
{ "test":"has_tag", "subject":"other", "value":"team3" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"all_of":[
|
||||
{ "test":"has_tag", "value":"team4" },
|
||||
{ "test":"has_tag", "subject":"other", "value":"team4" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"all_of":[
|
||||
{ "test":"has_tag", "value":"team5" },
|
||||
{ "test":"has_tag", "subject":"other", "value":"team5" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"deals_damage":false //若任意过滤器条件满足,本次攻击将不会造成伤害
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
### 抛射物处理
|
||||
|
||||
由于抛射物实体使用的原始滤镜系统,实现此功能需要完全不同的方法。该方案需要以下组件:
|
||||
- 标签(Tags)
|
||||
- 周期性检测(Ticking)
|
||||
- 条件伤害(Hurt on Condition)
|
||||
- 函数(Functions)
|
||||
|
||||
::: code-group
|
||||
```json [BP/entities/player.json#components]
|
||||
//"components"部分
|
||||
"minecraft:timer": { //用于通过事件给附近未标记的抛射物添加队伍标签
|
||||
"time": [
|
||||
0.0,
|
||||
0.1
|
||||
],
|
||||
"looping": true,
|
||||
"time_down_event": {
|
||||
"event": "wiki:projectile_team",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
"minecraft:hurt_on_condition": { //使抛射物无法直接造成伤害
|
||||
"damage_conditions": [ //改为通过标签系统触发伤害
|
||||
{
|
||||
"filters": {
|
||||
"test": "has_tag",
|
||||
"value": "damage"
|
||||
},
|
||||
"cause": "projectile",
|
||||
"damage_per_tick": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
"minecraft:damage_sensor": { //触发事件来移除damage标签
|
||||
"triggers": { //确保伤害只生效一次
|
||||
"cause": "projectile",
|
||||
"deals_damage": true,
|
||||
"on_damage": {
|
||||
"filters": {
|
||||
"test": "has_tag",
|
||||
"value": "damage"
|
||||
},
|
||||
"event": "wiki:stop_damage"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//"events"部分
|
||||
"wiki:projectile_team": { //根据玩家队伍标签应用对应的抛射物标签
|
||||
"run_command": {
|
||||
"command": [
|
||||
"function wiki-apply_team"
|
||||
]
|
||||
}
|
||||
},
|
||||
"wiki:stop_damage": { //移除damage标签的事件
|
||||
"run_command": {
|
||||
"command": [
|
||||
"tag @s remove damage"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
::: code-group
|
||||
|
||||
```json [BP/entities/arrow.json]
|
||||
//"components"部分
|
||||
"on_hit": { //击中时触发事件...
|
||||
"definition_event": {
|
||||
"affect_projectile": true,
|
||||
"event_trigger": {
|
||||
"event": "wiki:hit",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
"remove_on_hit": {}
|
||||
}
|
||||
|
||||
//"events"部分
|
||||
"wiki:hit": { //...执行函数,为不同队伍玩家添加damage标签
|
||||
"run_command": {
|
||||
"command": [
|
||||
"function wiki-apply_damage"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
::: code-group
|
||||
|
||||
```mcfunction [BP/functions/wiki-apply_team.mcfunction]
|
||||
execute @s[tag=team1] ~ ~ ~ tag @e[rm=0,r=1,c=1,type=arrow,tag=] add team1
|
||||
execute @s[tag=team2] ~ ~ ~ tag @e[rm=0,r=1,c=1,type=arrow,tag=] add team2
|
||||
execute @s[tag=team3] ~ ~ ~ tag @e[rm=0,r=1,c=1,type=arrow,tag=] add team3
|
||||
execute @s[tag=team4] ~ ~ ~ tag @e[rm=0,r=1,c=1,type=arrow,tag=] add team4
|
||||
```
|
||||
:::
|
||||
|
||||
::: code-group
|
||||
|
||||
```mcfunction [BP/functions/wiki-apply_damage.mcfunction]
|
||||
execute @s[tag=team1] ~ ~ ~ tag @p[rm=0,r=1,tag=!team1] add damage
|
||||
execute @s[tag=team2] ~ ~ ~ tag @p[rm=0,r=1,tag=!team2] add damage
|
||||
execute @s[tag=team3] ~ ~ ~ tag @p[rm=0,r=1,tag=!team3] add damage
|
||||
execute @s[tag=team4] ~ ~ ~ tag @p[rm=0,r=1,tag=!team4] add damage
|
||||
```
|
||||
:::
|
||||
|
||||
> 注意:若修改`arrow.json`文件,请仔细考虑组件分组(component groups)的影响。
|
||||
Reference in New Issue
Block a user