优化NBT#BypassesArmor
This commit is contained in:
parent
ec4e956572
commit
9b5d17c304
5 changed files with 37 additions and 39 deletions
|
@ -65,7 +65,7 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
|||
}
|
||||
|
||||
protected boolean shouldRenderBypassAndHeadshotTooltip() {
|
||||
return ItemNBTTool.getDouble(stack, "BypassesArmor", 0) > 0 || GunsTool.getGunDoubleTag(stack, "Headshot", 0) > 0;
|
||||
return GunsTool.getGunDoubleTag(stack, "BypassesArmor", 0) > 0 || GunsTool.getGunDoubleTag(stack, "Headshot", 0) > 0;
|
||||
}
|
||||
|
||||
protected boolean shouldRenderEditTooltip() {
|
||||
|
@ -176,7 +176,7 @@ public class ClientGunImageTooltip implements ClientTooltipComponent {
|
|||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
perkBypassArmorRate = ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0);
|
||||
}
|
||||
double bypassRate = Math.max(ItemNBTTool.getDouble(stack, "BypassesArmor", 0) + perkBypassArmorRate, 0);
|
||||
double bypassRate = Math.max(GunsTool.getGunDoubleTag(stack, "BypassesArmor", 0) + perkBypassArmorRate, 0);
|
||||
|
||||
return Component.translatable("des.superbwarfare.tips.bypass").withStyle(ChatFormatting.GRAY)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
|
|
|
@ -182,19 +182,19 @@ public class GunEventHandler {
|
|||
}
|
||||
|
||||
public static void gunShoot(Player player, double spared) {
|
||||
ItemStack heldItem = player.getMainHandItem();
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
|
||||
if (!player.level().isClientSide()) {
|
||||
float headshot = (float) GunsTool.getGunDoubleTag(heldItem, "Headshot", 0);
|
||||
float damage = (float) (GunsTool.getGunDoubleTag(heldItem, "Damage", 0) + heldItem.getOrCreateTag().getDouble("sentinelChargeDamage")) * (float) perkDamage(heldItem);
|
||||
float velocity = (float) ((GunsTool.getGunDoubleTag(heldItem, "Velocity", 0) + heldItem.getOrCreateTag().getDouble("CustomVelocity")) * perkSpeed(heldItem));
|
||||
int projectileAmount = GunsTool.getGunIntTag(heldItem, "ProjectileAmount", 1);
|
||||
float bypassArmorRate = (float) heldItem.getOrCreateTag().getDouble("BypassesArmor");
|
||||
float headshot = (float) GunsTool.getGunDoubleTag(stack, "Headshot", 0);
|
||||
float damage = (float) (GunsTool.getGunDoubleTag(stack, "Damage", 0) + stack.getOrCreateTag().getDouble("sentinelChargeDamage")) * (float) perkDamage(stack);
|
||||
float velocity = (float) ((GunsTool.getGunDoubleTag(stack, "Velocity", 0) + stack.getOrCreateTag().getDouble("CustomVelocity")) * perkSpeed(stack));
|
||||
int projectileAmount = GunsTool.getGunIntTag(stack, "ProjectileAmount", 1);
|
||||
float bypassArmorRate = (float) GunsTool.getGunDoubleTag(stack, "BypassesArmor", 0);
|
||||
boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom;
|
||||
var perk = PerkHelper.getPerkByType(heldItem, Perk.Type.AMMO);
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
|
||||
if (perk != null && perk.descriptionId.equals("butterfly_bullet")) {
|
||||
if (handleButterflyBullet(perk, heldItem, player)) return;
|
||||
if (handleButterflyBullet(perk, stack, player)) return;
|
||||
}
|
||||
|
||||
ProjectileEntity projectile = new ProjectileEntity(player.level())
|
||||
|
@ -204,7 +204,7 @@ public class GunEventHandler {
|
|||
.zoom(zoom);
|
||||
|
||||
if (perk instanceof AmmoPerk ammoPerk) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
|
||||
bypassArmorRate += ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0);
|
||||
projectile.setRGB(ammoPerk.rgb);
|
||||
|
@ -229,29 +229,29 @@ public class GunEventHandler {
|
|||
projectile.bypassArmorRate(bypassArmorRate);
|
||||
|
||||
if (perk == ModPerks.SILVER_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.undeadMultiple(1.0f + 0.5f * level);
|
||||
} else if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
projectile.beast();
|
||||
} else if (perk == ModPerks.JHP_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.jhpBullet(true, level);
|
||||
} else if (perk == ModPerks.HE_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.heBullet(true, level);
|
||||
} else if (perk == ModPerks.INCENDIARY_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
projectile.fireBullet(true, level, heldItem.is(ModTags.Items.SHOTGUN));
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.fireBullet(true, level, stack.is(ModTags.Items.SHOTGUN));
|
||||
}
|
||||
|
||||
var dmgPerk = PerkHelper.getPerkByType(heldItem, Perk.Type.DAMAGE);
|
||||
var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
|
||||
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(dmgPerk, heldItem);
|
||||
int level = PerkHelper.getItemPerkLevel(dmgPerk, stack);
|
||||
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.shoot(player, player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z, heldItem.is(ModTags.Items.SHOTGUN) && perk == ModPerks.INCENDIARY_BULLET.get() ? 4.5f : velocity,
|
||||
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) spared);
|
||||
player.level().addFreshEntity(projectile);
|
||||
}
|
||||
|
|
|
@ -276,12 +276,12 @@ public class Trachelium extends GunItem implements GeoItem, AnimatedItem {
|
|||
|
||||
if (scopeType > 0 || gripType > 0) {
|
||||
tag.putDouble("CustomVelocity", 15);
|
||||
tag.putDouble("BypassesArmor", 0.4);
|
||||
GunsTool.setGunDoubleTag(stack, "BypassesArmor", 0.4);
|
||||
GunsTool.setGunDoubleTag(stack, "Damage", 21);
|
||||
GunsTool.setGunDoubleTag(stack, "Headshot", 2.5);
|
||||
} else {
|
||||
tag.putDouble("CustomVelocity", 0);
|
||||
tag.putDouble("BypassesArmor", 0.3);
|
||||
GunsTool.setGunDoubleTag(stack, "BypassesArmor", 0.3);
|
||||
GunsTool.setGunDoubleTag(stack, "Damage", 19);
|
||||
GunsTool.setGunDoubleTag(stack, "Headshot", 2);
|
||||
}
|
||||
|
|
|
@ -232,27 +232,25 @@ public class FireMessage {
|
|||
}
|
||||
|
||||
private static void spawnBullet(Player player) {
|
||||
ItemStack heldItem = player.getMainHandItem();
|
||||
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (player.level().isClientSide()) return;
|
||||
|
||||
CompoundTag tag = heldItem.getOrCreateTag();
|
||||
var perk = PerkHelper.getPerkByType(heldItem, Perk.Type.AMMO);
|
||||
float headshot = (float) GunsTool.getGunDoubleTag(heldItem, "Headshot", 0);
|
||||
float velocity = 2 * (float) tag.getDouble("speed") * (float) perkSpeed(heldItem);
|
||||
float bypassArmorRate = (float) heldItem.getOrCreateTag().getDouble("BypassesArmor");
|
||||
CompoundTag tag = stack.getOrCreateTag();
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
float headshot = (float) GunsTool.getGunDoubleTag(stack, "Headshot", 0);
|
||||
float velocity = 2 * (float) tag.getDouble("speed") * (float) perkSpeed(stack);
|
||||
float bypassArmorRate = (float) GunsTool.getGunDoubleTag(stack, "BypassesArmor", 0);
|
||||
double damage;
|
||||
boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom;
|
||||
|
||||
float spread;
|
||||
|
||||
if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) {
|
||||
spread = 0.01f;
|
||||
damage = 0.08333333 * GunsTool.getGunDoubleTag(heldItem, "Damage", 0) * tag.getDouble("speed") * perkDamage(heldItem);
|
||||
damage = 0.08333333 * GunsTool.getGunDoubleTag(stack, "Damage", 0) * tag.getDouble("speed") * perkDamage(stack);
|
||||
} else {
|
||||
spread = perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 0.5f : 2.5f;
|
||||
damage = (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 0.08333333 : 0.008333333) *
|
||||
GunsTool.getGunDoubleTag(heldItem, "Damage", 0) * tag.getDouble("speed") * perkDamage(heldItem);
|
||||
GunsTool.getGunDoubleTag(stack, "Damage", 0) * tag.getDouble("speed") * perkDamage(stack);
|
||||
}
|
||||
|
||||
ProjectileEntity projectile = new ProjectileEntity(player.level())
|
||||
|
@ -261,7 +259,7 @@ public class FireMessage {
|
|||
.zoom(zoom);
|
||||
|
||||
if (perk instanceof AmmoPerk ammoPerk) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
|
||||
bypassArmorRate += ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get() ? 0.05f * (level - 1) : 0);
|
||||
projectile.setRGB(ammoPerk.rgb);
|
||||
|
@ -279,24 +277,24 @@ public class FireMessage {
|
|||
projectile.bypassArmorRate(bypassArmorRate);
|
||||
|
||||
if (perk == ModPerks.SILVER_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.undeadMultiple(1.0f + 0.5f * level);
|
||||
} else if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
projectile.beast();
|
||||
} else if (perk == ModPerks.JHP_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.jhpBullet(true, level);
|
||||
} else if (perk == ModPerks.HE_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.heBullet(true, level);
|
||||
} else if (perk == ModPerks.INCENDIARY_BULLET.get()) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, heldItem);
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
projectile.fireBullet(true, level, !zoom);
|
||||
}
|
||||
|
||||
var dmgPerk = PerkHelper.getPerkByType(heldItem, Perk.Type.DAMAGE);
|
||||
var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE);
|
||||
if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) {
|
||||
int perkLevel = PerkHelper.getItemPerkLevel(dmgPerk, heldItem);
|
||||
int perkLevel = PerkHelper.getItemPerkLevel(dmgPerk, stack);
|
||||
projectile.monsterMultiple(0.1f + 0.1f * perkLevel);
|
||||
}
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ public class GunsTool {
|
|||
|
||||
// TODO 临时使用,移植完毕后删除
|
||||
private static final Set<String> STRING_SET = Set.of("EmptyReloadTime", "FireMode", "Weight", "SoundRadius", "BurstSize", "ProjectileAmount",
|
||||
"Spread", "NormalReloadTime", "Headshot", "Semi", "Burst", "Auto", "RecoilX", "RecoilY", "Velocity", "Damage");
|
||||
"Spread", "NormalReloadTime", "Headshot", "Semi", "Burst", "Auto", "RecoilX", "RecoilY", "Velocity", "Damage", "BypassesArmor");
|
||||
|
||||
public static void initGun(Level level, ItemStack stack, String location) {
|
||||
if (level.getServer() == null) return;
|
||||
|
|
Loading…
Add table
Reference in a new issue