always play sound; refactor sound playing into RandomSoundPlayer

This commit is contained in:
Jill 2022-11-03 13:07:59 +03:00
parent c7cce9a4b8
commit dfe9d5f54e
2 changed files with 126 additions and 109 deletions

View File

@ -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<SoundEvent> 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

View File

@ -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<SoundEvent> 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);
}
}