优化部分弹药perk
This commit is contained in:
parent
c6798522f1
commit
279f86a6ab
13 changed files with 143 additions and 77 deletions
|
@ -3,9 +3,7 @@ package com.atsuishio.superbwarfare.init;
|
||||||
import com.atsuishio.superbwarfare.Mod;
|
import com.atsuishio.superbwarfare.Mod;
|
||||||
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
import com.atsuishio.superbwarfare.perk.ammo.APBullet;
|
import com.atsuishio.superbwarfare.perk.ammo.*;
|
||||||
import com.atsuishio.superbwarfare.perk.ammo.BeastBullet;
|
|
||||||
import com.atsuishio.superbwarfare.perk.ammo.SilverBullet;
|
|
||||||
import com.atsuishio.superbwarfare.perk.damage.*;
|
import com.atsuishio.superbwarfare.perk.damage.*;
|
||||||
import com.atsuishio.superbwarfare.perk.functional.*;
|
import com.atsuishio.superbwarfare.perk.functional.*;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
@ -33,18 +31,15 @@ public class ModPerks {
|
||||||
public static final DeferredRegister<Perk> AMMO_PERKS = DeferredRegister.create(Mod.loc("perk"), Mod.MODID);
|
public static final DeferredRegister<Perk> AMMO_PERKS = DeferredRegister.create(Mod.loc("perk"), Mod.MODID);
|
||||||
|
|
||||||
public static final DeferredHolder<Perk, Perk> AP_BULLET = AMMO_PERKS.register("ap_bullet", APBullet::new);
|
public static final DeferredHolder<Perk, Perk> AP_BULLET = AMMO_PERKS.register("ap_bullet", APBullet::new);
|
||||||
public static final DeferredHolder<Perk, Perk> JHP_BULLET = AMMO_PERKS.register("jhp_bullet",
|
public static final DeferredHolder<Perk, Perk> JHP_BULLET = AMMO_PERKS.register("jhp_bullet", JHPBullet::new);
|
||||||
() -> new AmmoPerk(new AmmoPerk.Builder("jhp_bullet", Perk.Type.AMMO).bypassArmorRate(-0.2f).damageRate(1.1f).speedRate(0.95f).slug(true).rgb(230, 131, 65)));
|
public static final DeferredHolder<Perk, Perk> HE_BULLET = AMMO_PERKS.register("he_bullet", HEBullet::new);
|
||||||
public static final DeferredHolder<Perk, Perk> HE_BULLET = AMMO_PERKS.register("he_bullet",
|
|
||||||
() -> new AmmoPerk(new AmmoPerk.Builder("he_bullet", Perk.Type.AMMO).bypassArmorRate(-0.3f).damageRate(0.5f).speedRate(0.85f).slug(true).rgb(240, 20, 10)));
|
|
||||||
public static final DeferredHolder<Perk, Perk> SILVER_BULLET = AMMO_PERKS.register("silver_bullet", SilverBullet::new);
|
public static final DeferredHolder<Perk, Perk> SILVER_BULLET = AMMO_PERKS.register("silver_bullet", SilverBullet::new);
|
||||||
public static final DeferredHolder<Perk, Perk> POISONOUS_BULLET = AMMO_PERKS.register("poisonous_bullet",
|
public static final DeferredHolder<Perk, Perk> POISONOUS_BULLET = AMMO_PERKS.register("poisonous_bullet",
|
||||||
() -> new AmmoPerk(new AmmoPerk.Builder("poisonous_bullet", Perk.Type.AMMO).bypassArmorRate(0.0f).damageRate(1.0f).speedRate(1.0f).rgb(48, 131, 6)
|
() -> new AmmoPerk(new AmmoPerk.Builder("poisonous_bullet", Perk.Type.AMMO).bypassArmorRate(0.0f).damageRate(1.0f).speedRate(1.0f).rgb(48, 131, 6)
|
||||||
.mobEffect(MobEffects.POISON::value)));
|
.mobEffect(MobEffects.POISON::value)));
|
||||||
public static final DeferredHolder<Perk, Perk> BEAST_BULLET = AMMO_PERKS.register("beast_bullet", BeastBullet::new);
|
public static final DeferredHolder<Perk, Perk> BEAST_BULLET = AMMO_PERKS.register("beast_bullet", BeastBullet::new);
|
||||||
public static final DeferredHolder<Perk, Perk> LONGER_WIRE = AMMO_PERKS.register("longer_wire", () -> new Perk("longer_wire", Perk.Type.AMMO));
|
public static final DeferredHolder<Perk, Perk> LONGER_WIRE = AMMO_PERKS.register("longer_wire", () -> new Perk("longer_wire", Perk.Type.AMMO));
|
||||||
public static final DeferredHolder<Perk, Perk> INCENDIARY_BULLET = AMMO_PERKS.register("incendiary_bullet",
|
public static final DeferredHolder<Perk, Perk> INCENDIARY_BULLET = AMMO_PERKS.register("incendiary_bullet", IncendiaryBullet::new);
|
||||||
() -> 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 DeferredHolder<Perk, Perk> MICRO_MISSILE = AMMO_PERKS.register("micro_missile",
|
public static final DeferredHolder<Perk, Perk> MICRO_MISSILE = AMMO_PERKS.register("micro_missile",
|
||||||
() -> new AmmoPerk(new AmmoPerk.Builder("micro_missile", Perk.Type.AMMO).speedRate(1.2f)));
|
() -> new AmmoPerk(new AmmoPerk.Builder("micro_missile", Perk.Type.AMMO).speedRate(1.2f)));
|
||||||
|
|
||||||
|
@ -71,7 +66,7 @@ public class ModPerks {
|
||||||
public static final DeferredHolder<Perk, Perk> GUTSHOT_STRAIGHT = DAMAGE_PERKS.register("gutshot_straight", GutshotStraight::new);
|
public static final DeferredHolder<Perk, Perk> GUTSHOT_STRAIGHT = DAMAGE_PERKS.register("gutshot_straight", GutshotStraight::new);
|
||||||
public static final DeferredHolder<Perk, Perk> KILLING_TALLY = DAMAGE_PERKS.register("killing_tally", KillingTally::new);
|
public static final DeferredHolder<Perk, Perk> KILLING_TALLY = DAMAGE_PERKS.register("killing_tally", KillingTally::new);
|
||||||
public static final DeferredHolder<Perk, Perk> HEAD_SEEKER = DAMAGE_PERKS.register("head_seeker", HeadSeeker::new);
|
public static final DeferredHolder<Perk, Perk> HEAD_SEEKER = DAMAGE_PERKS.register("head_seeker", HeadSeeker::new);
|
||||||
public static final DeferredHolder<Perk, Perk> MONSTER_HUNTER = DAMAGE_PERKS.register("monster_hunter", () -> new Perk("monster_hunter", Perk.Type.DAMAGE));
|
public static final DeferredHolder<Perk, Perk> MONSTER_HUNTER = DAMAGE_PERKS.register("monster_hunter", MonsterHunter::new);
|
||||||
public static final DeferredHolder<Perk, Perk> VOLT_OVERLOAD = DAMAGE_PERKS.register("volt_overload", () -> new Perk("volt_overload", Perk.Type.DAMAGE));
|
public static final DeferredHolder<Perk, Perk> VOLT_OVERLOAD = DAMAGE_PERKS.register("volt_overload", () -> new Perk("volt_overload", Perk.Type.DAMAGE));
|
||||||
public static final DeferredHolder<Perk, Perk> DESPERADO = DAMAGE_PERKS.register("desperado", Desperado::new);
|
public static final DeferredHolder<Perk, Perk> DESPERADO = DAMAGE_PERKS.register("desperado", Desperado::new);
|
||||||
public static final DeferredHolder<Perk, Perk> VORPAL_WEAPON = DAMAGE_PERKS.register("vorpal_weapon", VorpalWeapon::new);
|
public static final DeferredHolder<Perk, Perk> VORPAL_WEAPON = DAMAGE_PERKS.register("vorpal_weapon", VorpalWeapon::new);
|
||||||
|
|
|
@ -4,7 +4,10 @@ import com.atsuishio.superbwarfare.Mod;
|
||||||
import com.atsuishio.superbwarfare.client.PoseTool;
|
import com.atsuishio.superbwarfare.client.PoseTool;
|
||||||
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
|
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
||||||
import com.atsuishio.superbwarfare.init.*;
|
import com.atsuishio.superbwarfare.init.ModAttachments;
|
||||||
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
|
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||||
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.item.CustomRendererItem;
|
import com.atsuishio.superbwarfare.item.CustomRendererItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
|
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
|
||||||
|
@ -606,14 +609,6 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
||||||
public void onFireKeyRelease(final GunData data, Player player, double power, boolean zoom) {
|
public void onFireKeyRelease(final GunData data, Player player, double power, boolean zoom) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double perkSpeed(GunData data) {
|
|
||||||
var perk = data.perk.get(Perk.Type.AMMO);
|
|
||||||
if (perk instanceof AmmoPerk ammoPerk) {
|
|
||||||
return ammoPerk.speedRate;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static double perkDamage(Perk perk) {
|
public static double perkDamage(Perk perk) {
|
||||||
if (perk instanceof AmmoPerk ammoPerk) {
|
if (perk instanceof AmmoPerk ammoPerk) {
|
||||||
return ammoPerk.damageRate;
|
return ammoPerk.damageRate;
|
||||||
|
@ -631,10 +626,8 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
||||||
|
|
||||||
float headshot = (float) data.headshot();
|
float headshot = (float) data.headshot();
|
||||||
float damage = (float) data.damage();
|
float damage = (float) data.damage();
|
||||||
float velocity = (float) (data.velocity() * perkSpeed(data));
|
float velocity = (float) data.velocity();
|
||||||
float bypassArmorRate = (float) data.bypassArmor();
|
float bypassArmorRate = (float) data.bypassArmor();
|
||||||
var perkInstance = data.perk.getInstance(Perk.Type.AMMO);
|
|
||||||
var perk = perkInstance != null ? perkInstance.perk() : null;
|
|
||||||
|
|
||||||
ProjectileEntity projectile = new ProjectileEntity(player.level())
|
ProjectileEntity projectile = new ProjectileEntity(player.level())
|
||||||
.shooter(player)
|
.shooter(player)
|
||||||
|
@ -648,28 +641,14 @@ public abstract class GunItem extends Item implements CustomRendererItem {
|
||||||
var instance = data.perk.getInstance(type);
|
var instance = data.perk.getInstance(type);
|
||||||
if (instance != null) {
|
if (instance != null) {
|
||||||
instance.perk().modifyProjectile(data, instance, projectile);
|
instance.perk().modifyProjectile(data, instance, projectile);
|
||||||
|
if (instance.perk() instanceof AmmoPerk ammoPerk) {
|
||||||
|
velocity = (float) ammoPerk.getModifiedVelocity(data, instance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (perk == ModPerks.JHP_BULLET.get()) {
|
|
||||||
int level = data.perk.getLevel(perk);
|
|
||||||
projectile.jhpBullet(level);
|
|
||||||
} else if (perk == ModPerks.HE_BULLET.get()) {
|
|
||||||
int level = data.perk.getLevel(perk);
|
|
||||||
projectile.heBullet(level);
|
|
||||||
} else if (perk == ModPerks.INCENDIARY_BULLET.get()) {
|
|
||||||
int level = data.perk.getLevel(perk);
|
|
||||||
projectile.fireBullet(level, stack.is(ModTags.Items.SHOTGUN));
|
|
||||||
}
|
|
||||||
|
|
||||||
var dmgPerk = data.perk.get(Perk.Type.DAMAGE);
|
|
||||||
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
|
||||||
int level = data.perk.getLevel(dmgPerk);
|
|
||||||
projectile.monsterMultiple(0.1f + 0.1f * level);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z);
|
projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z);
|
||||||
projectile.shoot(player, player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z, stack.is(ModTags.Items.SHOTGUN) && perk == ModPerks.INCENDIARY_BULLET.get() ? 4.5f : velocity, (float) spread);
|
projectile.shoot(player, player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z, velocity, (float) spread);
|
||||||
player.level().addFreshEntity(projectile);
|
player.level().addFreshEntity(projectile);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -8,7 +8,6 @@ import com.atsuishio.superbwarfare.entity.projectile.JavelinMissileEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
||||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
import com.atsuishio.superbwarfare.init.ModEnumExtensions;
|
import com.atsuishio.superbwarfare.init.ModEnumExtensions;
|
||||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
|
@ -237,10 +236,11 @@ public class JavelinItem extends GunItem implements GeoItem {
|
||||||
new Vec3(tag.getDouble("TargetPosX"), tag.getDouble("TargetPosY"), tag.getDouble("TargetPosZ"))
|
new Vec3(tag.getDouble("TargetPosX"), tag.getDouble("TargetPosY"), tag.getDouble("TargetPosZ"))
|
||||||
);
|
);
|
||||||
|
|
||||||
var dmgPerk = data.perk.get(Perk.Type.DAMAGE);
|
for (Perk.Type type : Perk.Type.values()) {
|
||||||
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
var instance = data.perk.getInstance(type);
|
||||||
int perkLevel = data.perk.getLevel(dmgPerk);
|
if (instance != null) {
|
||||||
missileEntity.setMonsterMultiplier(0.1f + 0.1f * perkLevel);
|
instance.perk().modifyProjectile(data, instance, missileEntity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
missileEntity.setPos(player.getX() + firePos.x, player.getEyeY() + firePos.y, player.getZ() + firePos.z);
|
missileEntity.setPos(player.getX() + firePos.x, player.getEyeY() + firePos.y, player.getZ() + firePos.z);
|
||||||
|
@ -313,5 +313,4 @@ public class JavelinItem extends GunItem implements GeoItem {
|
||||||
tag.putBoolean("Seeking", true);
|
tag.putBoolean("Seeking", true);
|
||||||
tag.putInt("SeekTime", 0);
|
tag.putInt("SeekTime", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -131,10 +131,11 @@ public class M79Item extends GunItem implements GeoItem {
|
||||||
(float) data.explosionRadius()
|
(float) data.explosionRadius()
|
||||||
);
|
);
|
||||||
|
|
||||||
var dmgPerk = data.perk.get(Perk.Type.DAMAGE);
|
for (Perk.Type type : Perk.Type.values()) {
|
||||||
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
var instance = data.perk.getInstance(type);
|
||||||
int perkLevel = data.perk.getLevel(dmgPerk);
|
if (instance != null) {
|
||||||
gunGrenadeEntity.setMonsterMultiplier(0.1f + 0.1f * perkLevel);
|
instance.perk().modifyProjectile(data, instance, gunGrenadeEntity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gunGrenadeEntity.setNoGravity(data.perk.get(Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get());
|
gunGrenadeEntity.setNoGravity(data.perk.get(Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get());
|
||||||
|
|
|
@ -156,10 +156,11 @@ public class RpgItem extends GunItem implements GeoItem {
|
||||||
(float) data.explosionRadius()
|
(float) data.explosionRadius()
|
||||||
);
|
);
|
||||||
|
|
||||||
var dmgPerk = data.perk.get(Perk.Type.DAMAGE);
|
for (Perk.Type type : Perk.Type.values()) {
|
||||||
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
var instance = data.perk.getInstance(type);
|
||||||
int perkLevel = data.perk.getLevel(dmgPerk);
|
if (instance != null) {
|
||||||
rocket.setMonsterMultiplier(0.1f + 0.1f * perkLevel);
|
instance.perk().modifyProjectile(data, instance, rocket);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float velocity = (float) data.velocity();
|
float velocity = (float) data.velocity();
|
||||||
|
|
|
@ -248,10 +248,11 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, EnergyStorag
|
||||||
(float) data.explosionRadius()
|
(float) data.explosionRadius()
|
||||||
);
|
);
|
||||||
|
|
||||||
var dmgPerk = data.perk.get(Perk.Type.DAMAGE);
|
for (Perk.Type type : Perk.Type.values()) {
|
||||||
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
var instance = data.perk.getInstance(type);
|
||||||
int perkLevel = data.perk.getLevel(dmgPerk);
|
if (instance != null) {
|
||||||
gunGrenadeEntity.setMonsterMultiplier(0.1f + 0.1f * perkLevel);
|
instance.perk().modifyProjectile(data, instance, gunGrenadeEntity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gunGrenadeEntity.setNoGravity(data.perk.get(Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get());
|
gunGrenadeEntity.setNoGravity(data.perk.get(Perk.Type.AMMO) == ModPerks.MICRO_MISSILE.get());
|
||||||
|
|
|
@ -216,7 +216,7 @@ public class BocekItem extends GunItem implements GeoItem {
|
||||||
|
|
||||||
var perk = data.perk.get(Perk.Type.AMMO);
|
var perk = data.perk.get(Perk.Type.AMMO);
|
||||||
float headshot = (float) data.headshot();
|
float headshot = (float) data.headshot();
|
||||||
float velocity = (float) (24 * power * (float) perkSpeed(data));
|
float velocity = (float) (24 * power);
|
||||||
float bypassArmorRate = (float) data.bypassArmor();
|
float bypassArmorRate = (float) data.bypassArmor();
|
||||||
double damage;
|
double damage;
|
||||||
|
|
||||||
|
@ -245,23 +245,6 @@ public class BocekItem extends GunItem implements GeoItem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (perk == ModPerks.JHP_BULLET.get()) {
|
|
||||||
int level = data.perk.getLevel(perk);
|
|
||||||
projectile.jhpBullet(level);
|
|
||||||
} else if (perk == ModPerks.HE_BULLET.get()) {
|
|
||||||
int level = data.perk.getLevel(perk);
|
|
||||||
projectile.heBullet(level);
|
|
||||||
} else if (perk == ModPerks.INCENDIARY_BULLET.get()) {
|
|
||||||
int level = data.perk.getLevel(perk);
|
|
||||||
projectile.fireBullet(level, !zoom);
|
|
||||||
}
|
|
||||||
|
|
||||||
var dmgPerk = data.perk.get(Perk.Type.DAMAGE);
|
|
||||||
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
|
||||||
int perkLevel = data.perk.getLevel(dmgPerk);
|
|
||||||
projectile.monsterMultiple(0.1f + 0.1f * perkLevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z);
|
projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z);
|
||||||
projectile.shoot(player, player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (!zoom && perk == ModPerks.INCENDIARY_BULLET.get() ? 0.2f : 1) * velocity, spread);
|
projectile.shoot(player, player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (!zoom && perk == ModPerks.INCENDIARY_BULLET.get() ? 0.2f : 1) * velocity, spread);
|
||||||
projectile.damage((float) damage);
|
projectile.damage((float) damage);
|
||||||
|
|
|
@ -52,6 +52,10 @@ public class AmmoPerk extends Perk {
|
||||||
return instance.level() - 1;
|
return instance.level() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getModifiedVelocity(GunData data, PerkInstance instance) {
|
||||||
|
return data.velocity() * this.speedRate;
|
||||||
|
}
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
|
|
||||||
String descriptionId;
|
String descriptionId;
|
||||||
|
|
|
@ -88,7 +88,7 @@ public class Perk {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void modifyProjectile(GunData data, PerkInstance instance, Entity projectile) {
|
public void modifyProjectile(GunData data, PerkInstance instance, Entity entity) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Type {
|
public enum Type {
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.atsuishio.superbwarfare.perk.ammo;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
|
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
||||||
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
|
import com.atsuishio.superbwarfare.perk.PerkInstance;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
|
||||||
|
public class HEBullet extends AmmoPerk {
|
||||||
|
|
||||||
|
public HEBullet() {
|
||||||
|
super(new AmmoPerk.Builder("he_bullet", Perk.Type.AMMO).bypassArmorRate(-0.3f).damageRate(0.5f).speedRate(0.85f).slug(true).rgb(240, 20, 10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void modifyProjectile(GunData data, PerkInstance instance, Entity entity) {
|
||||||
|
super.modifyProjectile(data, instance, entity);
|
||||||
|
if (!(entity instanceof ProjectileEntity projectile)) return;
|
||||||
|
projectile.heBullet(instance.level());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.atsuishio.superbwarfare.perk.ammo;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
||||||
|
import com.atsuishio.superbwarfare.init.ModTags;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
|
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
||||||
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
|
import com.atsuishio.superbwarfare.perk.PerkInstance;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
|
||||||
|
public class IncendiaryBullet extends AmmoPerk {
|
||||||
|
|
||||||
|
public IncendiaryBullet() {
|
||||||
|
super(new AmmoPerk.Builder("incendiary_bullet", Perk.Type.AMMO).bypassArmorRate(-0.4f).damageRate(0.7f).speedRate(0.75f).slug(false).rgb(230, 131, 65));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void modifyProjectile(GunData data, PerkInstance instance, Entity entity) {
|
||||||
|
super.modifyProjectile(data, instance, entity);
|
||||||
|
if (!(entity instanceof ProjectileEntity projectile)) return;
|
||||||
|
projectile.fireBullet(instance.level(), data.stack.is(ModTags.Items.SHOTGUN));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getModifiedVelocity(GunData data, PerkInstance instance) {
|
||||||
|
return data.stack.is(ModTags.Items.SHOTGUN) ? 4.5f : super.getModifiedVelocity(data, instance);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.atsuishio.superbwarfare.perk.ammo;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
|
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
||||||
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
|
import com.atsuishio.superbwarfare.perk.PerkInstance;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
|
||||||
|
public class JHPBullet extends AmmoPerk {
|
||||||
|
|
||||||
|
public JHPBullet() {
|
||||||
|
super(new AmmoPerk.Builder("jhp_bullet", Perk.Type.AMMO).bypassArmorRate(-0.2f).damageRate(1.1f).speedRate(0.95f).slug(true).rgb(230, 131, 65));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void modifyProjectile(GunData data, PerkInstance instance, Entity entity) {
|
||||||
|
super.modifyProjectile(data, instance, entity);
|
||||||
|
if (!(entity instanceof ProjectileEntity projectile)) return;
|
||||||
|
projectile.jhpBullet(instance.level());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.atsuishio.superbwarfare.perk.damage;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.entity.projectile.GunGrenadeEntity;
|
||||||
|
import com.atsuishio.superbwarfare.entity.projectile.JavelinMissileEntity;
|
||||||
|
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
||||||
|
import com.atsuishio.superbwarfare.entity.projectile.RpgRocketEntity;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
|
import com.atsuishio.superbwarfare.perk.PerkInstance;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
|
||||||
|
public class MonsterHunter extends Perk {
|
||||||
|
|
||||||
|
public MonsterHunter() {
|
||||||
|
super("monster_hunter", Perk.Type.DAMAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void modifyProjectile(GunData data, PerkInstance instance, Entity entity) {
|
||||||
|
float multiplier = 0.1f + 0.1f * instance.level();
|
||||||
|
if (entity instanceof ProjectileEntity projectile) {
|
||||||
|
projectile.monsterMultiple(multiplier);
|
||||||
|
} else if (entity instanceof JavelinMissileEntity projectile) {
|
||||||
|
projectile.setMonsterMultiplier(multiplier);
|
||||||
|
} else if (entity instanceof GunGrenadeEntity projectile) {
|
||||||
|
projectile.setMonsterMultiplier(multiplier);
|
||||||
|
} else if (entity instanceof RpgRocketEntity projectile) {
|
||||||
|
projectile.setMonsterMultiplier(multiplier);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue