波塞克添加曳光弹尾迹,适配银弹
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.Entity;
|
||||||
import net.minecraft.world.entity.EntityType;
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
import net.minecraft.world.entity.MobType;
|
||||||
import net.minecraft.world.entity.monster.Monster;
|
import net.minecraft.world.entity.monster.Monster;
|
||||||
import net.minecraft.world.entity.projectile.AbstractArrow;
|
import net.minecraft.world.entity.projectile.AbstractArrow;
|
||||||
import net.minecraft.world.entity.projectile.ItemSupplier;
|
import net.minecraft.world.entity.projectile.ItemSupplier;
|
||||||
|
@ -41,6 +42,7 @@ public class BocekArrowEntity extends AbstractArrow implements ItemSupplier {
|
||||||
|
|
||||||
private int monsterMultiplier = 0;
|
private int monsterMultiplier = 0;
|
||||||
private float bypassArmorRate = 0.0f;
|
private float bypassArmorRate = 0.0f;
|
||||||
|
private float undeadMultiple = 1.0f;
|
||||||
|
|
||||||
public BocekArrowEntity(EntityType<? extends BocekArrowEntity> type, Level world) {
|
public BocekArrowEntity(EntityType<? extends BocekArrowEntity> type, Level world) {
|
||||||
super(type, world);
|
super(type, world);
|
||||||
|
@ -64,6 +66,11 @@ public class BocekArrowEntity extends AbstractArrow implements ItemSupplier {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BocekArrowEntity undeadMultiple(float undeadMultiple) {
|
||||||
|
this.undeadMultiple = undeadMultiple;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Packet<ClientGamePacketListener> getAddEntityPacket() {
|
public Packet<ClientGamePacketListener> getAddEntityPacket() {
|
||||||
return NetworkHooks.getEntitySpawningPacket(this);
|
return NetworkHooks.getEntitySpawningPacket(this);
|
||||||
|
@ -156,9 +163,9 @@ public class BocekArrowEntity extends AbstractArrow implements ItemSupplier {
|
||||||
|
|
||||||
boolean hurt;
|
boolean hurt;
|
||||||
if (entity instanceof Monster) {
|
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 {
|
} else {
|
||||||
hurt = performHurt(entity, i, headshot);
|
hurt = performHurt(entity, i * (entity instanceof LivingEntity living && living.getMobType() == MobType.UNDEAD? this.undeadMultiple : 1), headshot);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hurt) {
|
if (!hurt) {
|
||||||
|
|
|
@ -280,7 +280,7 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa
|
||||||
double y = vec.y;
|
double y = vec.y;
|
||||||
double z = vec.z;
|
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++;
|
this.tickCount++;
|
||||||
if (this.tickCount > 40) {
|
if (this.tickCount > 40) {
|
||||||
|
|
|
@ -22,7 +22,8 @@ public class ProjectileEntityModel extends GeoModel<ProjectileEntity> {
|
||||||
Player player = Minecraft.getInstance().player;
|
Player player = Minecraft.getInstance().player;
|
||||||
if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zooming
|
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_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");
|
return new ResourceLocation(ModUtils.MODID, "geo/projectile_entity.geo.json");
|
||||||
} else {
|
} else {
|
||||||
return new ResourceLocation(ModUtils.MODID, "geo/projectile_entity2.geo.json");
|
return new ResourceLocation(ModUtils.MODID, "geo/projectile_entity2.geo.json");
|
||||||
|
|
|
@ -155,10 +155,45 @@ public class FireMessage {
|
||||||
Level level = player.level();
|
Level level = player.level();
|
||||||
if (!level.isClientSide()) {
|
if (!level.isClientSide()) {
|
||||||
int monsterMultiple = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.MONSTER_HUNTER.get(), stack);
|
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");
|
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.setBaseDamage(damage);
|
||||||
arrow.setKnockback(0);
|
arrow.setKnockback(0);
|
||||||
arrow.setSilent(true);
|
arrow.setSilent(true);
|
||||||
|
@ -166,7 +201,7 @@ public class FireMessage {
|
||||||
arrow.pickup = AbstractArrow.Pickup.ALLOWED;
|
arrow.pickup = AbstractArrow.Pickup.ALLOWED;
|
||||||
|
|
||||||
arrow.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ());
|
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);
|
level.addFreshEntity(arrow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,7 +247,7 @@ public class FireMessage {
|
||||||
CompoundTag tag = heldItem.getOrCreateTag();
|
CompoundTag tag = heldItem.getOrCreateTag();
|
||||||
double damage;
|
double damage;
|
||||||
float headshot = (float) tag.getDouble("headshot");
|
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);
|
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");
|
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);
|
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.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, velocity, 2.5f);
|
||||||
projectile.damage((float) damage);
|
projectile.damage((float) damage);
|
||||||
player.level().addFreshEntity(projectile);
|
player.level().addFreshEntity(projectile);
|
||||||
|
|
|
@ -83,7 +83,6 @@ public class TooltipTool {
|
||||||
|
|
||||||
double perkbypassArmorRate = 0;
|
double perkbypassArmorRate = 0;
|
||||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
||||||
if (perk == null) return;
|
|
||||||
|
|
||||||
if (perk instanceof AmmoPerk ammoPerk) {
|
if (perk instanceof AmmoPerk ammoPerk) {
|
||||||
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
int level = PerkHelper.getItemPerkLevel(perk, stack);
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"zoom_speed": 1,
|
"zoom_speed": 1,
|
||||||
"zoom": 2,
|
"zoom": 2,
|
||||||
|
"spread": 3,
|
||||||
|
"zoomSpread": 0,
|
||||||
"recoil_x": 0.005,
|
"recoil_x": 0.005,
|
||||||
"recoil_y": 0.003,
|
"recoil_y": 0.003,
|
||||||
"headshot": 1.5,
|
"headshot": 1.5,
|
||||||
|
|
Loading…
Add table
Reference in a new issue