修复防弹插板相关问题
This commit is contained in:
parent
8f1ae6d82f
commit
88916eeb8e
2 changed files with 10 additions and 9 deletions
|
@ -80,7 +80,7 @@ public class LivingEventHandler {
|
||||||
handleVehicleHurt(event);
|
handleVehicleHurt(event);
|
||||||
handleGunPerksWhenHurt(event);
|
handleGunPerksWhenHurt(event);
|
||||||
renderDamageIndicator(event);
|
renderDamageIndicator(event);
|
||||||
reduceBulletDamage(event);
|
reduceDamage(event);
|
||||||
giveExpToWeapon(event);
|
giveExpToWeapon(event);
|
||||||
handleGunLevels(event);
|
handleGunLevels(event);
|
||||||
}
|
}
|
||||||
|
@ -123,25 +123,23 @@ public class LivingEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算子弹伤害衰减
|
* 计算伤害减免
|
||||||
*/
|
*/
|
||||||
private static void reduceBulletDamage(LivingIncomingDamageEvent event) {
|
private static void reduceDamage(LivingIncomingDamageEvent event) {
|
||||||
DamageSource source = event.getSource();
|
DamageSource source = event.getSource();
|
||||||
LivingEntity entity = event.getEntity();
|
LivingEntity entity = event.getEntity();
|
||||||
Entity sourceEntity = source.getEntity();
|
Entity sourceEntity = source.getEntity();
|
||||||
if (sourceEntity == null) return;
|
if (sourceEntity == null) return;
|
||||||
|
if (sourceEntity.level().isClientSide) return;
|
||||||
|
|
||||||
double amount = event.getAmount();
|
double amount = event.getAmount();
|
||||||
double damage = amount;
|
double damage = amount;
|
||||||
|
|
||||||
ItemStack stack = sourceEntity instanceof LivingEntity living ? living.getMainHandItem() : ItemStack.EMPTY;
|
ItemStack stack = sourceEntity instanceof LivingEntity living ? living.getMainHandItem() : ItemStack.EMPTY;
|
||||||
|
|
||||||
if (!(stack.getItem() instanceof GunItem)) return;
|
|
||||||
var data = GunData.from(stack);
|
|
||||||
var tag = data.tag();
|
|
||||||
|
|
||||||
// 距离衰减
|
// 距离衰减
|
||||||
if (DamageTypeTool.isGunDamage(source) && stack.getItem() instanceof GunItem) {
|
if (DamageTypeTool.isGunDamage(source) && stack.getItem() instanceof GunItem) {
|
||||||
|
var data = GunData.from(stack);
|
||||||
double distance = entity.position().distanceTo(sourceEntity.position());
|
double distance = entity.position().distanceTo(sourceEntity.position());
|
||||||
|
|
||||||
var ammoType = data.ammoTypeInfo().playerAmmoType();
|
var ammoType = data.ammoTypeInfo().playerAmmoType();
|
||||||
|
@ -175,11 +173,12 @@ public class LivingEventHandler {
|
||||||
// 计算防弹插板减伤
|
// 计算防弹插板减伤
|
||||||
ItemStack armor = entity.getItemBySlot(EquipmentSlot.CHEST);
|
ItemStack armor = entity.getItemBySlot(EquipmentSlot.CHEST);
|
||||||
|
|
||||||
|
var tag = NBTTool.getTag(armor);
|
||||||
if (armor != ItemStack.EMPTY && tag.contains("ArmorPlate")) {
|
if (armor != ItemStack.EMPTY && tag.contains("ArmorPlate")) {
|
||||||
double armorValue;
|
double armorValue;
|
||||||
armorValue = tag.getDouble("ArmorPlate");
|
armorValue = tag.getDouble("ArmorPlate");
|
||||||
tag.putDouble("ArmorPlate", Math.max(tag.getDouble("ArmorPlate") - damage, 0));
|
tag.putDouble("ArmorPlate", Math.max(armorValue - damage, 0));
|
||||||
NBTTool.saveTag(stack, tag);
|
NBTTool.saveTag(armor, tag);
|
||||||
damage = Math.max(damage - armorValue, 0);
|
damage = Math.max(damage - armorValue, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -151,6 +151,8 @@ public class PlayerEventHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NBTTool.saveTag(armor, tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void handleTacticalAttribute(Player player) {
|
public static void handleTacticalAttribute(Player player) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue