禁用团队伤害
本页面镜像自 BedrockWiki
根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。
若需禁用团队伤害(使玩家无法攻击队友),请为每位玩家分配带有队伍名称的标签(本教程将使用team1
、team2
、team3
和team4
作为示例)。 警告:该方法在领域服(Realms)中不可用,原因是领域服存在一个漏洞会导致行为包中修改后的player.json文件失效,游戏会直接忽略这些修改(该问题可能在后续版本中修复,但在1.20.15版本中尚未解决。此问题也影响更早的Minecraft版本)。
现在将以下伤害感应器组件添加至你的player.json
文件的"components": {}
部分。查看注释以获取详细说明。
json
"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)
json
//"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"
]
}
}
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"
]
}
}
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
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)的影响。