From 63dda01876ea1ffd240f8b09c1b7e40484c2dd13 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Wed, 4 Dec 2024 03:27:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=BF=80=E5=85=89=E7=9A=84?= =?UTF-8?q?=E7=88=86=E5=A4=B4=E5=88=A4=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/screens/KillMessageOverlay.java | 2 +- .../event/ClientEventHandler.java | 2 +- .../superbwarfare/init/ModDamageTypes.java | 5 ++++ .../superbwarfare/item/BeamTest.java | 2 +- .../mixins/LivingEntityMixin.java | 2 +- .../network/message/LaserShootMessage.java | 25 +++++++++++------- .../superbwarfare/tools/DamageTypeTool.java | 11 +++++--- .../superbwarfare/tools/TraceTool.java | 14 +++++++--- .../assets/superbwarfare/lang/en_us.json | 3 +++ .../assets/superbwarfare/lang/zh_cn.json | 3 +++ .../damage_types/175009bmw9wyyk1k99tk9m.png | Bin 8883 -> 0 bytes .../textures/screens/damage_types/laser.png | Bin 219 -> 8883 bytes .../always_hurts_ender_dragons.json | 1 + .../tags/damage_type/bypasses_armor.json | 1 + .../tags/damage_type/bypasses_effects.json | 1 + .../damage_type/bypasses_enchantments.json | 1 + .../tags/damage_type/bypasses_resistance.json | 1 + .../tags/damage_type/no_knockback.json | 1 + .../damage_type/laser_headshot.json | 5 ++++ .../data/superbwarfare/guns/javelin.json | 4 +-- .../data/superbwarfare/guns/rpg.json | 4 +-- 21 files changed, 64 insertions(+), 24 deletions(-) delete mode 100644 src/main/resources/assets/superbwarfare/textures/screens/damage_types/175009bmw9wyyk1k99tk9m.png create mode 100644 src/main/resources/data/superbwarfare/damage_type/laser_headshot.json diff --git a/src/main/java/com/atsuishio/superbwarfare/client/screens/KillMessageOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/screens/KillMessageOverlay.java index 7b427596d..c0ead8e1c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/screens/KillMessageOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/screens/KillMessageOverlay.java @@ -276,7 +276,7 @@ public class KillMessageOverlay { icon = BURN; } else if (record.damageType == ModDamageTypes.DRONE_HIT) { icon = DRONE; - } else if (record.damageType == ModDamageTypes.LASER) { + } else if (record.damageType == ModDamageTypes.LASER || record.damageType == ModDamageTypes.LASER_HEADSHOT) { icon = LASER; } else { icon = GENERIC; diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index a1d7ab0e8..f0855870a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -368,7 +368,7 @@ public class ClientEventHandler { && (!player.isAlliedTo(lookingEntity) || lookingEntity.getTeam() == null || lookingEntity.getTeam().getName().equals("TDM")); if (canAttack) { - ModUtils.PACKET_HANDLER.sendToServer(new LaserShootMessage(1, lookingEntity.getUUID())); + ModUtils.PACKET_HANDLER.sendToServer(new LaserShootMessage(1, lookingEntity.getUUID(), TraceTool.laserHeadshot)); } } } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java b/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java index b0fc3fdfd..6c653e65c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModDamageTypes.java @@ -29,6 +29,7 @@ public class ModDamageTypes { public static final ResourceKey CUSTOM_EXPLOSION = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "custom_explosion")); public static final ResourceKey DRONE_HIT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "drone_hit")); public static final ResourceKey LASER = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "laser")); + public static final ResourceKey LASER_HEADSHOT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "laser_headshot")); public static DamageSource causeGunFireDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(GUN_FIRE), directEntity, attacker); @@ -78,6 +79,10 @@ public class ModDamageTypes { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(LASER), directEntity, attacker); } + public static DamageSource causeLaserHeadshotDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { + return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(LASER_HEADSHOT), directEntity, attacker); + } + private static class DamageMessages extends DamageSource { public DamageMessages(Holder.Reference typeReference) { super(typeReference); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java b/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java index 75bb9e4c3..4cb761f53 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java @@ -118,7 +118,7 @@ public class BeamTest extends Item { && (!player.isAlliedTo(lookingEntity) || lookingEntity.getTeam() == null || lookingEntity.getTeam().getName().equals("TDM")); if (canAttack) { - ModUtils.PACKET_HANDLER.sendToServer(new LaserShootMessage(45, lookingEntity.getUUID())); + ModUtils.PACKET_HANDLER.sendToServer(new LaserShootMessage(45 , lookingEntity.getUUID(), TraceTool.laserHeadshot)); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/LivingEntityMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/LivingEntityMixin.java index 7f83fa753..845e27a4b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/LivingEntityMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/LivingEntityMixin.java @@ -28,7 +28,7 @@ public class LivingEntityMixin { || this.target$source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE) || this.target$source.is(ModDamageTypes.BURN)) { return 0.05 * original; } - if (this.target$source.is(ModDamageTypes.LASER)) { + if (this.target$source.is(ModDamageTypes.LASER) || this.target$source.is(ModDamageTypes.LASER_HEADSHOT)) { return -original; } return original; diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/LaserShootMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/LaserShootMessage.java index 80163bd17..7d859df1c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/LaserShootMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/LaserShootMessage.java @@ -8,7 +8,6 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.PacketDistributor; @@ -18,34 +17,36 @@ import java.util.function.Supplier; public class LaserShootMessage { private final double damage; - private final UUID uuid; + private final boolean headshot; - public LaserShootMessage(double damage, UUID uuid) { + public LaserShootMessage(double damage, UUID uuid, boolean headshot) { this.damage = damage; this.uuid = uuid; + this.headshot = headshot; } public static LaserShootMessage decode(FriendlyByteBuf buffer) { - return new LaserShootMessage(buffer.readDouble(), buffer.readUUID()); + return new LaserShootMessage(buffer.readDouble(), buffer.readUUID(), buffer.readBoolean()); } public static void encode(LaserShootMessage message, FriendlyByteBuf buffer) { buffer.writeDouble(message.damage); buffer.writeUUID(message.uuid); + buffer.writeBoolean(message.headshot); } public static void handler(LaserShootMessage message, Supplier contextSupplier) { NetworkEvent.Context context = contextSupplier.get(); context.enqueueWork(() -> { if (context.getSender() != null) { - pressAction(context.getSender(), message.damage, message.uuid); + pressAction(context.getSender(), message.damage, message.uuid, message.headshot); } }); context.setPacketHandled(true); } - public static void pressAction(Player player, double damage, UUID uuid) { + public static void pressAction(ServerPlayer player, double damage, UUID uuid, boolean headshot) { Level level = player.level(); if (!level.isLoaded(player.blockPosition())) { @@ -55,12 +56,16 @@ public class LaserShootMessage { Entity entity = EntityFindUtil.findEntity(level, String.valueOf(uuid)); if (entity != null) { - entity.hurt(ModDamageTypes.causeLaserDamage(level.registryAccess(), player, player), (float) damage); - entity.invulnerableTime = 0; - if (player instanceof ServerPlayer serverPlayer) { + if (headshot) { + entity.hurt(ModDamageTypes.causeLaserHeadshotDamage(level.registryAccess(), player, player), (float) (2 * damage)); + player.level().playSound(null, player.blockPosition(), ModSounds.HEADSHOT.get(), SoundSource.VOICE, 0.1f, 1); + ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(1, 5)); + } else { + entity.hurt(ModDamageTypes.causeLaserDamage(level.registryAccess(), player, player), (float) damage); player.level().playSound(null, player.blockPosition(), ModSounds.INDICATION.get(), SoundSource.VOICE, 0.1f, 1); - ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ClientIndicatorMessage(0, 5)); + ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); } + entity.invulnerableTime = 0; } } } diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/DamageTypeTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/DamageTypeTool.java index 0c8e41f9a..a99535d2f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/DamageTypeTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/DamageTypeTool.java @@ -10,7 +10,8 @@ public class DamageTypeTool { public static boolean isGunDamage(DamageSource source) { return source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE) - || source.is(ModDamageTypes.SHOCK)|| source.is(ModDamageTypes.BURN); + || source.is(ModDamageTypes.SHOCK) || source.is(ModDamageTypes.BURN) + || source.is(ModDamageTypes.LASER) || source.is(ModDamageTypes.LASER_HEADSHOT); } public static boolean isGunDamage(ResourceKey damageType) { @@ -23,14 +24,18 @@ public class DamageTypeTool { } public static boolean isGunFireDamage(DamageSource source) { - return source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE); + return source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE) + || source.is(ModDamageTypes.SHOCK) || source.is(ModDamageTypes.BURN) + || source.is(ModDamageTypes.LASER) || source.is(ModDamageTypes.LASER_HEADSHOT); } public static boolean isModDamage(DamageSource source) { return source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE) || source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || source.is(ModDamageTypes.MINE) || source.is(ModDamageTypes.SHOCK) - || source.is(ModDamageTypes.PROJECTILE_BOOM) || source.is(ModDamageTypes.CANNON_FIRE); + || source.is(ModDamageTypes.PROJECTILE_BOOM) || source.is(ModDamageTypes.CANNON_FIRE) + || source.is(ModDamageTypes.BURN) + || source.is(ModDamageTypes.LASER) || source.is(ModDamageTypes.LASER_HEADSHOT); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java index ac81ea61a..1b817022f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/TraceTool.java @@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.tools; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.projectile.ProjectileUtil; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.block.state.BlockState; @@ -10,6 +11,8 @@ import net.minecraft.world.phys.*; public class TraceTool { + public static boolean laserHeadshot = false; + public static Entity findLookingEntity(Entity player, double entityReach) { double distance = entityReach * entityReach; Vec3 eyePos = player.getEyePosition(1.0f); @@ -74,12 +77,17 @@ public class TraceTool { } else if (distanceToTarget < distance) { hitResult = entityhitresult; } - } - if (hitResult.getType() == HitResult.Type.ENTITY) { - if (((EntityHitResult) hitResult).getEntity().isAlive()) { + Vec3 hitVec = entityhitresult.getLocation(); + if (hitResult.getType() == HitResult.Type.ENTITY && ((EntityHitResult) hitResult).getEntity().isAlive()) { + if (((EntityHitResult) hitResult).getEntity() instanceof LivingEntity living) { + laserHeadshot = living.getEyeY() - 0.4 < hitVec.y && hitVec.y < living.getEyeY() + 0.5; + } else { + laserHeadshot = false; + } return ((EntityHitResult) hitResult).getEntity(); } } + return null; } diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 66d378475..ce6bb01d1 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -329,6 +329,9 @@ "death.attack.laser": "%1$s被激光射穿了", "death.attack.laser.entity": "%1$s被%2$s用激光射穿了", "death.attack.laser.item": "%1$s被%2$s用%3$s激光射穿了", + "death.attack.laser_headshot": "%1$s的脑子被激光洞穿了", + "death.attack.laser_headshot.entity": "%1$s被%2$s用激光射穿了脑袋", + "death.attack.laser_headshot.item": "%1$s的脑子被%2$s用%3$s发射的激光洞穿了", "gui.superbwarfare.mortar_gui.button_set": "Confirm", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 82331b094..ae734ab02 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -329,6 +329,9 @@ "death.attack.laser": "%1$s被激光射穿了", "death.attack.laser.entity": "%1$s被%2$s用激光射穿了", "death.attack.laser.item": "%1$s被%2$s用%3$s激光射穿了", + "death.attack.laser_headshot": "%1$s的脑子被激光洞穿了", + "death.attack.laser_headshot.entity": "%1$s被%2$s用激光射穿了脑袋", + "death.attack.laser_headshot.item": "%1$s的脑子被%2$s用%3$s发射的激光洞穿了", "gui.superbwarfare.mortar_gui.button_set": "确认", diff --git a/src/main/resources/assets/superbwarfare/textures/screens/damage_types/175009bmw9wyyk1k99tk9m.png b/src/main/resources/assets/superbwarfare/textures/screens/damage_types/175009bmw9wyyk1k99tk9m.png deleted file mode 100644 index e35ce7ea4a410e6f16d3cd6007c3b12e27922820..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8883 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 P!x%hW{an^LB{Ts5I89OZ diff --git a/src/main/resources/data/minecraft/tags/damage_type/always_hurts_ender_dragons.json b/src/main/resources/data/minecraft/tags/damage_type/always_hurts_ender_dragons.json index c2900aaa3..7d451fda9 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/always_hurts_ender_dragons.json +++ b/src/main/resources/data/minecraft/tags/damage_type/always_hurts_ender_dragons.json @@ -5,5 +5,6 @@ "superbwarfare:custom_explosion", "superbwarfare:cannon_fire", "superbwarfare:laser" + "superbwarfare:laser_headshot" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json index b48123bc5..5f9f89b25 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json @@ -6,5 +6,6 @@ "superbwarfare:shock", "superbwarfare:cannon_fire", "superbwarfare:laser" + "superbwarfare:laser_headshot" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json index b48123bc5..5f9f89b25 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json @@ -6,5 +6,6 @@ "superbwarfare:shock", "superbwarfare:cannon_fire", "superbwarfare:laser" + "superbwarfare:laser_headshot" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json index b48123bc5..5f9f89b25 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json @@ -6,5 +6,6 @@ "superbwarfare:shock", "superbwarfare:cannon_fire", "superbwarfare:laser" + "superbwarfare:laser_headshot" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json index b48123bc5..5f9f89b25 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json @@ -6,5 +6,6 @@ "superbwarfare:shock", "superbwarfare:cannon_fire", "superbwarfare:laser" + "superbwarfare:laser_headshot" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json b/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json index 2ea504609..2eab58b25 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json +++ b/src/main/resources/data/minecraft/tags/damage_type/no_knockback.json @@ -4,5 +4,6 @@ "superbwarfare:projectile_boom", "superbwarfare:custom_explosion", "superbwarfare:laser" + "superbwarfare:laser_headshot" ] } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/damage_type/laser_headshot.json b/src/main/resources/data/superbwarfare/damage_type/laser_headshot.json new file mode 100644 index 000000000..e833c0419 --- /dev/null +++ b/src/main/resources/data/superbwarfare/damage_type/laser_headshot.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0, + "message_id": "laser_headshot", + "scaling": "never" +} \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/javelin.json b/src/main/resources/data/superbwarfare/guns/javelin.json index 3b453fbc1..cbe9f8662 100644 --- a/src/main/resources/data/superbwarfare/guns/javelin.json +++ b/src/main/resources/data/superbwarfare/guns/javelin.json @@ -5,7 +5,7 @@ "mag": 1, "weight": 10, "EmptyReloadTime": 78, - "damage": 500, - "ExplosionDamage": 140, + "damage": 300, + "ExplosionDamage": 100, "ExplosionRadius": 6 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/rpg.json b/src/main/resources/data/superbwarfare/guns/rpg.json index 9c6e75957..216c97499 100644 --- a/src/main/resources/data/superbwarfare/guns/rpg.json +++ b/src/main/resources/data/superbwarfare/guns/rpg.json @@ -2,8 +2,8 @@ "spread": 5, "recoil_x": 0.008, "recoil_y": 0.018, - "damage": 400, - "ExplosionDamage": 200, + "damage": 200, + "ExplosionDamage": 150, "ExplosionRadius": 10, "velocity": 4, "mag": 1,