增加混伤的方法
This commit is contained in:
parent
28b47371f4
commit
3f2742efbe
7 changed files with 97 additions and 40 deletions
|
@ -7,6 +7,7 @@ import net.mcreator.superbwarfare.event.KillMessageHandler;
|
||||||
import net.mcreator.superbwarfare.init.ModDamageTypes;
|
import net.mcreator.superbwarfare.init.ModDamageTypes;
|
||||||
import net.mcreator.superbwarfare.init.ModItems;
|
import net.mcreator.superbwarfare.init.ModItems;
|
||||||
import net.mcreator.superbwarfare.item.gun.GunItem;
|
import net.mcreator.superbwarfare.item.gun.GunItem;
|
||||||
|
import net.mcreator.superbwarfare.tools.DamageTypeTool;
|
||||||
import net.mcreator.superbwarfare.tools.PlayerKillRecord;
|
import net.mcreator.superbwarfare.tools.PlayerKillRecord;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.Font;
|
import net.minecraft.client.gui.Font;
|
||||||
|
@ -112,8 +113,6 @@ public class KillMessageOverlay {
|
||||||
GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE
|
GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO 实现图标半透明渲染
|
|
||||||
|
|
||||||
// 入场效果
|
// 入场效果
|
||||||
if (record.tick < 3) {
|
if (record.tick < 3) {
|
||||||
gui.pose().translate((3 - record.tick - event.getPartialTick()) * 33, 0, 0);
|
gui.pose().translate((3 - record.tick - event.getPartialTick()) * 33, 0, 0);
|
||||||
|
@ -247,8 +246,7 @@ public class KillMessageOverlay {
|
||||||
if (record.headshot) {
|
if (record.headshot) {
|
||||||
icon = HEADSHOT;
|
icon = HEADSHOT;
|
||||||
} else {
|
} else {
|
||||||
if (record.damageType == ModDamageTypes.GUN_FIRE || record.damageType == ModDamageTypes.GUN_FIRE_HEADSHOT
|
if (DamageTypeTool.isArrowDamage(record.damageType) || DamageTypeTool.isGunDamage(record.damageType)) {
|
||||||
|| record.damageType == ModDamageTypes.ARROW_IN_KNEE || record.damageType == ModDamageTypes.ARROW_IN_BRAIN) {
|
|
||||||
icon = null;
|
icon = null;
|
||||||
} else {
|
} else {
|
||||||
// 如果是其他伤害,则渲染对应图标
|
// 如果是其他伤害,则渲染对应图标
|
||||||
|
|
|
@ -76,10 +76,11 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
||||||
protected int shooterId;
|
protected int shooterId;
|
||||||
private float damage = 1f;
|
private float damage = 1f;
|
||||||
private float headShot = 1f;
|
private float headShot = 1f;
|
||||||
private int monster_multiple = 0;
|
private int monsterMultiple = 0;
|
||||||
private float legShot = 0.5f;
|
private float legShot = 0.5f;
|
||||||
private boolean beast = false;
|
private boolean beast = false;
|
||||||
private boolean zoom = false;
|
private boolean zoom = false;
|
||||||
|
private float bypassArmorRate = 0.0f;
|
||||||
|
|
||||||
public ProjectileEntity(EntityType<? extends ProjectileEntity> p_i50159_1_, Level p_i50159_2_) {
|
public ProjectileEntity(EntityType<? extends ProjectileEntity> p_i50159_1_, Level p_i50159_2_) {
|
||||||
super(p_i50159_1_, p_i50159_2_);
|
super(p_i50159_1_, p_i50159_2_);
|
||||||
|
@ -109,7 +110,7 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProjectileEntity monsterMultiple(int monsterMultiple) {
|
public ProjectileEntity monsterMultiple(int monsterMultiple) {
|
||||||
this.monster_multiple = monsterMultiple;
|
this.monsterMultiple = monsterMultiple;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,6 +129,11 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ProjectileEntity bypassArmorRate(float bypassArmorRate) {
|
||||||
|
this.bypassArmorRate = bypassArmorRate;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
protected EntityResult findEntityOnPath(Vec3 startVec, Vec3 endVec) {
|
protected EntityResult findEntityOnPath(Vec3 startVec, Vec3 endVec) {
|
||||||
Vec3 hitVec = null;
|
Vec3 hitVec = null;
|
||||||
|
@ -352,8 +358,8 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onHitEntity(Entity entity, boolean headshot, boolean legshot) {
|
protected void onHitEntity(Entity entity, boolean headshot, boolean legShot) {
|
||||||
float m_multiple = 1 + 0.2f * this.monster_multiple;
|
float mMultiple = 1 + 0.2f * this.monsterMultiple;
|
||||||
|
|
||||||
if (entity == null) return;
|
if (entity == null) return;
|
||||||
|
|
||||||
|
@ -401,11 +407,11 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
||||||
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(1, 5));
|
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(1, 5));
|
||||||
}
|
}
|
||||||
if (entity instanceof Monster monster) {
|
if (entity instanceof Monster monster) {
|
||||||
monster.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.shooter), this.damage * this.headShot * m_multiple);
|
performDamage(monster, this.damage * mMultiple, true);
|
||||||
} else {
|
} else {
|
||||||
entity.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.shooter), this.damage * this.headShot);
|
performDamage(entity, this.damage, true);
|
||||||
}
|
}
|
||||||
} else if (legshot) {
|
} else if (legShot) {
|
||||||
if (!this.shooter.level().isClientSide() && this.shooter instanceof ServerPlayer player) {
|
if (!this.shooter.level().isClientSide() && this.shooter instanceof ServerPlayer player) {
|
||||||
var holder = Holder.direct(ModSounds.INDICATION.get());
|
var holder = Holder.direct(ModSounds.INDICATION.get());
|
||||||
player.connection.send(new ClientboundSoundPacket(holder, SoundSource.PLAYERS, player.getX(), player.getY(), player.getZ(), 1f, 1f, player.level().random.nextLong()));
|
player.connection.send(new ClientboundSoundPacket(holder, SoundSource.PLAYERS, player.getX(), player.getY(), player.getZ(), 1f, 1f, player.level().random.nextLong()));
|
||||||
|
@ -414,9 +420,9 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity instanceof Monster monster) {
|
if (entity instanceof Monster monster) {
|
||||||
monster.hurt(ModDamageTypes.causeGunFireDamage(this.level().registryAccess(), this, this.shooter), this.damage * this.legShot * m_multiple);
|
performDamage(monster, this.damage * mMultiple * this.legShot, false);
|
||||||
} else {
|
} else {
|
||||||
entity.hurt(ModDamageTypes.causeGunFireDamage(this.level().registryAccess(), this, this.shooter), this.damage * this.legShot);
|
performDamage(entity, this.damage * this.legShot, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity instanceof LivingEntity living) {
|
if (entity instanceof LivingEntity living) {
|
||||||
|
@ -436,9 +442,9 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity instanceof Monster monster) {
|
if (entity instanceof Monster monster) {
|
||||||
monster.hurt(ModDamageTypes.causeGunFireDamage(this.level().registryAccess(), this, this.shooter), this.damage * m_multiple);
|
performDamage(monster, this.damage * mMultiple, false);
|
||||||
} else {
|
} else {
|
||||||
entity.hurt(ModDamageTypes.causeGunFireDamage(this.level().registryAccess(), this, this.shooter), this.damage);
|
performDamage(entity, this.damage, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.discard();
|
this.discard();
|
||||||
|
@ -560,14 +566,25 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
||||||
this.xRotO = this.getXRot();
|
this.xRotO = this.getXRot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void performDamage(Entity entity, float damage, boolean headshot) {
|
||||||
|
float normalDamage = damage * Mth.clamp(1 - bypassArmorRate, 0, 1);
|
||||||
|
float absoluteDamage = damage * Mth.clamp(bypassArmorRate, 0, 1);
|
||||||
|
|
||||||
|
if (headshot) {
|
||||||
|
entity.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.shooter), normalDamage * this.headShot);
|
||||||
|
entity.hurt(ModDamageTypes.causeGunFireHeadshotAbsoluteDamage(this.level().registryAccess(), this, this.shooter), absoluteDamage * this.headShot);
|
||||||
|
} else {
|
||||||
|
entity.hurt(ModDamageTypes.causeGunFireDamage(this.level().registryAccess(), this, this.shooter), normalDamage);
|
||||||
|
entity.hurt(ModDamageTypes.causeGunFireAbsoluteDamage(this.level().registryAccess(), this, this.shooter), absoluteDamage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeSpawnData(FriendlyByteBuf buffer) {
|
public void writeSpawnData(FriendlyByteBuf buffer) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readSpawnData(FriendlyByteBuf additionalData) {
|
public void readSpawnData(FriendlyByteBuf additionalData) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class EntityResult {
|
public static class EntityResult {
|
||||||
|
|
|
@ -345,6 +345,7 @@ public class GunEventHandler {
|
||||||
float headshot = (float) heldItem.getOrCreateTag().getDouble("headshot");
|
float headshot = (float) heldItem.getOrCreateTag().getDouble("headshot");
|
||||||
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.MONSTER_HUNTER.get(), heldItem);
|
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.MONSTER_HUNTER.get(), heldItem);
|
||||||
float damage = (float) (heldItem.getOrCreateTag().getDouble("damage") + heldItem.getOrCreateTag().getDouble("add_damage")) * (float) heldItem.getOrCreateTag().getDouble("damageadd");
|
float damage = (float) (heldItem.getOrCreateTag().getDouble("damage") + heldItem.getOrCreateTag().getDouble("add_damage")) * (float) heldItem.getOrCreateTag().getDouble("damageadd");
|
||||||
|
float bypassArmorRate = (float) heldItem.getOrCreateTag().getDouble("BypassesArmor");
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
|
@ -352,7 +353,8 @@ public class GunEventHandler {
|
||||||
.shooter(player)
|
.shooter(player)
|
||||||
.damage(damage)
|
.damage(damage)
|
||||||
.headShot(headshot)
|
.headShot(headshot)
|
||||||
.zoom(zoom);
|
.zoom(zoom)
|
||||||
|
.bypassArmorRate(bypassArmorRate);
|
||||||
|
|
||||||
if (heldItem.getOrCreateTag().getBoolean("beast")) {
|
if (heldItem.getOrCreateTag().getBoolean("beast")) {
|
||||||
projectile.beast();
|
projectile.beast();
|
||||||
|
|
|
@ -8,6 +8,7 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
|
||||||
import net.mcreator.superbwarfare.network.ModVariables;
|
import net.mcreator.superbwarfare.network.ModVariables;
|
||||||
import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage;
|
import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage;
|
||||||
import net.mcreator.superbwarfare.network.message.PlayerGunKillMessage;
|
import net.mcreator.superbwarfare.network.message.PlayerGunKillMessage;
|
||||||
|
import net.mcreator.superbwarfare.tools.DamageTypeTool;
|
||||||
import net.mcreator.superbwarfare.tools.SoundTool;
|
import net.mcreator.superbwarfare.tools.SoundTool;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.network.protocol.game.ClientboundStopSoundPacket;
|
import net.minecraft.network.protocol.game.ClientboundStopSoundPacket;
|
||||||
|
@ -55,25 +56,23 @@ public class LivingEventHandler {
|
||||||
handlePlayerKillEntity(event);
|
handlePlayerKillEntity(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void reduceBulletDamage(LivingHurtEvent event, DamageSource damagesource, LivingEntity entity, Entity sourceentity, double amount) {
|
private static void reduceBulletDamage(LivingHurtEvent event, DamageSource damageSource, LivingEntity entity, Entity sourceentity, double amount) {
|
||||||
if (damagesource == null || entity == null || sourceentity == null) {
|
if (damageSource == null || entity == null || sourceentity == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
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 ((damagesource.is(ModDamageTypes.ARROW_IN_KNEE) || damagesource.is(ModDamageTypes.ARROW_IN_BRAIN)
|
if (DamageTypeTool.isArrowDamage(damageSource) && stack.getItem() == ModItems.BOCEK.get()) {
|
||||||
&& stack.getItem() == ModItems.BOCEK.get())) {
|
|
||||||
stack.getOrCreateTag().putDouble("damagetotal", stack.getOrCreateTag().getDouble("damagetotal") + damage);
|
stack.getOrCreateTag().putDouble("damagetotal", stack.getOrCreateTag().getDouble("damagetotal") + damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((damagesource.is(ModDamageTypes.PROJECTILE_BOOM) || damagesource.is(DamageTypes.ARROW))
|
if ((damageSource.is(ModDamageTypes.PROJECTILE_BOOM) || damageSource.is(DamageTypes.ARROW))
|
||||||
&& (stack.getItem() == ModItems.M_79.get() || stack.getItem() == ModItems.RPG.get())
|
&& (stack.getItem() == ModItems.M_79.get() || stack.getItem() == ModItems.RPG.get())) {
|
||||||
) {
|
|
||||||
stack.getOrCreateTag().putDouble("damagetotal", stack.getOrCreateTag().getDouble("damagetotal") + damage);
|
stack.getOrCreateTag().putDouble("damagetotal", stack.getOrCreateTag().getDouble("damagetotal") + damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (damagesource.is(ModDamageTypes.GUN_FIRE) || damagesource.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) {
|
if (DamageTypeTool.isGunDamage(damageSource)) {
|
||||||
double distance = entity.position().distanceTo(sourceentity.position());
|
double distance = entity.position().distanceTo(sourceentity.position());
|
||||||
|
|
||||||
if (stack.is(ModTags.Items.SHOTGUN) || stack.getItem() == ModItems.BOCEK.get()) {
|
if (stack.is(ModTags.Items.SHOTGUN) || stack.getItem() == ModItems.BOCEK.get()) {
|
||||||
|
@ -247,7 +246,7 @@ public class LivingEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attacker != null) {
|
if (attacker != null) {
|
||||||
if (source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || source.is(ModDamageTypes.ARROW_IN_BRAIN)) {
|
if (DamageTypeTool.isHeadshotDamage(source)) {
|
||||||
ModUtils.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(attacker.getId(), entity.getId(), true, damageTypeResourceKey));
|
ModUtils.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(attacker.getId(), entity.getId(), true, damageTypeResourceKey));
|
||||||
} else {
|
} else {
|
||||||
ModUtils.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(attacker.getId(), entity.getId(), false, damageTypeResourceKey));
|
ModUtils.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(attacker.getId(), entity.getId(), false, damageTypeResourceKey));
|
||||||
|
@ -275,21 +274,19 @@ public class LivingEventHandler {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) ||
|
if (DamageTypeTool.isGunDamage(source) || source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||||
source.is(ModDamageTypes.ARROW_IN_BRAIN) || source.is(ModDamageTypes.ARROW_IN_KNEE)
|
|
||||||
|| source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
|
||||||
handleKillClipDamage(stack, event);
|
handleKillClipDamage(stack, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source.is(ModDamageTypes.GUN_FIRE) && source.getDirectEntity() instanceof ProjectileEntity projectile && projectile.isZoom()) {
|
if (DamageTypeTool.isGunFireDamage(source) && source.getDirectEntity() instanceof ProjectileEntity projectile && projectile.isZoom()) {
|
||||||
handleGutshotStraightDamage(stack, event);
|
handleGutshotStraightDamage(stack, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) {
|
if (DamageTypeTool.isGunDamage(source)) {
|
||||||
handleKillingTallyDamage(stack, event);
|
handleKillingTallyDamage(stack, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) {
|
if (DamageTypeTool.isGunHeadshotDamage(source)) {
|
||||||
handleFourthTimesCharm(stack);
|
handleFourthTimesCharm(stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -314,13 +311,11 @@ public class LivingEventHandler {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) ||
|
if (DamageTypeTool.isGunDamage(source) || source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
||||||
source.is(ModDamageTypes.ARROW_IN_BRAIN) || source.is(ModDamageTypes.ARROW_IN_KNEE)
|
|
||||||
|| source.is(ModDamageTypes.PROJECTILE_BOOM)) {
|
|
||||||
handleClipEnchantments(stack);
|
handleClipEnchantments(stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) {
|
if (DamageTypeTool.isGunDamage(source)) {
|
||||||
handleKillingTallyAddCount(stack);
|
handleKillingTallyAddCount(stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -339,7 +334,7 @@ public class LivingEventHandler {
|
||||||
|
|
||||||
private static void handleKillClipDamage(ItemStack stack, LivingHurtEvent event) {
|
private static void handleKillClipDamage(ItemStack stack, LivingHurtEvent event) {
|
||||||
if (stack.getOrCreateTag().getInt("KillClipTime") > 0) {
|
if (stack.getOrCreateTag().getInt("KillClipTime") > 0) {
|
||||||
int enchantmentLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.GUTSHOT_STRAIGHT.get(), stack);
|
int enchantmentLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.KILL_CLIP.get(), stack);
|
||||||
if (enchantmentLevel == 0) {
|
if (enchantmentLevel == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -491,7 +491,7 @@ public class PlayerEventHandler {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(sleepTime);
|
Thread.sleep(sleepTime);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
ModUtils.LOGGER.error(e.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -212,12 +212,14 @@ public class FireMessage {
|
||||||
float velocity = 4 * (float) tag.getDouble("speed");
|
float velocity = 4 * (float) tag.getDouble("speed");
|
||||||
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.MONSTER_HUNTER.get(), heldItem);
|
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.MONSTER_HUNTER.get(), heldItem);
|
||||||
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 bypassArmorRate = (float) heldItem.getOrCreateTag().getDouble("BypassesArmor");
|
||||||
|
|
||||||
var projectile = new ProjectileEntity(player.level())
|
var projectile = new ProjectileEntity(player.level())
|
||||||
.shooter(player)
|
.shooter(player)
|
||||||
.headShot(headshot)
|
.headShot(headshot)
|
||||||
.monsterMultiple(monsterMultiple)
|
.monsterMultiple(monsterMultiple)
|
||||||
.zoom(zoom);
|
.zoom(zoom)
|
||||||
|
.bypassArmorRate(bypassArmorRate);
|
||||||
|
|
||||||
if (tag.getBoolean("beast")) {
|
if (tag.getBoolean("beast")) {
|
||||||
projectile.beast();
|
projectile.beast();
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
package net.mcreator.superbwarfare.tools;
|
||||||
|
|
||||||
|
import net.mcreator.superbwarfare.init.ModDamageTypes;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
|
import net.minecraft.world.damagesource.DamageType;
|
||||||
|
|
||||||
|
public class DamageTypeTool {
|
||||||
|
|
||||||
|
public static boolean isArrowDamage(DamageSource source) {
|
||||||
|
return source.is(ModDamageTypes.ARROW_IN_BRAIN) || source.is(ModDamageTypes.ARROW_IN_KNEE)
|
||||||
|
|| source.is(ModDamageTypes.ARROW_IN_BRAIN_ABSOLUTE) || source.is(ModDamageTypes.ARROW_IN_KNEE_ABSOLUTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isArrowDamage(ResourceKey<DamageType> damageType) {
|
||||||
|
return damageType == ModDamageTypes.ARROW_IN_BRAIN || damageType == ModDamageTypes.ARROW_IN_KNEE
|
||||||
|
|| damageType == ModDamageTypes.ARROW_IN_BRAIN_ABSOLUTE || damageType == ModDamageTypes.ARROW_IN_KNEE_ABSOLUTE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isGunDamage(DamageSource source) {
|
||||||
|
return source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)
|
||||||
|
|| source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isGunDamage(ResourceKey<DamageType> damageType) {
|
||||||
|
return damageType == ModDamageTypes.GUN_FIRE || damageType == ModDamageTypes.GUN_FIRE_HEADSHOT
|
||||||
|
|| damageType == ModDamageTypes.GUN_FIRE_ABSOLUTE || damageType == ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isGunHeadshotDamage(DamageSource source) {
|
||||||
|
return source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isHeadshotDamage(DamageSource source) {
|
||||||
|
return source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE)
|
||||||
|
|| source.is(ModDamageTypes.ARROW_IN_BRAIN) || source.is(ModDamageTypes.ARROW_IN_BRAIN_ABSOLUTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isGunFireDamage(DamageSource source) {
|
||||||
|
return source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue