波塞克添加曳光弹尾迹,适配银弹
This commit is contained in:
parent
08912da043
commit
b5893e1f86
6 changed files with 54 additions and 10 deletions
|
@ -15,6 +15,7 @@ import net.minecraft.util.Mth;
|
|||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.MobType;
|
||||
import net.minecraft.world.entity.monster.Monster;
|
||||
import net.minecraft.world.entity.projectile.AbstractArrow;
|
||||
import net.minecraft.world.entity.projectile.ItemSupplier;
|
||||
|
@ -41,6 +42,7 @@ public class BocekArrowEntity extends AbstractArrow implements ItemSupplier {
|
|||
|
||||
private int monsterMultiplier = 0;
|
||||
private float bypassArmorRate = 0.0f;
|
||||
private float undeadMultiple = 1.0f;
|
||||
|
||||
public BocekArrowEntity(EntityType<? extends BocekArrowEntity> type, Level world) {
|
||||
super(type, world);
|
||||
|
@ -64,6 +66,11 @@ public class BocekArrowEntity extends AbstractArrow implements ItemSupplier {
|
|||
return this;
|
||||
}
|
||||
|
||||
public BocekArrowEntity undeadMultiple(float undeadMultiple) {
|
||||
this.undeadMultiple = undeadMultiple;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Packet<ClientGamePacketListener> getAddEntityPacket() {
|
||||
return NetworkHooks.getEntitySpawningPacket(this);
|
||||
|
@ -156,9 +163,9 @@ public class BocekArrowEntity extends AbstractArrow implements ItemSupplier {
|
|||
|
||||
boolean hurt;
|
||||
if (entity instanceof Monster) {
|
||||
hurt = performHurt(entity, i * damageMultiplier, headshot);
|
||||
hurt = performHurt(entity, i * damageMultiplier * (entity instanceof LivingEntity living && living.getMobType() == MobType.UNDEAD? this.undeadMultiple : 1), headshot);
|
||||
} else {
|
||||
hurt = performHurt(entity, i, headshot);
|
||||
hurt = performHurt(entity, i * (entity instanceof LivingEntity living && living.getMobType() == MobType.UNDEAD? this.undeadMultiple : 1), headshot);
|
||||
}
|
||||
|
||||
if (!hurt) {
|
||||
|
|
|
@ -280,7 +280,7 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
|||
double y = vec.y;
|
||||
double z = vec.z;
|
||||
|
||||
this.setDeltaMovement(x - 0.02 * x, y - 0.02 * y - 0.05, z - 0.02 * z);
|
||||
this.setDeltaMovement(vec.x, vec.y - 0.05000000074505806, vec.z);
|
||||
|
||||
this.tickCount++;
|
||||
if (this.tickCount > 40) {
|
||||
|
|
|
@ -22,7 +22,8 @@ public class ProjectileEntityModel extends GeoModel<ProjectileEntity> {
|
|||
Player player = Minecraft.getInstance().player;
|
||||
if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zooming
|
||||
|| player.getMainHandItem().is(ModItems.GLOCK_17.get())
|
||||
|| player.getMainHandItem().is(ModItems.GLOCK_18.get())) {
|
||||
|| player.getMainHandItem().is(ModItems.GLOCK_18.get())
|
||||
|| player.getMainHandItem().is(ModItems.BOCEK.get())) {
|
||||
return new ResourceLocation(ModUtils.MODID, "geo/projectile_entity.geo.json");
|
||||
} else {
|
||||
return new ResourceLocation(ModUtils.MODID, "geo/projectile_entity2.geo.json");
|
||||
|
|
|
@ -155,10 +155,45 @@ public class FireMessage {
|
|||
Level level = player.level();
|
||||
if (!level.isClientSide()) {
|
||||
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.MONSTER_HUNTER.get(), stack);
|
||||
float damage = (float) (0.02 * stack.getOrCreateTag().getDouble("damage") * (1 + 0.05 * stack.getOrCreateTag().getInt("level")));
|
||||
float damage = (float) (0.04 * stack.getOrCreateTag().getDouble("damage") * (1 + 0.05 * stack.getOrCreateTag().getInt("level")));
|
||||
float bypassArmorRate = (float) stack.getOrCreateTag().getDouble("BypassArmor");
|
||||
|
||||
BocekArrowEntity arrow = new BocekArrowEntity(player, level, monsterMultiple).bypassArmorRate(bypassArmorRate);
|
||||
ProjectileEntity projectile = new ProjectileEntity(player.level())
|
||||
.shooter(player)
|
||||
.headShot(1)
|
||||
.zoom(true)
|
||||
.monsterMultiple(1);
|
||||
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (perk instanceof AmmoPerk ammoPerk) {
|
||||
int pLevel = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
|
||||
bypassArmorRate = bypassArmorRate + ammoPerk.bypassArmorRate + (perk == ModPerks.AP_BULLET.get()? 0.05f * (pLevel - 1) : 0);
|
||||
projectile.setRGB(ammoPerk.rgb);
|
||||
|
||||
if (ammoPerk.mobEffect.get() != null) {
|
||||
projectile.effect(() -> new MobEffectInstance(ammoPerk.mobEffect.get(), 100, pLevel - 1));
|
||||
}
|
||||
}
|
||||
|
||||
float undeadMultiple = 1;
|
||||
|
||||
if (perk == ModPerks.SILVER_BULLET.get()) {
|
||||
int level_ = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
undeadMultiple = 1.0f + 0.5f * level_;
|
||||
} else if (perk == ModPerks.BEAST_BULLET.get()) {
|
||||
projectile.beast();
|
||||
}
|
||||
|
||||
projectile.bypassArmorRate(0);
|
||||
projectile.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ());
|
||||
projectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) (2 * power), 0);
|
||||
projectile.damage(0);
|
||||
player.level().addFreshEntity(projectile);
|
||||
|
||||
bypassArmorRate = Mth.clamp(bypassArmorRate, 0, 1);
|
||||
|
||||
BocekArrowEntity arrow = new BocekArrowEntity(player, level, monsterMultiple).bypassArmorRate(bypassArmorRate).undeadMultiple(undeadMultiple);
|
||||
arrow.setBaseDamage(damage);
|
||||
arrow.setKnockback(0);
|
||||
arrow.setSilent(true);
|
||||
|
@ -166,7 +201,7 @@ public class FireMessage {
|
|||
arrow.pickup = AbstractArrow.Pickup.ALLOWED;
|
||||
|
||||
arrow.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ());
|
||||
arrow.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) (4 * power), (float) 0.02);
|
||||
arrow.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) (2 * power), 0);
|
||||
level.addFreshEntity(arrow);
|
||||
}
|
||||
|
||||
|
@ -212,7 +247,7 @@ public class FireMessage {
|
|||
CompoundTag tag = heldItem.getOrCreateTag();
|
||||
double damage;
|
||||
float headshot = (float) tag.getDouble("headshot");
|
||||
float velocity = 4 * (float) tag.getDouble("speed");
|
||||
float velocity = 2 * (float) tag.getDouble("speed");
|
||||
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.MONSTER_HUNTER.get(), heldItem);
|
||||
boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom;
|
||||
float bypassArmorRate = (float) heldItem.getOrCreateTag().getDouble("BypassesArmor");
|
||||
|
@ -248,7 +283,7 @@ public class FireMessage {
|
|||
|
||||
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);
|
||||
|
||||
damage = 0.008333333 * tag.getDouble("damage") * tag.getDouble("speed") * tag.getDouble("levelDamageMultiple");
|
||||
damage = 2 * 0.008333333 * tag.getDouble("damage") * tag.getDouble("speed") * tag.getDouble("levelDamageMultiple");
|
||||
projectile.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, velocity, 2.5f);
|
||||
projectile.damage((float) damage);
|
||||
player.level().addFreshEntity(projectile);
|
||||
|
|
|
@ -83,7 +83,6 @@ public class TooltipTool {
|
|||
|
||||
double perkbypassArmorRate = 0;
|
||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||
if (perk == null) return;
|
||||
|
||||
if (perk instanceof AmmoPerk ammoPerk) {
|
||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
{
|
||||
"zoom_speed": 1,
|
||||
"zoom": 2,
|
||||
"spread": 3,
|
||||
"zoomSpread": 0,
|
||||
"recoil_x": 0.005,
|
||||
"recoil_y": 0.003,
|
||||
"headshot": 1.5,
|
||||
|
|
Loading…
Add table
Reference in a new issue