GameNarrator.java

net.minecraft.client.GameNarrator

信息

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

    TODO

字段/常量

  • NO_TITLE

    • 类型: Component
    • 修饰符: public static final
    • 源码定位: L19
    • 说明:

      TODO

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L20
    • 说明:

      TODO

  • minecraft

    • 类型: Minecraft
    • 修饰符: private final
    • 源码定位: L21
    • 说明:

      TODO

  • narrator

    • 类型: Narrator
    • 修饰符: private final
    • 源码定位: L22
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.GameNarrator.NarratorInitException
    • 类型: class
    • 修饰符: public static
    • 源码定位: L129
    • 说明:

      TODO

构造器

public GameNarrator(Minecraft minecraft) @ L24

  • 构造器名:GameNarrator
  • 源码定位:L24
  • 修饰符:public

参数:

  • minecraft: Minecraft

说明:

TODO

方法

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

public void sayChatQueued(Component message) @ L28

  • 方法名:sayChatQueued
  • 源码定位:L28
  • 返回类型:void
  • 修饰符:public

参数:

  • message: Component

说明:

TODO

public void saySystemChatQueued(Component message) @ L34

  • 方法名:saySystemChatQueued
  • 源码定位:L34
  • 返回类型:void
  • 修饰符:public

参数:

  • message: Component

说明:

TODO

public void saySystemQueued(Component message) @ L40

  • 方法名:saySystemQueued
  • 源码定位:L40
  • 返回类型:void
  • 修饰符:public

参数:

  • message: Component

说明:

TODO

private void narrateNotInterruptingMessage(Component message) @ L46

  • 方法名:narrateNotInterruptingMessage
  • 源码定位:L46
  • 返回类型:void
  • 修饰符:private

参数:

  • message: Component

说明:

TODO

public void saySystemNow(Component message) @ L54

  • 方法名:saySystemNow
  • 源码定位:L54
  • 返回类型:void
  • 修饰符:public

参数:

  • message: Component

说明:

TODO

public void saySystemNow(String message) @ L58

  • 方法名:saySystemNow
  • 源码定位:L58
  • 返回类型:void
  • 修饰符:public

参数:

  • message: String

说明:

TODO

private void narrateMessage(String message, boolean interrupt) @ L68

  • 方法名:narrateMessage
  • 源码定位:L68
  • 返回类型:void
  • 修饰符:private

参数:

  • message: String
  • interrupt: boolean

说明:

TODO

private NarratorStatus getStatus() @ L72

  • 方法名:getStatus
  • 源码定位:L72
  • 返回类型:NarratorStatus
  • 修饰符:private

参数:

说明:

TODO

private void logNarratedMessage(String message) @ L76

  • 方法名:logNarratedMessage
  • 源码定位:L76
  • 返回类型:void
  • 修饰符:private

参数:

  • message: String

说明:

TODO

public void updateNarratorStatus(NarratorStatus status) @ L82

  • 方法名:updateNarratorStatus
  • 源码定位:L82
  • 返回类型:void
  • 修饰符:public

参数:

  • status: NarratorStatus

说明:

TODO

public boolean isActive() @ L104

  • 方法名:isActive
  • 源码定位:L104
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public void clear() @ L108

  • 方法名:clear
  • 源码定位:L108
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public void destroy() @ L114

  • 方法名:destroy
  • 源码定位:L114
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public void checkStatus(boolean requiredActive) @ L118

  • 方法名:checkStatus
  • 源码定位:L118
  • 返回类型:void
  • 修饰符:public

参数:

  • requiredActive: boolean

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class GameNarrator {
    public static final Component NO_TITLE = CommonComponents.EMPTY;
    private static final Logger LOGGER = LogUtils.getLogger();
    private final Minecraft minecraft;
    private final Narrator narrator = Narrator.getNarrator();
 
    public GameNarrator(Minecraft minecraft) {
        this.minecraft = minecraft;
    }
 
    public void sayChatQueued(Component message) {
        if (this.getStatus().shouldNarrateChat()) {
            this.narrateNotInterruptingMessage(message);
        }
    }
 
    public void saySystemChatQueued(Component message) {
        if (this.getStatus().shouldNarrateSystemOrChat()) {
            this.narrateNotInterruptingMessage(message);
        }
    }
 
    public void saySystemQueued(Component message) {
        if (this.getStatus().shouldNarrateSystem()) {
            this.narrateNotInterruptingMessage(message);
        }
    }
 
    private void narrateNotInterruptingMessage(Component message) {
        String messageString = message.getString();
        if (!messageString.isEmpty()) {
            this.logNarratedMessage(messageString);
            this.narrateMessage(messageString, false);
        }
    }
 
    public void saySystemNow(Component message) {
        this.saySystemNow(message.getString());
    }
 
    public void saySystemNow(String message) {
        if (this.getStatus().shouldNarrateSystem() && !message.isEmpty()) {
            this.logNarratedMessage(message);
            if (this.narrator.active()) {
                this.narrator.clear();
                this.narrateMessage(message, true);
            }
        }
    }
 
    private void narrateMessage(String message, boolean interrupt) {
        this.narrator.say(message, interrupt, this.minecraft.options.getFinalSoundSourceVolume(SoundSource.VOICE));
    }
 
    private NarratorStatus getStatus() {
        return this.minecraft.options.narrator().get();
    }
 
    private void logNarratedMessage(String message) {
        if (SharedConstants.IS_RUNNING_IN_IDE) {
            LOGGER.debug("Narrating: {}", message.replaceAll("\n", "\\\\n"));
        }
    }
 
    public void updateNarratorStatus(NarratorStatus status) {
        this.clear();
        this.narrateMessage(Component.translatable("options.narrator").append(" : ").append(status.getName()).getString(), true);
        ToastManager toastManager = Minecraft.getInstance().getToastManager();
        if (this.narrator.active()) {
            if (status == NarratorStatus.OFF) {
                SystemToast.addOrUpdate(toastManager, SystemToast.SystemToastId.NARRATOR_TOGGLE, Component.translatable("narrator.toast.disabled"), null);
            } else {
                SystemToast.addOrUpdate(
                    toastManager, SystemToast.SystemToastId.NARRATOR_TOGGLE, Component.translatable("narrator.toast.enabled"), status.getName()
                );
            }
        } else {
            SystemToast.addOrUpdate(
                toastManager,
                SystemToast.SystemToastId.NARRATOR_TOGGLE,
                Component.translatable("narrator.toast.disabled"),
                Component.translatable("options.narrator.notavailable")
            );
        }
    }
 
    public boolean isActive() {
        return this.narrator.active();
    }
 
    public void clear() {
        if (this.getStatus() != NarratorStatus.OFF && this.narrator.active()) {
            this.narrator.clear();
        }
    }
 
    public void destroy() {
        this.narrator.destroy();
    }
 
    public void checkStatus(boolean requiredActive) {
        if (requiredActive
            && !this.isActive()
            && !MessageBox.errorWithContinue(
                "Failed to initialize text-to-speech library. Do you want to continue?\nIf this problem persists, please report it at bugs.mojang.com"
            )) {
            throw new GameNarrator.NarratorInitException("Narrator library is not active");
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public static class NarratorInitException extends SilentInitException {
        public NarratorInitException(String message) {
            super(message);
        }
    }
}

引用的其他类

  • MessageBox

    • 引用位置: 方法调用
    • 关联成员: MessageBox.errorWithContinue()
  • Minecraft

    • 引用位置: 参数/字段/方法调用
    • 关联成员: Minecraft.getInstance()
  • NarratorStatus

    • 引用位置: 参数/返回值
  • SystemToast

    • 引用位置: 方法调用
    • 关联成员: SystemToast.addOrUpdate()
  • Component

    • 引用位置: 参数/字段/方法调用
    • 关联成员: Component.translatable()