Просмотр исходного кода

加入了hot potato伤害判定系统

HerobrineXia 6 лет назад
Родитель
Сommit
efd99d37c2

+ 17 - 0
data/mini/advancements/damage_dealt.json

@@ -0,0 +1,17 @@
+{
+    "criteria": {
+        "hurt": {
+            "trigger": "minecraft:player_hurt_entity",
+            "conditions": {
+                "damage": {
+                    "taken": {
+                        "min": 0.1
+                    }
+                }
+            }
+        }
+    },
+    "rewards": {
+        "function": "mini:hotpm/damage_indicator/damage_dealt"
+    }
+}

+ 17 - 0
data/mini/advancements/damage_taken.json

@@ -0,0 +1,17 @@
+{
+    "criteria": {
+        "hurt": {
+            "trigger": "minecraft:entity_hurt_player",
+            "conditions": {
+                "damage": {
+                    "taken": {
+                        "min": 0.1
+                    }
+                }
+            }
+        }
+    },
+    "rewards": {
+        "function": "mini:hotpm/damage_indicator/damage_taken"
+    }
+}

+ 8 - 0
data/mini/functions/hotpm/damage_indicator/damage_dealt.mcfunction

@@ -0,0 +1,8 @@
+# 造成伤害加tag
+tag @s add damage_dealt
+
+# 播放攻击音效
+playsound minecraft:entity.arrow.hit_player ambient @s[scores={damage_system=1..}] ~ ~ ~ 1 1 1
+
+# 移除造成伤害advancement
+advancement revoke @s only mini:damage_dealt

+ 5 - 0
data/mini/functions/hotpm/damage_indicator/damage_taken.mcfunction

@@ -0,0 +1,5 @@
+# 受到伤害加tag
+tag @s add damage_taken
+
+# 移除受到伤害advancement
+advancement revoke @s only mini:damage_taken

+ 7 - 0
data/mini/functions/hotpm/damage_indicator/init.mcfunction

@@ -0,0 +1,7 @@
+# 计分板初始化
+scoreboard objectives remove damage_counter1
+scoreboard objectives remove damage_counter2
+scoreboard objectives remove damage_taken
+scoreboard objectives add damage_counter1 dummy "伤害计算(整数)"
+scoreboard objectives add damage_counter2 dummy "伤害计算(小数)"
+scoreboard objectives add damage_taken minecraft.custom:minecraft.damage_taken "受到伤害"

+ 21 - 0
data/mini/functions/hotpm/damage_indicator/player_hurt_player.mcfunction

@@ -0,0 +1,21 @@
+# 重置判定值
+scoreboard players set 除数 damage_counter1 10
+
+# 分数运算
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter1 = @s damage_taken
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter2 = @s damage_taken
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter1 /= 除数 damage_counter1
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter2 %= 除数 damage_counter1
+
+# 进行受伤提示
+tellraw @a[tag=damage_taken] [{"text":"[!] ","color":"red"},{"selector":"@a[tag=damage_dealt]","color":"white"},{"text":"对你造成了","color":"white"},{"color":"red","score":{"name":"@a[tag=damage_taken,scores={damage_taken=0..}]","objective":"damage_counter1"}},{"text":".","color":"red"},{"color":"red","score":{"name":"@a[tag=damage_taken,scores={damage_taken=0..}]","objective":"damage_counter2"}},{"text":"点伤害","color":"white"}]
+tellraw @a[tag=damage_dealt] [{"text":"[!] ","color":"red"},{"text":"你对","color":"white"},{"selector":"@a[tag=damage_taken]","color":"white"},{"text":"造成了","color":"white"},{"color":"red","score":{"name":"@a[tag=damage_taken,scores={damage_taken=0..}]","objective":"damage_counter1"}},{"text":".","color":"red"},{"color":"red","score":{"name":"@a[tag=damage_taken,scores={damage_taken=0..}]","objective":"damage_counter2"}},{"text":"点伤害","color":"white"}]
+
+# 重置分数
+scoreboard players set @a[tag=damage_taken] damage_counter1 0
+scoreboard players set @a[tag=damage_taken] damage_counter2 0
+scoreboard players reset @a[tag=damage_taken] damage_taken
+
+# 重置tag
+tag @a[tag=damage_taken] remove damage_taken
+tag @a[tag=damage_dealt] remove damage_dealt

+ 12 - 0
data/mini/functions/hotpm/damage_indicator/player_hurt_player2.mcfunction

@@ -0,0 +1,12 @@
+# 进行受伤提示
+tellraw @a[tag=damage_taken] [{"text":"[!] ","color":"red"},{"selector":"@a[tag=damage_dealt]","color":"white"},{"text":"对你造成了","color":"white"},{"text":"0.0","color":"red"},{"text":"点伤害","color":"white"}]
+tellraw @a[tag=damage_dealt] [{"text":"[!] ","color":"red"},{"text":"你对","color":"white"},{"selector":"@a[tag=damage_taken]"},{"text":"造成了","color":"white"},{"text":"0.0","color":"red"},{"text":"点伤害","color":"white"}]
+
+# 重置分数
+scoreboard players set @a[tag=damage_taken] damage_counter1 0
+scoreboard players set @a[tag=damage_taken] damage_counter2 0
+scoreboard players reset @a[tag=damage_taken] damage_taken
+
+# 重置tag
+tag @a[tag=damage_taken] remove damage_taken
+tag @a[tag=damage_dealt] remove damage_dealt

+ 20 - 0
data/mini/functions/hotpm/damage_indicator/player_hurt_self.mcfunction

@@ -0,0 +1,20 @@
+# 重置判定值
+scoreboard players set 除数 damage_counter1 10
+
+# 分数运算
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter1 = @s damage_taken
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter2 = @s damage_taken
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter1 /= 除数 damage_counter1
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter2 %= 除数 damage_counter1
+
+# 进行受伤提示
+tellraw @a[tag=damage_taken,tag=damage_dealt,scores={damage_taken=0..,damage_system=1..}] [{"text":"[!] ","color":"red"},{"text":"你对自己造成了","color":"white"},{"color":"red","score":{"name":"@a[tag=damage_taken,scores={damage_taken=0..}]","objective":"damage_counter1"}},{"text":".","color":"red"},{"color":"red","score":{"name":"@a[tag=damage_taken,scores={damage_taken=0..}]","objective":"damage_counter2"}},{"text":"点伤害","color":"white"}]
+
+# 重置分数
+scoreboard players set @a[tag=damage_taken] damage_counter1 0
+scoreboard players set @a[tag=damage_taken] damage_counter2 0
+scoreboard players reset @a[tag=damage_taken] damage_taken
+
+# 重置tag
+tag @a[tag=damage_taken] remove damage_taken
+tag @a[tag=damage_dealt] remove damage_dealt

+ 11 - 0
data/mini/functions/hotpm/damage_indicator/player_hurt_self2.mcfunction

@@ -0,0 +1,11 @@
+# 进行受伤提示
+tellraw @a[tag=damage_taken,tag=damage_dealt] [{"text":"[!] ","color":"red"},{"text":"你对自己造成了","color":"white"},{"text":"0.0","color":"red"},{"text":"点伤害","color":"white"}]
+
+# 重置分数
+scoreboard players set @a[tag=damage_taken] damage_counter1 0
+scoreboard players set @a[tag=damage_taken] damage_counter2 0
+scoreboard players reset @a[tag=damage_taken] damage_taken
+
+# 重置tag
+tag @a[tag=damage_taken] remove damage_taken
+tag @a[tag=damage_dealt] remove damage_dealt

+ 20 - 0
data/mini/functions/hotpm/damage_indicator/self_hurt.mcfunction

@@ -0,0 +1,20 @@
+# 重置判定值
+scoreboard players set 除数 damage_counter1 10
+
+# 分数运算
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter1 = @s damage_taken
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter2 = @s damage_taken
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter1 /= 除数 damage_counter1
+execute as @a[scores={damage_taken=0..},tag=damage_taken] run scoreboard players operation @s damage_counter2 %= 除数 damage_counter1
+
+# 进行伤害提示
+tellraw @a[tag=damage_taken,scores={damage_taken=0..,damage_system=1..}] [{"text":"[!] ","color":"red"},{"text":"你受到了","color":"white"},{"color":"red","score":{"name":"@a[tag=damage_taken,scores={damage_taken=0..}]","objective":"damage_counter1"}},{"text":".","color":"red"},{"color":"red","score":{"name":"@a[tag=damage_taken,scores={damage_taken=0..}]","objective":"damage_counter2"}},{"text":"点伤害","color":"white"}]
+
+# 重置分数
+scoreboard players set @a[tag=damage_taken] damage_counter1 0
+scoreboard players set @a[tag=damage_taken] damage_counter2 0
+scoreboard players reset @a[tag=damage_taken] damage_taken
+
+# 重置tag
+tag @a[tag=damage_taken] remove damage_taken
+tag @a[tag=damage_dealt] remove damage_dealt

+ 11 - 0
data/mini/functions/hotpm/damage_indicator/self_hurt2.mcfunction

@@ -0,0 +1,11 @@
+# 进行伤害提示
+tellraw @a[tag=damage_taken] [{"text":"[!] ","color":"red"},{"text":"你受到了","color":"white"},{"text":"0.0","color":"red"},{"text":"点伤害","color":"white"}]
+
+# 重置分数
+scoreboard players set @a[tag=damage_taken] damage_counter1 0
+scoreboard players set @a[tag=damage_taken] damage_counter2 0
+scoreboard players reset @a[tag=damage_taken] damage_taken
+
+# 重置tag
+tag @a[tag=damage_taken] remove damage_taken
+tag @a[tag=damage_dealt] remove damage_dealt

+ 26 - 0
data/mini/functions/hotpm/damage_indicator/tick1.mcfunction

@@ -0,0 +1,26 @@
+# 检测玩家对玩家造成0点以上伤害
+execute if entity @a[tag=damage_dealt] if entity @a[tag=damage_taken,scores={damage_taken=0..}] unless entity @a[tag=damage_dealt,tag=damage_taken] run function damage_identifier:player_hurt_player
+
+# 检测玩家对玩家造成0点伤害
+execute if entity @a[tag=damage_dealt] if entity @a[tag=damage_taken] unless entity @a[scores={damage_taken=0..}] unless entity @a[tag=damage_dealt,tag=damage_taken] run function damage_identifier:player_hurt_player2
+
+# 检测玩家对自己造成0点以上伤害
+execute if entity @a[tag=damage_dealt,tag=damage_taken,scores={damage_taken=0..}] run function damage_identifier:player_hurt_self
+
+# 检测玩家对自己造成0点伤害
+execute if entity @a[tag=damage_dealt,tag=damage_taken] unless entity @a[tag=damage_dealt,tag=damage_taken,scores={damage_taken=0..}] run function damage_identifier:player_hurt_self2
+
+# 检测玩家因特殊原因受到0点以上伤害
+execute if entity @a[tag=damage_taken,scores={damage_taken=0..}] unless entity @a[tag=damage_dealt] run function damage_identifier:self_hurt
+
+# 检测玩家因特殊原因受到0点伤害
+execute if entity @a[tag=damage_taken] unless entity @a[tag=damage_dealt] unless entity @a[tag=damage_taken,scores={damamge_taken=0..}] run function damage_identifier:self_hurt2
+
+# 重置tag
+tag @a[tag=damage_taken] remove damage_taken
+tag @a[tag=damage_dealt] remove damage_dealt
+
+# 重置分数
+scoreboard players set @a[scores={damage_taken=0..}] damage_counter1 0
+scoreboard players set @a[scores={damage_taken=0..}] damage_counter2 0
+scoreboard players reset @a[scores={damage_taken=0..}] damage_taken