From 6fe095c170dc5ac03ccd5a6a68fa315e2ed7c824 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Thu, 1 Aug 2024 14:31:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=B4=E5=87=BB=E8=A6=81?= =?UTF-8?q?=E5=AE=B3=E9=99=84=E9=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enchantment/GutshotStraight.java | 35 +++++++++++++++++++ .../entity/ProjectileEntity.java | 34 +++++++++++------- .../superbwarfare/event/GunEventHandler.java | 19 +++++----- .../event/LivingEventHandler.java | 28 +++++++++++++++ .../superbwarfare/init/ModEnchantments.java | 2 +- .../mcreator/superbwarfare/init/ModTags.java | 3 +- .../network/message/FireMessage.java | 10 +++--- .../tools/ExtendedEntityRayTraceResult.java | 2 +- .../assets/superbwarfare/lang/en_us.json | 2 ++ .../assets/superbwarfare/lang/zh_cn.json | 2 ++ .../tags/items/can_shoot_bullet.json | 25 +++++++++++++ 11 files changed, 135 insertions(+), 27 deletions(-) create mode 100644 src/main/java/net/mcreator/superbwarfare/enchantment/GutshotStraight.java create mode 100644 src/main/resources/data/superbwarfare/tags/items/can_shoot_bullet.json diff --git a/src/main/java/net/mcreator/superbwarfare/enchantment/GutshotStraight.java b/src/main/java/net/mcreator/superbwarfare/enchantment/GutshotStraight.java new file mode 100644 index 000000000..51662f1c0 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/enchantment/GutshotStraight.java @@ -0,0 +1,35 @@ +package net.mcreator.superbwarfare.enchantment; + +import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.init.ModTags; +import net.mcreator.superbwarfare.tools.EnchantmentCategoryTool; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; + +public class GutshotStraight extends Enchantment { + + public GutshotStraight() { + super(Rarity.UNCOMMON, EnchantmentCategoryTool.GUN, new EquipmentSlot[]{EquipmentSlot.MAINHAND}); + } + + @Override + public int getMaxLevel() { + return super.getMaxLevel(); + } + + @Override + public int getMinCost(int pLevel) { + return 13 + 5 * pLevel; + } + + @Override + public int getMaxCost(int pLevel) { + return getMinCost(pLevel) + 20; + } + + @Override + public boolean canApplyAtEnchantingTable(ItemStack itemstack) { + return itemstack.is(ModTags.Items.CAN_SHOOT_BULLET) && !itemstack.is(ModItems.MINIGUN.get()); + } +} diff --git a/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java index 4c1d49cbc..2eb31eecd 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/ProjectileEntity.java @@ -79,6 +79,7 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa private int monster_multiple = 0; private float legShot = 0.5f; private boolean beast = false; + private boolean zoom = false; public ProjectileEntity(EntityType p_i50159_1_, Level p_i50159_2_) { super(p_i50159_1_, p_i50159_2_); @@ -107,8 +108,8 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa return this; } - public ProjectileEntity monster_multiple(int monster_multiple) { - this.monster_multiple = monster_multiple; + public ProjectileEntity monsterMultiple(int monsterMultiple) { + this.monster_multiple = monsterMultiple; return this; } @@ -122,6 +123,11 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa return this; } + public ProjectileEntity zoom(boolean zoom) { + this.zoom = zoom; + return this; + } + @Nullable protected EntityResult findEntityOnPath(Vec3 startVec, Vec3 endVec) { Vec3 hitVec = null; @@ -153,7 +159,7 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa hitEntity = entity; closestDistance = distanceToHit; headshot = result.isHeadshot(); - legshot = result.isLegshot(); + legshot = result.isLegShot(); } } return hitEntity != null ? new EntityResult(hitEntity, hitVec, headshot, legshot) : null; @@ -304,6 +310,7 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa protected void onProjectileTick() { } + private void onHit(HitResult result) { if (result instanceof BlockHitResult blockHitResult) { if (blockHitResult.getType() == HitResult.Type.MISS) { @@ -413,15 +420,14 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa } if (entity instanceof LivingEntity living) { - if (living instanceof Player player && player.isCreative()){ + if (living instanceof Player player && player.isCreative()) { return; } if (!living.level().isClientSide()) { - living.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN,20,2,false,false)); + living.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 20, 2, false, false)); } } - } - else { + } else { if (!this.shooter.level().isClientSide() && this.shooter instanceof ServerPlayer player) { 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())); @@ -568,13 +574,13 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa private final Entity entity; private final Vec3 hitVec; private final boolean headshot; - private final boolean legshot; + private final boolean legShot; - public EntityResult(Entity entity, Vec3 hitVec, boolean headshot, boolean legshot) { + public EntityResult(Entity entity, Vec3 hitVec, boolean headshot, boolean legShot) { this.entity = entity; this.hitVec = hitVec; this.headshot = headshot; - this.legshot = legshot; + this.legShot = legShot; } /** @@ -598,8 +604,8 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa return this.headshot; } - public boolean isLegshot() { - return this.legshot; + public boolean isLegShot() { + return this.legShot; } } @@ -624,4 +630,8 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa public AnimatableInstanceCache getAnimatableInstanceCache() { return this.cache; } + + public boolean isZoom() { + return this.zoom; + } } diff --git a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java index 2fe72225f..9dd1ac8be 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java @@ -86,10 +86,10 @@ public class GunEventHandler { player.getPersistentData().putBoolean("firing", false); } - int burst_cooldown = 0; + int burstCooldown = 0; if (mode == 1) { stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1)); - burst_cooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? interval + 4 : 0; + burstCooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? interval + 4 : 0; } if (stack.getOrCreateTag().getDouble("animindex") == 1) { @@ -149,10 +149,10 @@ public class GunEventHandler { stack.getOrCreateTag().putDouble("chamber_rot", 20); } - int zoom_add_cooldown = 0; + int zoomAddCooldown = 0; if (stack.getItem() == ModItems.MARLIN.get()) { if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zooming) { - zoom_add_cooldown = 5; + zoomAddCooldown = 5; stack.getOrCreateTag().putDouble("marlin_animation_time", 15); stack.getOrCreateTag().putBoolean("fastfiring", false); } else { @@ -161,7 +161,7 @@ public class GunEventHandler { } } - int cooldown = interval + (int) stack.getOrCreateTag().getDouble("fire_sequence") - (int) stack.getOrCreateTag().getDouble("fire_increase") + burst_cooldown + zoom_add_cooldown; + int cooldown = interval + (int) stack.getOrCreateTag().getDouble("fire_sequence") - (int) stack.getOrCreateTag().getDouble("fire_increase") + burstCooldown + zoomAddCooldown; player.getCooldowns().addCooldown(stack.getItem(), cooldown); for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) { @@ -343,19 +343,22 @@ public class GunEventHandler { if (!player.level().isClientSide()) { float headshot = (float) heldItem.getOrCreateTag().getDouble("headshot"); - int monster_multiple = 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"); + boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom; + ProjectileEntity projectile = new ProjectileEntity(player.level()) .shooter(player) .damage(damage) - .headShot(headshot); + .headShot(headshot) + .zoom(zoom); if (heldItem.getOrCreateTag().getBoolean("beast")) { projectile.beast(); } - projectile.monster_multiple(monster_multiple); + projectile.monsterMultiple(monsterMultiple); 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.shoot(player.getLookAngle().x, player.getLookAngle().y + 0.0005f, player.getLookAngle().z, 1 * (float) heldItem.getOrCreateTag().getDouble("velocity"), diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index fa2f4adf5..804605ede 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -1,6 +1,7 @@ package net.mcreator.superbwarfare.event; import net.mcreator.superbwarfare.ModUtils; +import net.mcreator.superbwarfare.entity.ProjectileEntity; import net.mcreator.superbwarfare.entity.Target1Entity; import net.mcreator.superbwarfare.init.*; import net.mcreator.superbwarfare.item.gun.GunItem; @@ -40,6 +41,7 @@ public class LivingEventHandler { handleKillClipDamage(event); renderDamageIndicator(event); + handleGutshotStraightDamage(event); reduceBulletDamage(event, event.getSource(), event.getEntity(), event.getSource().getEntity(), event.getAmount()); } @@ -312,4 +314,30 @@ public class LivingEventHandler { } } } + + private static void handleGutshotStraightDamage(LivingHurtEvent event) { + DamageSource source = event.getSource(); + if (!source.is(ModDamageTypes.GUN_FIRE)) { + return; + } + + Entity directSource = source.getDirectEntity(); + if (directSource instanceof ProjectileEntity projectile && projectile.getShooter() instanceof Player player) { + if (!projectile.isZoom()) { + return; + } + + ItemStack stack = player.getMainHandItem(); + if (!stack.is(ModTags.Items.GUN)) { + return; + } + + int enchantmentLevel = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.GUTSHOT_STRAIGHT.get(), stack); + if (enchantmentLevel == 0) { + return; + } + + event.setAmount(event.getAmount() * 1.2f); + } + } } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java b/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java index 43e1a0ce7..481067f5d 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java @@ -1,4 +1,3 @@ - package net.mcreator.superbwarfare.init; import net.mcreator.superbwarfare.ModUtils; @@ -18,4 +17,5 @@ public class ModEnchantments { public static final RegistryObject MONSTER_HUNTER = REGISTRY.register("monster_hunter", MonsterHunter::new); public static final RegistryObject HEAL_CLIP = REGISTRY.register("heal_clip", HealClip::new); public static final RegistryObject KILL_CLIP = REGISTRY.register("kill_clip", KillClip::new); + public static final RegistryObject GUTSHOT_STRAIGHT = REGISTRY.register("gutshot_straight", GutshotStraight::new); } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModTags.java b/src/main/java/net/mcreator/superbwarfare/init/ModTags.java index 01e5e9f3c..3ab28d4e9 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModTags.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModTags.java @@ -6,7 +6,6 @@ import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; - public class ModTags { public static class Items { @@ -20,7 +19,9 @@ public class ModTags { public static final TagKey LEGENDARY_GUN = tag("legendary_gun"); public static final TagKey SPECIAL_GUN = tag("special_gun"); public static final TagKey OPEN_BOLT = tag("open_bolt"); + public static final TagKey CAN_RELOAD = tag("can_reload"); + public static final TagKey CAN_SHOOT_BULLET = tag("can_shoot_bullet"); private static TagKey tag(String name) { return ItemTags.create(new ResourceLocation(ModUtils.MODID, name)); 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 a3b5d46c5..13c7419a8 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java @@ -207,17 +207,19 @@ public class FireMessage { double damage; float headshot = (float) tag.getDouble("headshot"); float velocity = 4 * (float) tag.getDouble("speed"); - int monster_multiple = 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; var projectile = new ProjectileEntity(player.level()) .shooter(player) - .headShot(headshot); + .headShot(headshot) + .monsterMultiple(monsterMultiple) + .zoom(zoom); + if (tag.getBoolean("beast")) { projectile.beast(); } - projectile.monster_multiple(monster_multiple); - 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("damageadd"); diff --git a/src/main/java/net/mcreator/superbwarfare/tools/ExtendedEntityRayTraceResult.java b/src/main/java/net/mcreator/superbwarfare/tools/ExtendedEntityRayTraceResult.java index deb8b52d7..914a63e3e 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/ExtendedEntityRayTraceResult.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/ExtendedEntityRayTraceResult.java @@ -13,7 +13,7 @@ public class ExtendedEntityRayTraceResult extends EntityHitResult { public ExtendedEntityRayTraceResult(ProjectileEntity.EntityResult result) { super(result.getEntity(), result.getHitPos()); this.headshot = result.isHeadshot(); - this.legshot = result.isLegshot(); + this.legshot = result.isLegShot(); } public boolean isHeadshot() { diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index b60a50132..3e004e474 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -245,6 +245,8 @@ "enchantment.superbwarfare.heal_clip.desc": "Reloading after dealing a final blow will heal you and your nearby allies", "enchantment.superbwarfare.kill_clip": "Kill Clip", "enchantment.superbwarfare.kill_clip.desc": "Increases the damage of weapon after dealing a final blow", + "enchantment.superbwarfare.gutshot_straight": "Gutshot Straight", + "enchantment.superbwarfare.gutshot_straight.desc": "Aiming down sights increases body shot damage", "des.superbwarfare.sensitivity": "Current Sensitivity of This Gun: %1$s", "des.superbwarfare.need_bolt_action": "[ Need Bolt Action ]", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index b16920e47..f3a12cfaa 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -245,6 +245,8 @@ "enchantment.superbwarfare.heal_clip.desc": "最后一击后短时间内填装,可治疗自身和附近队友", "enchantment.superbwarfare.kill_clip": "杀戮弹匣", "enchantment.superbwarfare.kill_clip.desc": "完成击杀后填装可提升武器伤害", + "enchantment.superbwarfare.gutshot_straight": "直击要害", + "enchantment.superbwarfare.gutshot_straight.desc": "瞄准时增加身体射击伤害", "des.superbwarfare.sensitivity": "当前枪械的灵敏度为:%1$s", "des.superbwarfare.need_bolt_action": "【需要拉栓】", diff --git a/src/main/resources/data/superbwarfare/tags/items/can_shoot_bullet.json b/src/main/resources/data/superbwarfare/tags/items/can_shoot_bullet.json new file mode 100644 index 000000000..9968f80eb --- /dev/null +++ b/src/main/resources/data/superbwarfare/tags/items/can_shoot_bullet.json @@ -0,0 +1,25 @@ +{ + "replace": false, + "values": [ + "superbwarfare:trachelium", + "superbwarfare:hunting_rifle", + "superbwarfare:abekiri", + "superbwarfare:devotion", + "superbwarfare:m_4", + "superbwarfare:aa_12", + "superbwarfare:hk_416", + "superbwarfare:rpk", + "superbwarfare:sks", + "superbwarfare:ntw_20", + "superbwarfare:vector", + "superbwarfare:minigun", + "superbwarfare:mk_14", + "superbwarfare:sentinel", + "superbwarfare:m_60", + "superbwarfare:svd", + "superbwarfare:marlin", + "superbwarfare:m_870", + "superbwarfare:m_98b", + "superbwarfare:ak_47" + ] +} \ No newline at end of file