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