diff --git a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java index 01d1343c1..a5c04ecea 100644 --- a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java +++ b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java @@ -29,6 +29,7 @@ public class KillMessageOverlay { private static final ResourceLocation EXPLOSION = new ResourceLocation(TargetMod.MODID, "textures/screens/damage_types/explosion.png"); private static final ResourceLocation CLAYMORE = new ResourceLocation(TargetMod.MODID, "textures/screens/damage_types/claymore.png"); private static final ResourceLocation GENERIC = new ResourceLocation(TargetMod.MODID, "textures/screens/damage_types/generic.png"); + private static final ResourceLocation BEAST = new ResourceLocation(TargetMod.MODID, "textures/screens/damage_types/beast.png"); private static final ResourceLocation WORLD_PEACE_STAFF = new ResourceLocation(TargetMod.MODID, "textures/gun_icon/compat/world_peace_staff.png"); @@ -187,9 +188,12 @@ public class KillMessageOverlay { icon = EXPLOSION; } else if (record.damageType == DamageTypes.PLAYER_ATTACK) { icon = KNIFE; + } else if (record.damageType == TargetModDamageTypes.BEAST) { + icon = BEAST; } else if (record.damageType == TargetModDamageTypes.MINE) { icon = CLAYMORE; } else { + icon = GENERIC; } } diff --git a/src/main/java/net/mcreator/target/entity/ProjectileEntity.java b/src/main/java/net/mcreator/target/entity/ProjectileEntity.java index f1a020aca..82d55d5f3 100644 --- a/src/main/java/net/mcreator/target/entity/ProjectileEntity.java +++ b/src/main/java/net/mcreator/target/entity/ProjectileEntity.java @@ -1,9 +1,14 @@ package net.mcreator.target.entity; +import net.mcreator.target.TargetMod; import net.mcreator.target.headshot.BoundingBoxManager; import net.mcreator.target.headshot.IHeadshotBox; -import net.mcreator.target.init.*; +import net.mcreator.target.init.TargetModDamageTypes; +import net.mcreator.target.init.TargetModEntities; +import net.mcreator.target.init.TargetModParticleTypes; +import net.mcreator.target.init.TargetModSounds; import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.network.message.PlayerGunKillMessage; import net.mcreator.target.tools.ExtendedEntityRayTraceResult; import net.mcreator.target.tools.ParticleTool; import net.minecraft.core.BlockPos; @@ -32,6 +37,7 @@ import net.minecraft.world.phys.*; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.entity.IEntityAdditionalSpawnData; import net.minecraftforge.entity.PartEntity; +import net.minecraftforge.network.PacketDistributor; import javax.annotation.Nullable; import java.util.ArrayList; @@ -306,6 +312,19 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa if (beast && entity instanceof LivingEntity living) { if (living.isDeadOrDying()) return; + + if (this.shooter instanceof ServerPlayer player) { + player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.hitIndicator = 25; + capability.syncPlayerVariables(living); + }); + var holder = Holder.direct(TargetModSounds.INDICATION.get()); + player.connection.send(new ClientboundSoundPacket(holder, SoundSource.PLAYERS, player.getX(), player.getY(), player.getZ(), 1f, 1f, player.level().random.nextLong())); + ((ServerLevel) this.level()).sendParticles(ParticleTypes.DAMAGE_INDICATOR, living.getX(), living.getY() + .5, living.getZ(), 1000, .4, .7, .4, 0); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(player.getId(), living.getId(), false, TargetModDamageTypes.BEAST)); + } + if (living instanceof ServerPlayer victim) { living.setHealth(0); living.level().players().forEach( @@ -323,16 +342,6 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa living.gameEvent(GameEvent.ENTITY_DIE); } - if (this.shooter instanceof ServerPlayer player) { - player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.hitIndicator = 25; - capability.syncPlayerVariables(living); - }); - var holder = Holder.direct(TargetModSounds.INDICATION.get()); - player.connection.send(new ClientboundSoundPacket(holder, SoundSource.PLAYERS, player.getX(), player.getY(), player.getZ(), 1f, 1f, player.level().random.nextLong())); - ((ServerLevel) this.level()).sendParticles(ParticleTypes.DAMAGE_INDICATOR, living.getX(), living.getY() + .5, living.getZ(), 1000, .4, .7, .4, 0); - } - return; } diff --git a/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java b/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java index 15a0d7b6d..0195ac7f7 100644 --- a/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java +++ b/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java @@ -21,6 +21,7 @@ public class TargetModDamageTypes { public static final ResourceKey ARROW_IN_KNEE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "arrow_in_knee")); public static final ResourceKey ARROW_IN_BRAIN = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "arrow_in_brain")); public static final ResourceKey MINE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "mine")); + public static final ResourceKey BEAST = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "beast")); public static DamageSource causeGunFireDamage(RegistryAccess registryAccess, @Nullable Entity entity) { diff --git a/src/main/resources/data/target/damage_type/beast.json b/src/main/resources/data/target/damage_type/beast.json new file mode 100644 index 000000000..685059bd2 --- /dev/null +++ b/src/main/resources/data/target/damage_type/beast.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0, + "message_id": "beast", + "scaling": "never" +} \ No newline at end of file