diff --git a/src/main/java/net/mcreator/superbwarfare/entity/BocekArrowEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/BocekArrowEntity.java index f1125d686..6e7a3fb2c 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/BocekArrowEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/BocekArrowEntity.java @@ -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 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 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) { diff --git a/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java index ace7e47e8..892137b85 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java @@ -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) { diff --git a/src/main/java/net/mcreator/superbwarfare/entity/model/ProjectileEntityModel.java b/src/main/java/net/mcreator/superbwarfare/entity/model/ProjectileEntityModel.java index 1a89e65e2..9b5d8225d 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/model/ProjectileEntityModel.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/model/ProjectileEntityModel.java @@ -22,7 +22,8 @@ public class ProjectileEntityModel extends GeoModel { 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"); diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java index 32122262c..2fb0e6e13 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java @@ -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); diff --git a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java index 7fee670e7..69abb1183 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java @@ -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); diff --git a/src/main/resources/data/superbwarfare/guns/bocek.json b/src/main/resources/data/superbwarfare/guns/bocek.json index c1187f711..72731f53b 100644 --- a/src/main/resources/data/superbwarfare/guns/bocek.json +++ b/src/main/resources/data/superbwarfare/guns/bocek.json @@ -1,6 +1,8 @@ { "zoom_speed": 1, "zoom": 2, + "spread": 3, + "zoomSpread": 0, "recoil_x": 0.005, "recoil_y": 0.003, "headshot": 1.5,