diff --git a/src/main/java/com/atsuishio/superbwarfare/data/gun/DefaultGunData.java b/src/main/java/com/atsuishio/superbwarfare/data/gun/DefaultGunData.java index f88252f2e..983545c90 100644 --- a/src/main/java/com/atsuishio/superbwarfare/data/gun/DefaultGunData.java +++ b/src/main/java/com/atsuishio/superbwarfare/data/gun/DefaultGunData.java @@ -25,8 +25,6 @@ public class DefaultGunData { public double spread; @SerializedName("Damage") public double damage; - @SerializedName("MeleeDamage") - public double meleeDamage; @SerializedName("Headshot") public double headshot = 1.5; @SerializedName("Velocity") @@ -34,6 +32,13 @@ public class DefaultGunData { @SerializedName("Magazine") public int magazine; + @SerializedName("MeleeDamage") + public double meleeDamage; + @SerializedName("MeleeDuration") + public int meleeDuration = 26; + @SerializedName("MeleeDamageTime") + public int meleeDamageTime = 6; + @SerializedName("Projectile") public ProjectileInfo projectile = new ProjectileInfo(); diff --git a/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java b/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java index a5fbcab07..564af459c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java +++ b/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java @@ -164,6 +164,14 @@ public class GunData { return defaultGunData().meleeDamage; } + public int meleeDuration() { + return Math.max(0, defaultGunData().meleeDuration); + } + + public int meleeDamageTime() { + return Math.min(meleeDuration(), defaultGunData().meleeDamageTime); + } + public double explosionDamage() { return defaultGunData().explosionDamage; } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 9eab4045f..2a7e10696 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -419,11 +419,11 @@ public class ClientEventHandler { && !data.reloading() && !data.charging() && !player.getCooldowns().isOnCooldown(stack.getItem()) ) { - gunMelee = 36; - cantFireTime = 40; - player.playSound(SoundEvents.PLAYER_ATTACK_SWEEP, 1f, 1); + gunMelee = data.meleeDuration(); + cantFireTime = gunMelee + 4; } - if (gunMelee == 22) { + if (gunMelee == data.meleeDuration() - data.meleeDamageTime()) { + player.playSound(SoundEvents.PLAYER_ATTACK_SWEEP, 1f, 1); Entity lookingEntity = TraceTool.findMeleeEntity(player, player.entityInteractionRange()); if (lookingEntity != null) { PacketDistributor.sendToServer(new MeleeAttackMessage(lookingEntity.getUUID())); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java index bd1a72c3a..aa5162ceb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -312,7 +312,7 @@ public abstract class GunItem extends Item implements CustomRendererItem { * @param stack 武器物品 */ public boolean hasMeleeAttack(ItemStack stack) { - return false; + return GunData.from(stack).meleeDamage() > 0; } /** diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java index 8f5f2dc92..0f8895785 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java @@ -179,11 +179,6 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, EnergyStorag return Optional.of(new SecondaryCataclysmImageComponent(pStack)); } - @Override - public boolean hasMeleeAttack(ItemStack stack) { - return true; - } - @Override public String getAmmoDisplayName(GunData data) { return "40mm Grenade";