From dfe9d5f54ec334c6d2cc9d09d4140cd4b6725cd9 Mon Sep 17 00:00:00 2001 From: "Jill \"oatmealine\" Monoids" Date: Thu, 3 Nov 2022 13:07:59 +0300 Subject: [PATCH] always play sound; refactor sound playing into RandomSoundPlayer --- .../java/zone/oat/supersecretrevival/Mod.java | 111 +--------------- .../supersecretrevival/RandomSoundPlayer.java | 124 ++++++++++++++++++ 2 files changed, 126 insertions(+), 109 deletions(-) create mode 100644 src/main/java/zone/oat/supersecretrevival/RandomSoundPlayer.java diff --git a/src/main/java/zone/oat/supersecretrevival/Mod.java b/src/main/java/zone/oat/supersecretrevival/Mod.java index 65028d2..45a6e15 100644 --- a/src/main/java/zone/oat/supersecretrevival/Mod.java +++ b/src/main/java/zone/oat/supersecretrevival/Mod.java @@ -3,27 +3,14 @@ package zone.oat.supersecretrevival; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gl.ShaderEffect; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; -import net.minecraft.util.registry.Registry; -import net.minecraft.world.World; import org.lwjgl.glfw.GLFW; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - public class Mod implements ClientModInitializer { public static final Logger LOGGER = LoggerFactory.getLogger("super-secret-revival"); @@ -37,103 +24,9 @@ public class Mod implements ClientModInitializer { "key.categories.misc" // The translation key of the keybinding's category. )); - // prevent these sounds from playing - // - // in 1.8 this used to be a list of categories; - // however sounds no longer have an association - // to categories so we have to improvise - - private static SoundEvent[] soundBlocklist = { - SoundEvents.MUSIC_CREATIVE, - SoundEvents.MUSIC_CREDITS, - SoundEvents.MUSIC_DISC_11, - SoundEvents.MUSIC_DISC_13, - SoundEvents.MUSIC_DISC_BLOCKS, - SoundEvents.MUSIC_DISC_CAT, - SoundEvents.MUSIC_DISC_CHIRP, - SoundEvents.MUSIC_DISC_FAR, - SoundEvents.MUSIC_DISC_MALL, - SoundEvents.MUSIC_DISC_MELLOHI, - SoundEvents.MUSIC_DISC_PIGSTEP, - SoundEvents.MUSIC_DISC_STAL, - SoundEvents.MUSIC_DISC_STRAD, - SoundEvents.MUSIC_DISC_WAIT, - SoundEvents.MUSIC_DISC_WARD, - SoundEvents.MUSIC_DISC_OTHERSIDE, - SoundEvents.MUSIC_DRAGON, - SoundEvents.MUSIC_END, - SoundEvents.MUSIC_GAME, - SoundEvents.MUSIC_MENU, - SoundEvents.MUSIC_NETHER_BASALT_DELTAS, - SoundEvents.MUSIC_NETHER_CRIMSON_FOREST, - SoundEvents.MUSIC_OVERWORLD_DRIPSTONE_CAVES, - SoundEvents.MUSIC_OVERWORLD_GROVE, - SoundEvents.MUSIC_OVERWORLD_JAGGED_PEAKS, - SoundEvents.MUSIC_OVERWORLD_LUSH_CAVES, - SoundEvents.MUSIC_OVERWORLD_MEADOW, - SoundEvents.MUSIC_NETHER_NETHER_WASTES, - SoundEvents.MUSIC_OVERWORLD_FROZEN_PEAKS, - SoundEvents.MUSIC_OVERWORLD_SNOWY_SLOPES, - SoundEvents.MUSIC_NETHER_SOUL_SAND_VALLEY, - SoundEvents.MUSIC_OVERWORLD_STONY_PEAKS, - SoundEvents.MUSIC_NETHER_WARPED_FOREST, - SoundEvents.MUSIC_UNDER_WATER, - - SoundEvents.AMBIENT_CAVE, - SoundEvents.AMBIENT_BASALT_DELTAS_ADDITIONS, - SoundEvents.AMBIENT_BASALT_DELTAS_LOOP, - SoundEvents.AMBIENT_BASALT_DELTAS_MOOD, - SoundEvents.AMBIENT_CRIMSON_FOREST_ADDITIONS, - SoundEvents.AMBIENT_CRIMSON_FOREST_LOOP, - SoundEvents.AMBIENT_CRIMSON_FOREST_MOOD, - SoundEvents.AMBIENT_NETHER_WASTES_ADDITIONS, - SoundEvents.AMBIENT_NETHER_WASTES_LOOP, - SoundEvents.AMBIENT_NETHER_WASTES_MOOD, - SoundEvents.AMBIENT_SOUL_SAND_VALLEY_ADDITIONS, - SoundEvents.AMBIENT_SOUL_SAND_VALLEY_LOOP, - SoundEvents.AMBIENT_SOUL_SAND_VALLEY_MOOD, - SoundEvents.AMBIENT_WARPED_FOREST_ADDITIONS, - SoundEvents.AMBIENT_WARPED_FOREST_LOOP, - SoundEvents.AMBIENT_WARPED_FOREST_MOOD, - SoundEvents.AMBIENT_UNDERWATER_ENTER, - SoundEvents.AMBIENT_UNDERWATER_EXIT, - SoundEvents.AMBIENT_UNDERWATER_LOOP, - SoundEvents.AMBIENT_UNDERWATER_LOOP_ADDITIONS, - SoundEvents.AMBIENT_UNDERWATER_LOOP_ADDITIONS_RARE, - SoundEvents.AMBIENT_UNDERWATER_LOOP_ADDITIONS_ULTRA_RARE, - }; - - private static SoundEvent getRandomSound(Random random) { - SoundEvent event; - - do { - Registry registry = Registry.SOUND_EVENT; - int size = registry.size(); - int rand = random.nextInt(size); - event = registry.get(rand); - } while (Arrays.asList(soundBlocklist).contains(event)); - - return event; - } - public static void triggerSuperSecretSettings() { - MinecraftClient client = MinecraftClient.getInstance(); - World world = client.world; - - if (world instanceof ClientWorld) { - ShaderControls.setRandomShader(); - - // play a random noise - SoundEvent sound = getRandomSound(world.random); - world.playSound( - client.player, - client.player.getBlockPos(), - sound, - null, - 1f, - 0.5f - ); - } + ShaderControls.setRandomShader(); + RandomSoundPlayer.playRandomSound(); } @Override diff --git a/src/main/java/zone/oat/supersecretrevival/RandomSoundPlayer.java b/src/main/java/zone/oat/supersecretrevival/RandomSoundPlayer.java new file mode 100644 index 0000000..f247bd4 --- /dev/null +++ b/src/main/java/zone/oat/supersecretrevival/RandomSoundPlayer.java @@ -0,0 +1,124 @@ +package zone.oat.supersecretrevival; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.sound.PositionedSoundInstance; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; +import net.minecraft.sound.SoundEvents; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.World; + +import java.util.Arrays; +import java.util.Random; + +public class RandomSoundPlayer { + + private static final Random RANDOM = new Random(); + + // prevent these sounds from playing + // + // in 1.8 this used to be a list of categories; + // however sounds no longer have an association + // to categories so we have to improvise + + private static SoundEvent[] soundBlocklist = { + SoundEvents.MUSIC_CREATIVE, + SoundEvents.MUSIC_CREDITS, + SoundEvents.MUSIC_DISC_11, + SoundEvents.MUSIC_DISC_13, + SoundEvents.MUSIC_DISC_BLOCKS, + SoundEvents.MUSIC_DISC_CAT, + SoundEvents.MUSIC_DISC_CHIRP, + SoundEvents.MUSIC_DISC_FAR, + SoundEvents.MUSIC_DISC_MALL, + SoundEvents.MUSIC_DISC_MELLOHI, + SoundEvents.MUSIC_DISC_PIGSTEP, + SoundEvents.MUSIC_DISC_STAL, + SoundEvents.MUSIC_DISC_STRAD, + SoundEvents.MUSIC_DISC_WAIT, + SoundEvents.MUSIC_DISC_WARD, + SoundEvents.MUSIC_DISC_OTHERSIDE, + SoundEvents.MUSIC_DRAGON, + SoundEvents.MUSIC_END, + SoundEvents.MUSIC_GAME, + SoundEvents.MUSIC_MENU, + SoundEvents.MUSIC_NETHER_BASALT_DELTAS, + SoundEvents.MUSIC_NETHER_CRIMSON_FOREST, + SoundEvents.MUSIC_OVERWORLD_DRIPSTONE_CAVES, + SoundEvents.MUSIC_OVERWORLD_GROVE, + SoundEvents.MUSIC_OVERWORLD_JAGGED_PEAKS, + SoundEvents.MUSIC_OVERWORLD_LUSH_CAVES, + SoundEvents.MUSIC_OVERWORLD_MEADOW, + SoundEvents.MUSIC_NETHER_NETHER_WASTES, + SoundEvents.MUSIC_OVERWORLD_FROZEN_PEAKS, + SoundEvents.MUSIC_OVERWORLD_SNOWY_SLOPES, + SoundEvents.MUSIC_NETHER_SOUL_SAND_VALLEY, + SoundEvents.MUSIC_OVERWORLD_STONY_PEAKS, + SoundEvents.MUSIC_NETHER_WARPED_FOREST, + SoundEvents.MUSIC_UNDER_WATER, + + SoundEvents.AMBIENT_CAVE, + SoundEvents.AMBIENT_BASALT_DELTAS_ADDITIONS, + SoundEvents.AMBIENT_BASALT_DELTAS_LOOP, + SoundEvents.AMBIENT_BASALT_DELTAS_MOOD, + SoundEvents.AMBIENT_CRIMSON_FOREST_ADDITIONS, + SoundEvents.AMBIENT_CRIMSON_FOREST_LOOP, + SoundEvents.AMBIENT_CRIMSON_FOREST_MOOD, + SoundEvents.AMBIENT_NETHER_WASTES_ADDITIONS, + SoundEvents.AMBIENT_NETHER_WASTES_LOOP, + SoundEvents.AMBIENT_NETHER_WASTES_MOOD, + SoundEvents.AMBIENT_SOUL_SAND_VALLEY_ADDITIONS, + SoundEvents.AMBIENT_SOUL_SAND_VALLEY_LOOP, + SoundEvents.AMBIENT_SOUL_SAND_VALLEY_MOOD, + SoundEvents.AMBIENT_WARPED_FOREST_ADDITIONS, + SoundEvents.AMBIENT_WARPED_FOREST_LOOP, + SoundEvents.AMBIENT_WARPED_FOREST_MOOD, + SoundEvents.AMBIENT_UNDERWATER_ENTER, + SoundEvents.AMBIENT_UNDERWATER_EXIT, + SoundEvents.AMBIENT_UNDERWATER_LOOP, + SoundEvents.AMBIENT_UNDERWATER_LOOP_ADDITIONS, + SoundEvents.AMBIENT_UNDERWATER_LOOP_ADDITIONS_RARE, + SoundEvents.AMBIENT_UNDERWATER_LOOP_ADDITIONS_ULTRA_RARE, + }; + + private static SoundEvent getRandomSound(Random random) { + SoundEvent event; + + do { + Registry registry = Registry.SOUND_EVENT; + int size = registry.size(); + int rand = random.nextInt(size); + event = registry.get(rand); + } while (Arrays.asList(soundBlocklist).contains(event)); + + return event; + } + + // money back guarantee. Bill mays. Phil swif + // In this phrase "money-back" is an adjective and needs to be spelled with a hyphen. + // Incorrect: We offer a 14-day money back guarantee. + // Correct: We offer a 14-day money-back guarantee. + public static void guaranteedPlaySound(SoundEvent sound, float volume, float pitch) { + MinecraftClient client = MinecraftClient.getInstance(); + World world = client.world; + + if (world instanceof ClientWorld) { + world.playSound( + client.player, + client.player.getBlockPos(), + sound, + SoundCategory.MASTER, + volume, + pitch + ); + } else { + client.getSoundManager().play(PositionedSoundInstance.master(sound, pitch)); + } + } + + public static void playRandomSound() { + SoundEvent sound = getRandomSound(RANDOM); + guaranteedPlaySound(sound, 1f, 0.5f); + } +}