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;
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
CycleButton.builder()
- 引用位置:
-
- 引用位置:
参数/构造调用 - 关联成员:
LockIconButton()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
EqualSpacingLayout()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ConfirmScreen()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Component.translatable()
- 引用位置:
-
ServerboundChangeDifficultyPacket
- 引用位置:
构造调用 - 关联成员:
ServerboundChangeDifficultyPacket()
- 引用位置:
-
ServerboundLockDifficultyPacket
- 引用位置:
构造调用 - 关联成员:
ServerboundLockDifficultyPacket()
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
Difficulty.values()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: