From a7a1ca56d875ccbdf8280c7f1a00b32b8adeabe7 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Tue, 11 Mar 2025 04:08:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E5=AE=9E=E7=8E=B0micro=20mis?= =?UTF-8?q?sile=20perk=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tooltip/ClientLauncherImageTooltip.java | 5 ++++ .../ClientSecondaryCataclysmImageTooltip.java | 5 ++++ .../entity/projectile/GunGrenadeEntity.java | 16 ++++++++++ .../entity/projectile/RpgRocketEntity.java | 29 ++++++++++++++----- .../superbwarfare/init/ModPerks.java | 3 +- .../item/gun/launcher/JavelinItem.java | 1 - .../item/gun/launcher/M79Item.java | 10 ++++++- .../item/gun/launcher/RpgItem.java | 23 ++++++++++----- .../item/gun/launcher/SecondaryCataclysm.java | 10 ++++++- 9 files changed, 82 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientLauncherImageTooltip.java b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientLauncherImageTooltip.java index db9f6a2e7..a7af27c1f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientLauncherImageTooltip.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientLauncherImageTooltip.java @@ -2,6 +2,8 @@ package com.atsuishio.superbwarfare.client.tooltip; import com.atsuishio.superbwarfare.client.TooltipTool; import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent; +import com.atsuishio.superbwarfare.init.ModPerks; +import com.atsuishio.superbwarfare.perk.PerkHelper; import com.atsuishio.superbwarfare.tools.FormatTool; import com.atsuishio.superbwarfare.tools.GunsTool; import net.minecraft.ChatFormatting; @@ -16,6 +18,9 @@ public class ClientLauncherImageTooltip extends ClientGunImageTooltip { @Override protected Component getDamageComponent() { double damage = GunsTool.getGunDoubleTag(stack, "Damage", 0) * TooltipTool.perkDamage(stack); + int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), stack); + if (perkLevel > 0) damage *= 1.1f + perkLevel * 0.1f; + double explosionDamage = GunsTool.getGunDoubleTag(stack, "ExplosionDamage", 0); return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientSecondaryCataclysmImageTooltip.java b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientSecondaryCataclysmImageTooltip.java index 8aa7e37c7..cdc0e09fb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientSecondaryCataclysmImageTooltip.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/tooltip/ClientSecondaryCataclysmImageTooltip.java @@ -2,6 +2,8 @@ package com.atsuishio.superbwarfare.client.tooltip; import com.atsuishio.superbwarfare.client.TooltipTool; import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent; +import com.atsuishio.superbwarfare.init.ModPerks; +import com.atsuishio.superbwarfare.perk.PerkHelper; import com.atsuishio.superbwarfare.tools.FormatTool; import com.atsuishio.superbwarfare.tools.GunsTool; import net.minecraft.ChatFormatting; @@ -16,6 +18,9 @@ public class ClientSecondaryCataclysmImageTooltip extends ClientEnergyImageToolt @Override protected Component getDamageComponent() { double damage = GunsTool.getGunDoubleTag(stack, "Damage", 0) * TooltipTool.perkDamage(stack); + int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), stack); + if (perkLevel > 0) damage *= 1.1f + perkLevel * 0.1f; + double explosionDamage = GunsTool.getGunDoubleTag(stack, "ExplosionDamage", 0); return Component.translatable("des.superbwarfare.guns.damage").withStyle(ChatFormatting.GRAY) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java index 9419c6a1f..e2e2c755a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java @@ -59,6 +59,22 @@ public class GunGrenadeEntity extends ThrowableItemProjectile implements GeoEnti this(ModEntities.GUN_GRENADE.get(), level); } + public void setDamage(float damage) { + this.damage = damage; + } + + public void setExplosionDamage(float explosionDamage) { + this.explosionDamage = explosionDamage; + } + + public void setExplosionRadius(float explosionRadius) { + this.explosionRadius = explosionRadius; + } + + public void setCharged(boolean charged) { + this.charged = charged; + } + public void setMonsterMultiplier(float monsterMultiplier) { this.monsterMultiplier = monsterMultiplier; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java index 6c3451d13..e8d6618d1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/RpgRocketEntity.java @@ -42,6 +42,7 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntity { + public static final EntityDataAccessor ANIMATION = SynchedEntityData.defineId(RpgRocketEntity.class, EntityDataSerializers.STRING); private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); @@ -49,25 +50,37 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit private float monsterMultiplier = 0.0f; private float damage = 250f; - private float explosion_damage = 200f; - private float explosion_radius = 10f; + private float explosionDamage = 200f; + private float explosionRadius = 10f; public RpgRocketEntity(EntityType type, Level world) { super(type, world); this.noCulling = true; } - public RpgRocketEntity(LivingEntity entity, Level level, float damage, float explosion_damage, float explosion_radius) { + public RpgRocketEntity(LivingEntity entity, Level level, float damage, float explosionDamage, float explosionRadius) { super(ModEntities.RPG_ROCKET.get(), entity, level); this.damage = damage; - this.explosion_damage = explosion_damage; - this.explosion_radius = explosion_radius; + this.explosionDamage = explosionDamage; + this.explosionRadius = explosionRadius; } public RpgRocketEntity(PlayMessages.SpawnEntity spawnEntity, Level level) { this(ModEntities.RPG_ROCKET.get(), level); } + public void setDamage(float damage) { + this.damage = damage; + } + + public void setExplosionDamage(float explosionDamage) { + this.explosionDamage = explosionDamage; + } + + public void setExplosionRadius(float explosionRadius) { + this.explosionRadius = explosionRadius; + } + public void setMonsterMultiplier(float monsterMultiplier) { this.monsterMultiplier = monsterMultiplier; } @@ -112,7 +125,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit if (this.tickCount > 1) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, this.explosion_damage, this.explosion_radius, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, this.explosionDamage, this.explosionRadius, this.monsterMultiplier); } } @@ -131,7 +144,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit if (this.tickCount > 1) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, this.explosion_damage, this.explosion_radius, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, this.explosionDamage, this.explosionRadius, this.monsterMultiplier); } } @@ -158,7 +171,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit if (this.tickCount > 100 || this.isInWater()) { if (this.level() instanceof ServerLevel) { - ProjectileTool.causeCustomExplode(this, this.explosion_damage, this.explosion_radius, this.monsterMultiplier); + ProjectileTool.causeCustomExplode(this, this.explosionDamage, this.explosionRadius, this.monsterMultiplier); } this.discard(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java b/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java index 660b0c38c..f56b8f70f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java @@ -44,9 +44,8 @@ public class ModPerks { public static final RegistryObject LONGER_WIRE = AMMO_PERKS.register("longer_wire", () -> new Perk("longer_wire", Perk.Type.AMMO)); public static final RegistryObject INCENDIARY_BULLET = AMMO_PERKS.register("incendiary_bullet", () -> new AmmoPerk(new AmmoPerk.Builder("incendiary_bullet", Perk.Type.AMMO).bypassArmorRate(-0.4f).damageRate(0.7f).speedRate(0.75f).slug(false).rgb(230, 131, 65))); - public static final RegistryObject MICRO_MISSILE = AMMO_PERKS.register("micro_missile", - () -> new AmmoPerk(new AmmoPerk.Builder("micro_missile", Perk.Type.AMMO).damageRate(1.25f).speedRate(1.2f))); + () -> new AmmoPerk(new AmmoPerk.Builder("micro_missile", Perk.Type.AMMO).speedRate(1.2f))); /** diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java index 8a5f59f95..573aeaba3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java @@ -246,7 +246,6 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon { @Override public boolean canApplyPerk(Perk perk) { - if (perk == ModPerks.MICRO_MISSILE.get()) return false; return PerkHelper.LAUNCHER_PERKS.test(perk); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java index b41408a6a..bafc6e268 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java @@ -211,8 +211,16 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon { gunGrenadeEntity.setNoGravity(PerkHelper.getPerkByType(stack, Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get()); + float velocity = (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0); + int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), stack); + if (perkLevel > 0) { + gunGrenadeEntity.setExplosionRadius((float) GunsTool.getGunDoubleTag(stack, "ExplosionRadius", 0) * 0.5f); + gunGrenadeEntity.setDamage((float) GunsTool.getGunDoubleTag(stack, "Damage", 0) * (1.1f + perkLevel * 0.1f)); + velocity *= 1.2f; + } + gunGrenadeEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); - gunGrenadeEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0), + gunGrenadeEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, velocity, (float) (zooming ? 0.1 : spread)); serverLevel.addFreshEntity(gunGrenadeEntity); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java index 7f6f1ed6e..022ac0f31 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java @@ -185,7 +185,7 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon { @Override public boolean canApplyPerk(Perk perk) { - return PerkHelper.LAUNCHER_PERKS.test(perk); + return PerkHelper.LAUNCHER_PERKS.test(perk) || perk == ModPerks.MICRO_MISSILE.get(); } @Override @@ -213,7 +213,7 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon { double spread = GunsTool.getGunDoubleTag(stack, "Spread"); if (player.level() instanceof ServerLevel serverLevel) { - RpgRocketEntity rocketEntity = new RpgRocketEntity(player, level, + RpgRocketEntity rocket = new RpgRocketEntity(player, level, (float) GunsTool.getGunDoubleTag(stack, "Damage", 0), (float) GunsTool.getGunDoubleTag(stack, "ExplosionDamage", 0), (float) GunsTool.getGunDoubleTag(stack, "ExplosionRadius", 0)); @@ -221,17 +221,26 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon { var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE); if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) { int perkLevel = PerkHelper.getItemPerkLevel(dmgPerk, stack); - rocketEntity.setMonsterMultiplier(0.1f + 0.1f * perkLevel); + rocket.setMonsterMultiplier(0.1f + 0.1f * perkLevel); } + float velocity = (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0); + if (PerkHelper.getPerkByType(stack, Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get()) { - rocketEntity.setNoGravity(true); + rocket.setNoGravity(true); + + int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), stack); + if (perkLevel > 0) { + rocket.setExplosionRadius((float) GunsTool.getGunDoubleTag(stack, "ExplosionRadius", 0) * 0.5f); + rocket.setDamage((float) GunsTool.getGunDoubleTag(stack, "Damage", 0) * (1.1f + perkLevel * 0.1f)); + velocity *= 1.2f; + } } - rocketEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); - rocketEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0), + rocket.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); + rocket.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, velocity, (float) (zoom ? 0.1 : spread)); - level.addFreshEntity(rocketEntity); + level.addFreshEntity(rocket); ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x, player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y, diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java index 5d8af9bab..db569f506 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java @@ -340,8 +340,16 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW gunGrenadeEntity.setNoGravity(PerkHelper.getPerkByType(stack, Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get()); gunGrenadeEntity.charged(isChargedFire); + float velocity = (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0); + int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.MICRO_MISSILE.get(), stack); + if (perkLevel > 0) { + gunGrenadeEntity.setExplosionRadius((float) GunsTool.getGunDoubleTag(stack, "ExplosionRadius", 0) * 0.5f); + gunGrenadeEntity.setDamage((float) GunsTool.getGunDoubleTag(stack, "Damage", 0) * (1.1f + perkLevel * 0.1f)); + velocity *= 1.2f; + } + gunGrenadeEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); - gunGrenadeEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (isChargedFire ? 4 : 1) * (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0), + gunGrenadeEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (isChargedFire ? 4 : 1) * velocity, (float) (zooming ? 0.1 : spread)); serverLevel.addFreshEntity(gunGrenadeEntity);