正确实现micro missile perk效果
This commit is contained in:
parent
1df4291026
commit
a7a1ca56d8
9 changed files with 82 additions and 20 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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<String> 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<? extends RpgRocketEntity> 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();
|
||||
}
|
||||
|
|
|
@ -44,9 +44,8 @@ public class ModPerks {
|
|||
public static final RegistryObject<Perk> LONGER_WIRE = AMMO_PERKS.register("longer_wire", () -> new Perk("longer_wire", Perk.Type.AMMO));
|
||||
public static final RegistryObject<Perk> 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<Perk> 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)));
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue