From 129460f8a899f6a9f3e16d70ed80cbc705c0e493 Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Sun, 12 May 2024 21:48:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E8=81=94ClaymoreDamage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/LivingEntityEventHandler.java | 12 ++++++ .../procedures/ClaymoreDamageProcedure.java | 40 ------------------- 2 files changed, 12 insertions(+), 40 deletions(-) delete mode 100644 src/main/java/net/mcreator/target/procedures/ClaymoreDamageProcedure.java diff --git a/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java b/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java index f95c38843..8094fed22 100644 --- a/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java +++ b/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java @@ -36,6 +36,7 @@ public class LivingEntityEventHandler { if (event == null || event.getEntity() == null) return; arrowDamageImmuneForMine(event, event.getSource(), event.getSource().getEntity()); arrowDamage(event, event.getEntity().level(), event.getSource(), event.getEntity(), event.getSource().getDirectEntity(), event.getSource().getEntity(), event.getAmount()); + claymoreDamage(event, event.getEntity().level(), event.getSource(), event.getEntity(), event.getSource().getEntity(), event.getAmount()); } @SubscribeEvent @@ -51,6 +52,17 @@ public class LivingEntityEventHandler { } } + private static void claymoreDamage(LivingAttackEvent event, LevelAccessor world, DamageSource damagesource, Entity entity, Entity sourceentity, double amount) { + if (damagesource == null || entity == null || sourceentity == null) + return; + if ((damagesource.is(DamageTypes.EXPLOSION) || damagesource.is(DamageTypes.PLAYER_EXPLOSION)) && entity.getPersistentData().getDouble("claymore") > 0) { + if (event != null && event.isCancelable()) { + event.setCanceled(true); + } + entity.hurt(new DamageSource(world.registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("target:mine"))), sourceentity), (float) amount); + } + } + // TODO 把伤害逻辑移植到箭类中 private static void arrowDamage(LivingAttackEvent event, LevelAccessor world, DamageSource damagesource, Entity entity, Entity immediatesourceentity, Entity sourceentity, double amount) { if (damagesource == null || entity == null || immediatesourceentity == null || sourceentity == null) return; diff --git a/src/main/java/net/mcreator/target/procedures/ClaymoreDamageProcedure.java b/src/main/java/net/mcreator/target/procedures/ClaymoreDamageProcedure.java deleted file mode 100644 index 0f13ff982..000000000 --- a/src/main/java/net/mcreator/target/procedures/ClaymoreDamageProcedure.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.mcreator.target.procedures; - -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.damagesource.DamageTypes; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.LevelAccessor; -import net.minecraftforge.event.entity.living.LivingAttackEvent; -import net.minecraftforge.eventbus.api.Event; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -import javax.annotation.Nullable; - -@Mod.EventBusSubscriber -public class ClaymoreDamageProcedure { - @SubscribeEvent - public static void onEntityAttacked(LivingAttackEvent event) { - if (event != null && event.getEntity() != null) { - execute(event, event.getEntity().level(), event.getSource(), event.getEntity(), event.getSource().getEntity(), event.getAmount()); - } - } - - public static void execute(LevelAccessor world, DamageSource damagesource, Entity entity, Entity sourceentity, double amount) { - execute(null, world, damagesource, entity, sourceentity, amount); - } - - private static void execute(@Nullable Event event, LevelAccessor world, DamageSource damagesource, Entity entity, Entity sourceentity, double amount) { - if (damagesource == null || entity == null || sourceentity == null) - return; - if ((damagesource.is(DamageTypes.EXPLOSION) || damagesource.is(DamageTypes.PLAYER_EXPLOSION)) && entity.getPersistentData().getDouble("claymore") > 0) { - if (event != null && event.isCancelable()) { - event.setCanceled(true); - } - entity.hurt(new DamageSource(world.registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("target:mine"))), sourceentity), (float) amount); - } - } -}