diff --git a/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java index 1293f9b0d..413a5ff47 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java @@ -361,6 +361,7 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa if (beast && entity instanceof LivingEntity living) { if (living.isDeadOrDying()) return; + if (living instanceof SenpaiEntity || living instanceof Target1Entity) return; if (this.shooter instanceof ServerPlayer player) { ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); diff --git a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java index 961440fda..f63b4503f 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java @@ -300,6 +300,14 @@ public class GunEventHandler { } } + var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); + + if (perk == ModPerks.BEAST_BULLET.get()) { + if (player instanceof ServerPlayer serverPlayer) { + SoundTool.playLocalSound(serverPlayer, ModSounds.HENG.get(), 5, 1); + } + } + SoundEvent sound1p = ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(ModUtils.MODID, name + "_fire_1p")); if (sound1p != null && player instanceof ServerPlayer serverPlayer) { SoundTool.playLocalSound(serverPlayer, sound1p, 2f, 1f); diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java b/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java index b71fee193..f1edb7f59 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java @@ -23,12 +23,12 @@ public class ModPerks { public static final DeferredRegister PERKS = DeferredRegister.create(new ResourceLocation(ModUtils.MODID, "perk"), ModUtils.MODID); public static final RegistryObject SILVER_BULLET = PERKS.register("silver_bullet", - () -> new AmmoPerk(new AmmoPerk.Builder("silver_bullet", Perk.Type.AMMO).bypassArmorRate(0.1f).rgb(87, 166, 219))); - public static final RegistryObject BEAST_BULLET = PERKS.register("beast_bullet", - () -> new AmmoPerk(new AmmoPerk.Builder("beast_bullet", Perk.Type.AMMO).bypassArmorRate(0.0f).rgb(134, 65, 14))); + () -> new AmmoPerk(new AmmoPerk.Builder("silver_bullet", Perk.Type.AMMO).bypassArmorRate(0.05f).rgb(87, 166, 219))); public static final RegistryObject POISONOUS_BULLET = PERKS.register("poisonous_bullet", () -> new AmmoPerk(new AmmoPerk.Builder("poisonous_bullet", Perk.Type.AMMO).bypassArmorRate(0.0f).rgb(48, 131, 6) .mobEffect(() -> MobEffects.POISON))); + public static final RegistryObject BEAST_BULLET = PERKS.register("beast_bullet", + () -> new AmmoPerk(new AmmoPerk.Builder("beast_bullet", Perk.Type.AMMO).bypassArmorRate(0.0f).rgb(134, 65, 14))); public static final RegistryObject HEAL_CLIP = PERKS.register("heal_clip", () -> new Perk("heal_clip", Perk.Type.FUNCTIONAL)); public static final RegistryObject FOURTH_TIMES_CHARM = PERKS.register("fourth_times_charm", () -> new Perk("fourth_times_charm", Perk.Type.FUNCTIONAL)); diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModSounds.java b/src/main/java/net/mcreator/superbwarfare/init/ModSounds.java index 33e701eec..4cee60b65 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModSounds.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModSounds.java @@ -40,6 +40,7 @@ public class ModSounds { public static final RegistryObject STEP = REGISTRY.register("step", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "step"))); public static final RegistryObject GROWL = REGISTRY.register("growl", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "growl"))); public static final RegistryObject IDLE = REGISTRY.register("idle", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "idle"))); + public static final RegistryObject HENG = REGISTRY.register("heng", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "heng"))); public static final RegistryObject M_79_FIRE_1P = REGISTRY.register("m_79_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "m_79_fire_1p"))); public static final RegistryObject M_79_FIRE_3P = REGISTRY.register("m_79_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "m_79_fire_3p"))); public static final RegistryObject M_79_FAR = REGISTRY.register("m_79_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "m_79_far"))); 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 f8eb56568..0314ad5cf 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java @@ -2,11 +2,11 @@ package net.mcreator.superbwarfare.network.message; import net.mcreator.superbwarfare.entity.*; import net.mcreator.superbwarfare.event.GunEventHandler; -import net.mcreator.superbwarfare.init.ModEnchantments; -import net.mcreator.superbwarfare.init.ModItems; -import net.mcreator.superbwarfare.init.ModSounds; -import net.mcreator.superbwarfare.init.ModTags; +import net.mcreator.superbwarfare.init.*; import net.mcreator.superbwarfare.network.ModVariables; +import net.mcreator.superbwarfare.perk.AmmoPerk; +import net.mcreator.superbwarfare.perk.Perk; +import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.tools.ItemNBTTool; import net.mcreator.superbwarfare.tools.ParticleTool; import net.mcreator.superbwarfare.tools.SoundTool; @@ -16,6 +16,8 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.item.ItemStack; @@ -215,14 +217,31 @@ public class FireMessage { 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()) + + ProjectileEntity projectile = new ProjectileEntity(player.level()) .shooter(player) .headShot(headshot) - .monsterMultiple(monsterMultiple) .zoom(zoom) - .bypassArmorRate(bypassArmorRate); + .monsterMultiple(monsterMultiple); - if (tag.getBoolean("beast")) { + var perk = PerkHelper.getPerkByType(heldItem, Perk.Type.AMMO); + if (perk instanceof AmmoPerk ammoPerk) { + bypassArmorRate += ammoPerk.bypassArmorRate; + projectile.setRGB(ammoPerk.rgb); + + if (ammoPerk.mobEffect.get() != null) { + int level = PerkHelper.getItemPerkLevel(perk, heldItem); + projectile.effect(() -> new MobEffectInstance(ammoPerk.mobEffect.get(), 100, level - 1)); + } + } + bypassArmorRate = Mth.clamp(bypassArmorRate, 0, 1); + + projectile.bypassArmorRate(bypassArmorRate); + + if (perk == ModPerks.SILVER_BULLET.get()) { + int level = PerkHelper.getItemPerkLevel(perk, heldItem); + projectile.undeadMultiple(1.0f + 0.5f * level); + } else if (perk == ModPerks.BEAST_BULLET.get()) { projectile.beast(); } diff --git a/src/main/resources/assets/superbwarfare/models/item/poisonous_bullet.json b/src/main/resources/assets/superbwarfare/models/item/poisonous_bullet.json new file mode 100644 index 000000000..090e67af0 --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/item/poisonous_bullet.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "superbwarfare:item/perk/poisonous_bullet" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/sounds.json b/src/main/resources/assets/superbwarfare/sounds.json index 10fb138ab..1d816afd5 100644 --- a/src/main/resources/assets/superbwarfare/sounds.json +++ b/src/main/resources/assets/superbwarfare/sounds.json @@ -1793,5 +1793,13 @@ "stream": false } ] + }, + "heng": { + "sounds": [ + { + "name": "superbwarfare:heng", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/textures/item/perk/fourth_times_charm.png b/src/main/resources/assets/superbwarfare/textures/item/perk/fourth_times_charm.png index 017cd3d1d..e3f831987 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/item/perk/fourth_times_charm.png and b/src/main/resources/assets/superbwarfare/textures/item/perk/fourth_times_charm.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/item/perk/gutshot_straight.png b/src/main/resources/assets/superbwarfare/textures/item/perk/gutshot_straight.png index 15ffcb533..b32a47293 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/item/perk/gutshot_straight.png and b/src/main/resources/assets/superbwarfare/textures/item/perk/gutshot_straight.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/item/perk/heal_clip.png b/src/main/resources/assets/superbwarfare/textures/item/perk/heal_clip.png index 15caa8088..95cfba94c 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/item/perk/heal_clip.png and b/src/main/resources/assets/superbwarfare/textures/item/perk/heal_clip.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/item/perk/kill_clip.png b/src/main/resources/assets/superbwarfare/textures/item/perk/kill_clip.png index 2e3d49274..3a60eb40b 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/item/perk/kill_clip.png and b/src/main/resources/assets/superbwarfare/textures/item/perk/kill_clip.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/item/perk/killing_tally.png b/src/main/resources/assets/superbwarfare/textures/item/perk/killing_tally.png index 04968fef9..b12875358 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/item/perk/killing_tally.png and b/src/main/resources/assets/superbwarfare/textures/item/perk/killing_tally.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/item/perk/poisonous_bullet.png b/src/main/resources/assets/superbwarfare/textures/item/perk/poisonous_bullet.png new file mode 100644 index 000000000..0f94a3706 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/item/perk/poisonous_bullet.png differ