SoundPreviewHandler.java

net.minecraft.client.sounds.SoundPreviewHandler

信息

  • 全限定名:net.minecraft.client.sounds.SoundPreviewHandler
  • 类型:public final class
  • 包:net.minecraft.client.sounds
  • 源码路径:src/main/java/net/minecraft/client/sounds/SoundPreviewHandler.java
  • 起始行号:L14
  • 职责:

    TODO

字段/常量

  • activePreview

    • 类型: SoundInstance
    • 修饰符: private static
    • 源码定位: L15
    • 说明:

      TODO

  • previousCategory

    • 类型: SoundSource
    • 修饰符: private static
    • 源码定位: L16
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

public static void preview(SoundManager soundManager, SoundSource category, float volume) @ L18

  • 方法名:preview
  • 源码定位:L18
  • 返回类型:void
  • 修饰符:public static

参数:

  • soundManager: SoundManager
  • category: SoundSource
  • volume: float

说明:

TODO

private static void stopOtherCategoryPreview(SoundManager soundManager, SoundSource category) @ L39

  • 方法名:stopOtherCategoryPreview
  • 源码定位:L39
  • 返回类型:void
  • 修饰符:private static

参数:

  • soundManager: SoundManager
  • category: SoundSource

说明:

TODO

private static boolean canPlaySound(SoundManager soundManager) @ L48

  • 方法名:canPlaySound
  • 源码定位:L48
  • 返回类型:boolean
  • 修饰符:private static

参数:

  • soundManager: SoundManager

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public final class SoundPreviewHandler {
    private static @Nullable SoundInstance activePreview;
    private static @Nullable SoundSource previousCategory;
 
    public static void preview(SoundManager soundManager, SoundSource category, float volume) {
        stopOtherCategoryPreview(soundManager, category);
        if (canPlaySound(soundManager)) {
            SoundEvent previewSound = switch (category) {
                case RECORDS -> (SoundEvent)SoundEvents.NOTE_BLOCK_GUITAR.value();
                case WEATHER -> SoundEvents.LIGHTNING_BOLT_THUNDER;
                case BLOCKS -> SoundEvents.GRASS_PLACE;
                case HOSTILE -> SoundEvents.ZOMBIE_AMBIENT;
                case NEUTRAL -> (SoundEvent)SoundEvents.COW_SOUNDS.get(CowSoundVariants.SoundSet.CLASSIC).ambientSound().value();
                case PLAYERS -> (SoundEvent)SoundEvents.GENERIC_EAT.value();
                case AMBIENT -> (SoundEvent)SoundEvents.AMBIENT_CAVE.value();
                case UI -> (SoundEvent)SoundEvents.UI_BUTTON_CLICK.value();
                default -> SoundEvents.EMPTY;
            };
            if (previewSound != SoundEvents.EMPTY) {
                activePreview = SimpleSoundInstance.forUI(previewSound, 1.0F, volume);
                soundManager.play(activePreview);
            }
        }
    }
 
    private static void stopOtherCategoryPreview(SoundManager soundManager, SoundSource category) {
        if (previousCategory != category) {
            previousCategory = category;
            if (activePreview != null) {
                soundManager.stop(activePreview);
            }
        }
    }
 
    private static boolean canPlaySound(SoundManager soundManager) {
        return activePreview == null || !soundManager.isActive(activePreview);
    }
}

引用的其他类