From 08fbb285f7e026b6f56f1a7c716017142971c18d Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Sun, 9 Jun 2024 01:53:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=B0=E7=91=9F=E6=9C=A8?= =?UTF-8?q?=E4=BB=93=E7=94=B5=E5=87=BB=E7=9A=84=E6=8C=81=E7=BB=AD=E4=BC=A4?= =?UTF-8?q?=E5=AE=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/TaserBulletProjectileEntity.java | 61 ++++++++++++++++++- .../target/init/TargetModDamageTypes.java | 4 +- .../target/mixins/LivingEntityMixin.java | 3 +- 3 files changed, 62 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java b/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java index c1ed75250..13a467781 100644 --- a/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java +++ b/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java @@ -104,7 +104,7 @@ public class TaserBulletProjectileEntity extends ThrowableItemProjectile { } if (entity instanceof LivingEntity living) { - if (living instanceof Player player && player.isCreative()){ + if (living instanceof Player player && player.isCreative()) { return; } if (!living.level().isClientSide()) { @@ -113,11 +113,66 @@ public class TaserBulletProjectileEntity extends ThrowableItemProjectile { } if (headshot) { - entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this, this.getOwner()), this.damage * 1.5f); + entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this.getOwner()), this.damage * 1.5f); } else { - entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this, this.getOwner()), this.damage); + entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this.getOwner()), this.damage); } + TargetMod.queueServerWork(20, () -> { + if (entity == null || this.getOwner() == null || !entity.isAlive()) + return; + if (!entity.level().isClientSide()) + entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this.getOwner()), 1); + entity.invulnerableTime = 0; + if (this.getOwner() instanceof ServerPlayer player) { + this.getOwner().level().playSound(null, this.getOwner().blockPosition(), TargetModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); + } + }); + TargetMod.queueServerWork(40, () -> { + if (entity == null || this.getOwner() == null || !entity.isAlive()) + return; + if (!entity.level().isClientSide()) + entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this.getOwner()), 1); + entity.invulnerableTime = 0; + if (this.getOwner() instanceof ServerPlayer player) { + this.getOwner().level().playSound(null, this.getOwner().blockPosition(), TargetModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); + } + }); + TargetMod.queueServerWork(60, () -> { + if (entity == null || this.getOwner() == null || !entity.isAlive()) + return; + if (!entity.level().isClientSide()) + entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this.getOwner()), 1); + entity.invulnerableTime = 0; + if (this.getOwner() instanceof ServerPlayer player) { + this.getOwner().level().playSound(null, this.getOwner().blockPosition(), TargetModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); + } + }); + TargetMod.queueServerWork(80, () -> { + if (entity == null || this.getOwner() == null || !entity.isAlive()) + return; + if (!entity.level().isClientSide()) + entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this.getOwner()), 1); + entity.invulnerableTime = 0; + if (this.getOwner() instanceof ServerPlayer player) { + this.getOwner().level().playSound(null, this.getOwner().blockPosition(), TargetModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); + } + }); + TargetMod.queueServerWork(100, () -> { + if (entity == null || this.getOwner() == null || !entity.isAlive()) + return; + if (!entity.level().isClientSide()) + entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this.getOwner()), 1); + entity.invulnerableTime = 0; + if (this.getOwner() instanceof ServerPlayer player) { + this.getOwner().level().playSound(null, this.getOwner().blockPosition(), TargetModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); + } + }); this.discard(); } diff --git a/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java b/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java index b48a1adc8..92782e85c 100644 --- a/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java +++ b/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java @@ -44,8 +44,8 @@ public class TargetModDamageTypes { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(MINE), entity); } - public static DamageSource causeShockDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { - return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(SHOCK), directEntity, attacker); + public static DamageSource causeShockDamage(RegistryAccess registryAccess, @Nullable Entity attacker) { + return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(SHOCK), attacker); } private static class DamageMessages extends DamageSource { diff --git a/src/main/java/net/mcreator/target/mixins/LivingEntityMixin.java b/src/main/java/net/mcreator/target/mixins/LivingEntityMixin.java index 33760ad90..eef3b0d24 100644 --- a/src/main/java/net/mcreator/target/mixins/LivingEntityMixin.java +++ b/src/main/java/net/mcreator/target/mixins/LivingEntityMixin.java @@ -23,7 +23,8 @@ public class LivingEntityMixin { @ModifyArg(method = "hurt", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(DDD)V"), index = 0) private double modifyApplyKnockbackArgs(double original) { if (this.target$source.is(TargetModDamageTypes.GUN_FIRE) || this.target$source.is(TargetModDamageTypes.GUN_FIRE_HEADSHOT) - || this.target$source.is(TargetModDamageTypes.ARROW_IN_KNEE) || this.target$source.is(TargetModDamageTypes.ARROW_IN_BRAIN)) { + || this.target$source.is(TargetModDamageTypes.ARROW_IN_KNEE) || this.target$source.is(TargetModDamageTypes.ARROW_IN_BRAIN) + || this.target$source.is(TargetModDamageTypes.SHOCK)) { return 0.1 * original; } return original;