DifficultyButtons.java

net.minecraft.client.gui.screens.options.DifficultyButtons

信息

  • 全限定名:net.minecraft.client.gui.screens.options.DifficultyButtons
  • 类型:public record
  • 包:net.minecraft.client.gui.screens.options
  • 源码路径:src/main/java/net/minecraft/client/gui/screens/options/DifficultyButtons.java
  • 起始行号:L19
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

方法

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

public static DifficultyButtons create(Minecraft minecraft, Level level, Screen screen) @ L20

  • 方法名:create
  • 源码定位:L20
  • 返回类型:DifficultyButtons
  • 修饰符:public static

参数:

  • minecraft: Minecraft
  • level: Level
  • screen: Screen

说明:

TODO

public void refresh(Minecraft minecraft) @ L52

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

参数:

  • minecraft: Minecraft

说明:

TODO

private static boolean isDifficultyLocked(Level level) @ L59

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

参数:

  • level: Level

说明:

TODO

private static boolean playerHasPermissionToChangeDifficulty(Minecraft minecraft) @ L63

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

参数:

  • minecraft: Minecraft

说明:

TODO

private static void onLockCallback(boolean result, Minecraft minecraft, Screen screen, CycleButton<Difficulty> difficultyButton, LockIconButton lockButton) @ L67

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

参数:

  • result: boolean
  • minecraft: Minecraft
  • screen: Screen
  • difficultyButton: CycleButton
  • lockButton: LockIconButton

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public record DifficultyButtons(LayoutElement layout, CycleButton<Difficulty> difficultyButton, LockIconButton lockButton, Level level) {
    public static DifficultyButtons create(Minecraft minecraft, Level level, Screen screen) {
        CycleButton<Difficulty> difficultyButton = CycleButton.builder(Difficulty::getDisplayName, level.getDifficulty())
            .withValues(Difficulty.values())
            .create(
                0,
                0,
                150,
                20,
                Component.translatable("options.difficulty"),
                (button, value) -> minecraft.getConnection().send(new ServerboundChangeDifficultyPacket(value))
            );
        LockIconButton lockButton = new LockIconButton(
            0,
            0,
            button -> minecraft.setScreen(
                new ConfirmScreen(
                    result -> onLockCallback(result, minecraft, screen, difficultyButton, (LockIconButton)button),
                    Component.translatable("difficulty.lock.title"),
                    Component.translatable("difficulty.lock.question", level.getLevelData().getDifficulty().getDisplayName())
                )
            )
        );
        difficultyButton.setWidth(difficultyButton.getWidth() - lockButton.getWidth());
        lockButton.setLocked(isDifficultyLocked(level));
        lockButton.active = !lockButton.isLocked() && playerHasPermissionToChangeDifficulty(minecraft);
        difficultyButton.active = !lockButton.isLocked() && playerHasPermissionToChangeDifficulty(minecraft);
        EqualSpacingLayout linearLayout = new EqualSpacingLayout(150, 0, EqualSpacingLayout.Orientation.HORIZONTAL);
        linearLayout.addChild(difficultyButton);
        linearLayout.addChild(lockButton);
        return new DifficultyButtons(linearLayout, difficultyButton, lockButton, level);
    }
 
    public void refresh(Minecraft minecraft) {
        this.difficultyButton.setValue(this.level.getDifficulty());
        this.lockButton.setLocked(isDifficultyLocked(this.level));
        this.lockButton.active = !this.lockButton.isLocked() && playerHasPermissionToChangeDifficulty(minecraft);
        this.difficultyButton.active = !this.lockButton.isLocked() && playerHasPermissionToChangeDifficulty(minecraft);
    }
 
    private static boolean isDifficultyLocked(Level level) {
        return level.getLevelData().isDifficultyLocked() || level.getLevelData().isHardcore();
    }
 
    private static boolean playerHasPermissionToChangeDifficulty(Minecraft minecraft) {
        return minecraft.hasSingleplayerServer();
    }
 
    private static void onLockCallback(boolean result, Minecraft minecraft, Screen screen, CycleButton<Difficulty> difficultyButton, LockIconButton lockButton) {
        minecraft.setScreen(screen);
        if (result) {
            minecraft.getConnection().send(new ServerboundLockDifficultyPacket(true));
            lockButton.setLocked(true);
            lockButton.active = false;
            difficultyButton.active = false;
        }
    }
}

引用的其他类