From 62e0a13c2361abf8e15ed434224123316fce56c2 Mon Sep 17 00:00:00 2001 From: Phylogeny Date: Sat, 24 Nov 2018 05:01:41 -0800 Subject: [PATCH 1/6] Prevented unnecessary setting of sounds to 100% of their current volume. --- .../java/com/mrcrayfish/guns/client/event/SoundEvents.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java b/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java index b52d453fc..a57ef8b00 100644 --- a/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java +++ b/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java @@ -75,6 +75,9 @@ public static void deafenPlayer(ClientTickEvent event) } } + if (GunConfig.SERVER.stunGrenades.deafen.soundPercentageSynced == 1) + return; + // Access the sound manager's sound system and list of playing sounds SoundSystem soundSystem; Map playingSounds; @@ -128,7 +131,8 @@ public static void lowerInitialVolume(PlaySoundEvent event) if (soundManager == null) soundManager = event.getManager(); - if (!isDeafened || Minecraft.getMinecraft().player == null || event.getSound() instanceof ITickableSound) + if (!isDeafened || GunConfig.SERVER.stunGrenades.deafen.soundPercentageSynced == 1 + || Minecraft.getMinecraft().player == null || event.getSound() instanceof ITickableSound) return; // Exempt initial explosion from muting From 34be38df82f9eec1fe030eae73ed9c655588910f Mon Sep 17 00:00:00 2001 From: Phylogeny Date: Sat, 24 Nov 2018 05:01:51 -0800 Subject: [PATCH 2/6] Formatting. --- src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java b/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java index a57ef8b00..7fd2f9f59 100644 --- a/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java +++ b/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java @@ -111,7 +111,7 @@ public static void deafenPlayer(ClientTickEvent event) soundSystem.setVolume(id, getMutedVolume(effect.getDuration(), SOUND_VOLUMES.get(id))); } } - catch (ConcurrentModificationException e) {} //SoundManager#playingSounds is accessed from another thread, so it's key set iterator can throw a CME + catch (ConcurrentModificationException e) {} // SoundManager#playingSounds is accessed from another thread, so it's key set iterator can throw a CME isDeafened = true; } else if (isDeafened) From 53d89aa12505b0b05ab898ec9a236ea24700a1dd Mon Sep 17 00:00:00 2001 From: Phylogeny Date: Sat, 24 Nov 2018 05:02:33 -0800 Subject: [PATCH 3/6] Removed unused import. --- src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java b/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java index 7fd2f9f59..da789e1cc 100644 --- a/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java +++ b/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java @@ -9,7 +9,6 @@ import javax.annotation.Nullable; import com.mrcrayfish.guns.GunConfig; -import com.mrcrayfish.guns.MrCrayfishGunMod; import com.mrcrayfish.guns.Reference; import com.mrcrayfish.guns.client.audio.SoundRinging; import com.mrcrayfish.guns.init.ModPotions; From 0f4f6fae02ba616a38148073a3fb8bc0c0cc20f3 Mon Sep 17 00:00:00 2001 From: Phylogeny Date: Sat, 24 Nov 2018 05:52:08 -0800 Subject: [PATCH 4/6] Added ability to mute all games sounds when deafened, as well as a corresponding config. --- .../java/com/mrcrayfish/guns/GunConfig.java | 13 ++++++++- .../guns/client/event/SoundEvents.java | 27 +++++++++++++++++-- src/main/resources/assets/cgm/lang/en_us.lang | 4 ++- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mrcrayfish/guns/GunConfig.java b/src/main/java/com/mrcrayfish/guns/GunConfig.java index 996d731c3..f95de3e8f 100644 --- a/src/main/java/com/mrcrayfish/guns/GunConfig.java +++ b/src/main/java/com/mrcrayfish/guns/GunConfig.java @@ -294,13 +294,20 @@ public static class Deafen public EffectCriteria criteria = new EffectCriteria(15, 280, 100, 360, 0.75, false); @Config.Name("Sound Percentage") - @Config.Comment("Volume of most game sounds when deafened will play at this percent, before eventually fading back to %100.") + @Config.Comment("Volume of game sounds when deafened will play at this percent, before eventually fading back to %100.") @Config.LangKey(PREFIX + ".sound.percentage") @Config.RangeDouble(min = 0, max = 1) @Config.RequiresWorldRestart public double soundPercentage = 0.05; public static float soundPercentageSynced = 0; + @Config.Name("Effect All Sounds") + @Config.Comment("If true, all sounds will be reduced when deafened -- even the ringing sound and the sound of the initial deafening explosion.") + @Config.LangKey(PREFIX + ".sound.effect_all") + @Config.RequiresWorldRestart + public boolean effectAllSounds = false; + public static boolean effectAllSoundsSynced = true; + @Config.Name("Sound Fade Threshold") @Config.Comment("After the duration drops to this many ticks, the ringing volume will gradually fade to 0 and other sound volumes will fade back to %100.") @Config.LangKey(PREFIX + ".sound.fade") @@ -378,6 +385,7 @@ public static class SyncedData private ImmutableMap serverGunMap; private int blindnessAlphaOverlay, alphaFadeThreshold, soundFadeThreshold; private float soundPercentage, ringVolume; + private boolean effectAllSounds; public void toBytes(ByteBuf buffer) { @@ -393,6 +401,7 @@ public void toBytes(ByteBuf buffer) buffer.writeFloat((float) GunConfig.SERVER.stunGrenades.deafen.soundPercentage); buffer.writeInt(GunConfig.SERVER.stunGrenades.deafen.soundFadeThreshold); buffer.writeFloat((float) GunConfig.SERVER.stunGrenades.deafen.ringVolume); + buffer.writeBoolean(GunConfig.SERVER.stunGrenades.deafen.effectAllSounds); } public void fromBytes(ByteBuf buffer) @@ -413,6 +422,7 @@ public void fromBytes(ByteBuf buffer) soundPercentage = buffer.readFloat(); soundFadeThreshold = buffer.readInt(); ringVolume = buffer.readFloat(); + effectAllSounds = buffer.readBoolean(); } public void syncClientToServer() @@ -423,6 +433,7 @@ public void syncClientToServer() GunConfig.SERVER.stunGrenades.deafen.soundPercentageSynced = soundPercentage; GunConfig.SERVER.stunGrenades.deafen.soundFadeThresholdSynced = soundFadeThreshold; GunConfig.SERVER.stunGrenades.deafen.ringVolumeSynced = ringVolume; + GunConfig.SERVER.stunGrenades.deafen.effectAllSoundsSynced = effectAllSounds; } } diff --git a/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java b/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java index da789e1cc..138cd82fa 100644 --- a/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java +++ b/src/main/java/com/mrcrayfish/guns/client/event/SoundEvents.java @@ -42,6 +42,7 @@ public class SoundEvents private static Field soundSystem, playingSounds; private static SoundManager soundManager; private static SoundRinging ringing; + private static float masterVolume = -1; public static void initReflection() { @@ -74,9 +75,31 @@ public static void deafenPlayer(ClientTickEvent event) } } - if (GunConfig.SERVER.stunGrenades.deafen.soundPercentageSynced == 1) + float percent = GunConfig.SERVER.stunGrenades.deafen.soundPercentageSynced; + if (percent == 1) return; + if (GunConfig.SERVER.stunGrenades.deafen.effectAllSoundsSynced) + { + // Mute all game sounds -- including the ringing sound and the sound of the initial deafening explosion + if (effect != null) + { + if (masterVolume < 0) + masterVolume = Minecraft.getMinecraft().gameSettings.getSoundLevel(SoundCategory.MASTER); + + Minecraft.getMinecraft().getSoundHandler().setSoundLevel(SoundCategory.MASTER, getMutedVolume(effect.getDuration(), masterVolume)); + isDeafened = true; + } + else if (isDeafened) + { + // Restore sound levels to initial values + isDeafened = false; + Minecraft.getMinecraft().getSoundHandler().setSoundLevel(SoundCategory.MASTER, masterVolume); + masterVolume = -1; + } + return; + } + // Access the sound manager's sound system and list of playing sounds SoundSystem soundSystem; Map playingSounds; @@ -130,7 +153,7 @@ public static void lowerInitialVolume(PlaySoundEvent event) if (soundManager == null) soundManager = event.getManager(); - if (!isDeafened || GunConfig.SERVER.stunGrenades.deafen.soundPercentageSynced == 1 + if (!isDeafened || GunConfig.SERVER.stunGrenades.deafen.soundPercentageSynced == 1 || GunConfig.SERVER.stunGrenades.deafen.effectAllSoundsSynced || Minecraft.getMinecraft().player == null || event.getSound() instanceof ITickableSound) return; diff --git a/src/main/resources/assets/cgm/lang/en_us.lang b/src/main/resources/assets/cgm/lang/en_us.lang index a75c58241..3b11bdfdc 100644 --- a/src/main/resources/assets/cgm/lang/en_us.lang +++ b/src/main/resources/assets/cgm/lang/en_us.lang @@ -80,7 +80,9 @@ config.cgm.server.grenade.stun.blind.overlay.fade.tooltip=Transparency of the ov config.cgm.server.grenade.stun.effect_criteria.deafen=Effect Criteria config.cgm.server.grenade.stun.effect_criteria.deafen.tooltip=Criteria that determines the presence/absence and duration of the deafening effect. config.cgm.server.grenade.stun.deafen.sound.percentage=Sound Percentage -config.cgm.server.grenade.stun.deafen.sound.percentage.tooltip=Volume of most game sounds when deafened will play at this percent, before eventually fading back to %100. +config.cgm.server.grenade.stun.deafen.sound.percentage.tooltip=Volume of game sounds when deafened will play at this percent, before eventually fading back to %100. +config.cgm.server.grenade.stun.deafen.sound.effect_all=Effect All Sounds +config.cgm.server.grenade.stun.deafen.sound.effect_all.tooltip=If true, all sounds will be reduced when deafened -- even the ringing sound and the sound of the initial deafening explosion. config.cgm.server.grenade.stun.deafen.sound.fade=Sound Fade Threshold config.cgm.server.grenade.stun.deafen.sound.fade.tooltip=After the duration drops to this many ticks, the ringing volume will gradually fade to 0 and other sound volumes will fade back to %100. config.cgm.server.grenade.stun.deafen.sound.ring=Ring Volume From 09510fcfd4f423856d4b61016b17211e96b3f8ee Mon Sep 17 00:00:00 2001 From: Phylogeny Date: Sat, 24 Nov 2018 06:44:55 -0800 Subject: [PATCH 5/6] Centered stun grenade entity model within hitbox. --- .../guns/client/render/entity/RenderGrenade.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mrcrayfish/guns/client/render/entity/RenderGrenade.java b/src/main/java/com/mrcrayfish/guns/client/render/entity/RenderGrenade.java index 5e1caef6f..5a11225fc 100644 --- a/src/main/java/com/mrcrayfish/guns/client/render/entity/RenderGrenade.java +++ b/src/main/java/com/mrcrayfish/guns/client/render/entity/RenderGrenade.java @@ -14,7 +14,6 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.Vec3d; import org.lwjgl.opengl.GL11; import javax.annotation.Nullable; @@ -53,9 +52,10 @@ public void doRender(EntityGrenade entity, double x, double y, double z, float e if(entity instanceof EntityGrenadeStun) { - GlStateManager.translate(0, 0.3, 0); - GlStateManager.rotate(-90F, 0, 0, 1); - GlStateManager.translate(0, -((EntityGrenadeStun) entity).height / 2, 0); + float offset = ((EntityGrenadeStun) entity).height / 1.5F; + GlStateManager.translate(0, offset, 0); + GlStateManager.rotate(90.F, 0, 0, 1); + GlStateManager.translate(0, -offset, 0); } GlStateManager.translate(-0.5, 0, -0.5); From 15c98084b4bfaa69a1b2893afeb575c9e77b9cb5 Mon Sep 17 00:00:00 2001 From: Phylogeny Date: Tue, 27 Nov 2018 07:39:25 -0800 Subject: [PATCH 6/6] Moved stun grenade entity model and particle spawn location to the bottom of its hitbox. --- .../guns/client/render/entity/RenderGrenade.java | 9 ++++++--- .../java/com/mrcrayfish/guns/entity/EntityGrenade.java | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mrcrayfish/guns/client/render/entity/RenderGrenade.java b/src/main/java/com/mrcrayfish/guns/client/render/entity/RenderGrenade.java index 5a11225fc..24d02471f 100644 --- a/src/main/java/com/mrcrayfish/guns/client/render/entity/RenderGrenade.java +++ b/src/main/java/com/mrcrayfish/guns/client/render/entity/RenderGrenade.java @@ -46,13 +46,16 @@ public void doRender(EntityGrenade entity, double x, double y, double z, float e GlStateManager.rotate(entityYaw, 0, 1, 0); float rotation = entity.prevRotation + (entity.rotation - entity.prevRotation) * partialTicks; - GlStateManager.translate(0, 0.15, 0); + float offset = 0; + if (entity instanceof EntityGrenadeStun) + offset = entity.height / 1.5F; + + GlStateManager.translate(0, 0.15 - offset * 0.5, 0); GlStateManager.rotate(-rotation, 1, 0, 0); GlStateManager.translate(0, -0.15, 0); - if(entity instanceof EntityGrenadeStun) + if(offset > 0) { - float offset = ((EntityGrenadeStun) entity).height / 1.5F; GlStateManager.translate(0, offset, 0); GlStateManager.rotate(90.F, 0, 0, 1); GlStateManager.translate(0, -offset, 0); diff --git a/src/main/java/com/mrcrayfish/guns/entity/EntityGrenade.java b/src/main/java/com/mrcrayfish/guns/entity/EntityGrenade.java index 6ab0f5522..e2f1467dc 100644 --- a/src/main/java/com/mrcrayfish/guns/entity/EntityGrenade.java +++ b/src/main/java/com/mrcrayfish/guns/entity/EntityGrenade.java @@ -59,7 +59,8 @@ public void onUpdate() rotation += speed * 50; } - world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, posX, posY + 0.25, posZ, 0, 0, 0, 10); + float offset = this instanceof EntityGrenadeStun ? 0.25F / 3.0F : 0.25F; + world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, posX, posY + offset, posZ, 0, 0, 0, 10); } @Override