AdvancementsScreen.java
net.minecraft.client.gui.screens.advancements.AdvancementsScreen
信息
- 全限定名:net.minecraft.client.gui.screens.advancements.AdvancementsScreen
- 类型:public class
- 包:net.minecraft.client.gui.screens.advancements
- 源码路径:src/main/java/net/minecraft/client/gui/screens/advancements/AdvancementsScreen.java
- 起始行号:L27
- 继承:Screen
- 实现:ClientAdvancements.Listener
- 职责:
TODO
字段/常量
-
WINDOW_LOCATION- 类型:
Identifier - 修饰符:
private static final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
WINDOW_WIDTH- 类型:
int - 修饰符:
public static final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
WINDOW_HEIGHT- 类型:
int - 修饰符:
public static final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
WINDOW_INSIDE_X- 类型:
int - 修饰符:
private static final - 源码定位:
L31 - 说明:
TODO
- 类型:
-
WINDOW_INSIDE_Y- 类型:
int - 修饰符:
private static final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
WINDOW_INSIDE_WIDTH- 类型:
int - 修饰符:
public static final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
WINDOW_INSIDE_HEIGHT- 类型:
int - 修饰符:
public static final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
WINDOW_TITLE_X- 类型:
int - 修饰符:
private static final - 源码定位:
L35 - 说明:
TODO
- 类型:
-
WINDOW_TITLE_Y- 类型:
int - 修饰符:
private static final - 源码定位:
L36 - 说明:
TODO
- 类型:
-
BACKGROUND_TEXTURE_WIDTH- 类型:
int - 修饰符:
private static final - 源码定位:
L37 - 说明:
TODO
- 类型:
-
BACKGROUND_TEXTURE_HEIGHT- 类型:
int - 修饰符:
private static final - 源码定位:
L38 - 说明:
TODO
- 类型:
-
BACKGROUND_TILE_WIDTH- 类型:
int - 修饰符:
public static final - 源码定位:
L39 - 说明:
TODO
- 类型:
-
BACKGROUND_TILE_HEIGHT- 类型:
int - 修饰符:
public static final - 源码定位:
L40 - 说明:
TODO
- 类型:
-
BACKGROUND_TILE_COUNT_X- 类型:
int - 修饰符:
public static final - 源码定位:
L41 - 说明:
TODO
- 类型:
-
BACKGROUND_TILE_COUNT_Y- 类型:
int - 修饰符:
public static final - 源码定位:
L42 - 说明:
TODO
- 类型:
-
SCROLL_SPEED- 类型:
double - 修饰符:
private static final - 源码定位:
L43 - 说明:
TODO
- 类型:
-
VERY_SAD_LABEL- 类型:
Component - 修饰符:
private static final - 源码定位:
L44 - 说明:
TODO
- 类型:
-
NO_ADVANCEMENTS_LABEL- 类型:
Component - 修饰符:
private static final - 源码定位:
L45 - 说明:
TODO
- 类型:
-
TITLE- 类型:
Component - 修饰符:
private static final - 源码定位:
L46 - 说明:
TODO
- 类型:
-
layout- 类型:
HeaderAndFooterLayout - 修饰符:
private final - 源码定位:
L47 - 说明:
TODO
- 类型:
-
lastScreen- 类型:
Screen - 修饰符:
private final - 源码定位:
L48 - 说明:
TODO
- 类型:
-
advancements- 类型:
ClientAdvancements - 修饰符:
private final - 源码定位:
L49 - 说明:
TODO
- 类型:
-
tabs- 类型:
Map<AdvancementHolder,AdvancementTab> - 修饰符:
private final - 源码定位:
L50 - 说明:
TODO
- 类型:
-
selectedTab- 类型:
AdvancementTab - 修饰符:
private - 源码定位:
L51 - 说明:
TODO
- 类型:
-
isScrolling- 类型:
boolean - 修饰符:
private - 源码定位:
L52 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public AdvancementsScreen(ClientAdvancements advancements) @ L54
- 构造器名:AdvancementsScreen
- 源码定位:L54
- 修饰符:public
参数:
- advancements: ClientAdvancements
说明:
TODO
public AdvancementsScreen(ClientAdvancements advancements, Screen lastScreen) @ L58
- 构造器名:AdvancementsScreen
- 源码定位:L58
- 修饰符:public
参数:
- advancements: ClientAdvancements
- lastScreen: Screen
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected void init() @ L64
- 方法名:init
- 源码定位:L64
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
protected void repositionElements() @ L82
- 方法名:repositionElements
- 源码定位:L82
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
public void onClose() @ L87
- 方法名:onClose
- 源码定位:L87
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void removed() @ L92
- 方法名:removed
- 源码定位:L92
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean mouseClicked(MouseButtonEvent event, boolean doubleClick) @ L101
- 方法名:mouseClicked
- 源码定位:L101
- 返回类型:boolean
- 修饰符:public
参数:
- event: MouseButtonEvent
- doubleClick: boolean
说明:
TODO
public boolean keyPressed(KeyEvent event) @ L118
- 方法名:keyPressed
- 源码定位:L118
- 返回类型:boolean
- 修饰符:public
参数:
- event: KeyEvent
说明:
TODO
public void extractRenderState(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) @ L129
- 方法名:extractRenderState
- 源码定位:L129
- 返回类型:void
- 修饰符:public
参数:
- graphics: GuiGraphicsExtractor
- mouseX: int
- mouseY: int
- a: float
说明:
TODO
public boolean mouseDragged(MouseButtonEvent event, double dx, double dy) @ L151
- 方法名:mouseDragged
- 源码定位:L151
- 返回类型:boolean
- 修饰符:public
参数:
- event: MouseButtonEvent
- dx: double
- dy: double
说明:
TODO
public boolean mouseReleased(MouseButtonEvent event) @ L167
- 方法名:mouseReleased
- 源码定位:L167
- 返回类型:boolean
- 修饰符:public
参数:
- event: MouseButtonEvent
说明:
TODO
public boolean mouseScrolled(double x, double y, double scrollX, double scrollY) @ L173
- 方法名:mouseScrolled
- 源码定位:L173
- 返回类型:boolean
- 修饰符:public
参数:
- x: double
- y: double
- scrollX: double
- scrollY: double
说明:
TODO
private void extractInside(GuiGraphicsExtractor graphics, int xo, int yo) @ L183
- 方法名:extractInside
- 源码定位:L183
- 返回类型:void
- 修饰符:private
参数:
- graphics: GuiGraphicsExtractor
- xo: int
- yo: int
说明:
TODO
public void extractWindow(GuiGraphicsExtractor graphics, int xo, int yo, int mouseX, int mouseY) @ L195
- 方法名:extractWindow
- 源码定位:L195
- 返回类型:void
- 修饰符:public
参数:
- graphics: GuiGraphicsExtractor
- xo: int
- yo: int
- mouseX: int
- mouseY: int
说明:
TODO
private void extractTooltips(GuiGraphicsExtractor graphics, int mouseX, int mouseY, int xo, int yo) @ L210
- 方法名:extractTooltips
- 源码定位:L210
- 返回类型:void
- 修饰符:private
参数:
- graphics: GuiGraphicsExtractor
- mouseX: int
- mouseY: int
- xo: int
- yo: int
说明:
TODO
public void onAddAdvancementRoot(AdvancementNode root) @ L228
- 方法名:onAddAdvancementRoot
- 源码定位:L228
- 返回类型:void
- 修饰符:public
参数:
- root: AdvancementNode
说明:
TODO
public void onRemoveAdvancementRoot(AdvancementNode root) @ L236
- 方法名:onRemoveAdvancementRoot
- 源码定位:L236
- 返回类型:void
- 修饰符:public
参数:
- root: AdvancementNode
说明:
TODO
public void onAddAdvancementTask(AdvancementNode task) @ L240
- 方法名:onAddAdvancementTask
- 源码定位:L240
- 返回类型:void
- 修饰符:public
参数:
- task: AdvancementNode
说明:
TODO
public void onRemoveAdvancementTask(AdvancementNode task) @ L248
- 方法名:onRemoveAdvancementTask
- 源码定位:L248
- 返回类型:void
- 修饰符:public
参数:
- task: AdvancementNode
说明:
TODO
public void onUpdateAdvancementProgress(AdvancementNode advancement, AdvancementProgress progress) @ L252
- 方法名:onUpdateAdvancementProgress
- 源码定位:L252
- 返回类型:void
- 修饰符:public
参数:
- advancement: AdvancementNode
- progress: AdvancementProgress
说明:
TODO
public void onSelectedTabChanged(AdvancementHolder selectedTab) @ L260
- 方法名:onSelectedTabChanged
- 源码定位:L260
- 返回类型:void
- 修饰符:public
参数:
- selectedTab: AdvancementHolder
说明:
TODO
public void onAdvancementsCleared() @ L265
- 方法名:onAdvancementsCleared
- 源码定位:L265
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public AdvancementWidget getAdvancementWidget(AdvancementNode node) @ L271
- 方法名:getAdvancementWidget
- 源码定位:L271
- 返回类型:AdvancementWidget
- 修饰符:public
参数:
- node: AdvancementNode
说明:
TODO
private AdvancementTab getTab(AdvancementNode node) @ L276
- 方法名:getTab
- 源码定位:L276
- 返回类型:AdvancementTab
- 修饰符:private
参数:
- node: AdvancementNode
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class AdvancementsScreen extends Screen implements ClientAdvancements.Listener {
private static final Identifier WINDOW_LOCATION = Identifier.withDefaultNamespace("textures/gui/advancements/window.png");
public static final int WINDOW_WIDTH = 252;
public static final int WINDOW_HEIGHT = 140;
private static final int WINDOW_INSIDE_X = 9;
private static final int WINDOW_INSIDE_Y = 18;
public static final int WINDOW_INSIDE_WIDTH = 234;
public static final int WINDOW_INSIDE_HEIGHT = 113;
private static final int WINDOW_TITLE_X = 8;
private static final int WINDOW_TITLE_Y = 6;
private static final int BACKGROUND_TEXTURE_WIDTH = 256;
private static final int BACKGROUND_TEXTURE_HEIGHT = 256;
public static final int BACKGROUND_TILE_WIDTH = 16;
public static final int BACKGROUND_TILE_HEIGHT = 16;
public static final int BACKGROUND_TILE_COUNT_X = 14;
public static final int BACKGROUND_TILE_COUNT_Y = 7;
private static final double SCROLL_SPEED = 16.0;
private static final Component VERY_SAD_LABEL = Component.translatable("advancements.sad_label");
private static final Component NO_ADVANCEMENTS_LABEL = Component.translatable("advancements.empty");
private static final Component TITLE = Component.translatable("gui.advancements");
private final HeaderAndFooterLayout layout = new HeaderAndFooterLayout(this);
private final @Nullable Screen lastScreen;
private final ClientAdvancements advancements;
private final Map<AdvancementHolder, AdvancementTab> tabs = Maps.newLinkedHashMap();
private @Nullable AdvancementTab selectedTab;
private boolean isScrolling;
public AdvancementsScreen(ClientAdvancements advancements) {
this(advancements, null);
}
public AdvancementsScreen(ClientAdvancements advancements, @Nullable Screen lastScreen) {
super(TITLE);
this.advancements = advancements;
this.lastScreen = lastScreen;
}
@Override
protected void init() {
this.layout.addTitleHeader(TITLE, this.font);
this.tabs.clear();
this.selectedTab = null;
this.advancements.setListener(this);
if (this.selectedTab == null && !this.tabs.isEmpty()) {
AdvancementTab firstTab = this.tabs.values().iterator().next();
this.advancements.setSelectedTab(firstTab.getRootNode().holder(), true);
} else {
this.advancements.setSelectedTab(this.selectedTab == null ? null : this.selectedTab.getRootNode().holder(), true);
}
this.layout.addToFooter(Button.builder(CommonComponents.GUI_DONE, button -> this.onClose()).width(200).build());
this.layout.visitWidgets(x$0 -> this.addRenderableWidget(x$0));
this.repositionElements();
}
@Override
protected void repositionElements() {
this.layout.arrangeElements();
}
@Override
public void onClose() {
this.minecraft.setScreen(this.lastScreen);
}
@Override
public void removed() {
this.advancements.setListener(null);
ClientPacketListener connection = this.minecraft.getConnection();
if (connection != null) {
connection.send(ServerboundSeenAdvancementsPacket.closedScreen());
}
}
@Override
public boolean mouseClicked(MouseButtonEvent event, boolean doubleClick) {
if (event.button() == 0) {
int xo = (this.width - 252) / 2;
int yo = (this.height - 140) / 2;
for (AdvancementTab tab : this.tabs.values()) {
if (tab.isMouseOver(xo, yo, event.x(), event.y())) {
this.advancements.setSelectedTab(tab.getRootNode().holder(), true);
break;
}
}
}
return super.mouseClicked(event, doubleClick);
}
@Override
public boolean keyPressed(KeyEvent event) {
if (this.minecraft.options.keyAdvancements.matches(event)) {
this.minecraft.setScreen(null);
this.minecraft.mouseHandler.grabMouse();
return true;
} else {
return super.keyPressed(event);
}
}
@Override
public void extractRenderState(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) {
super.extractRenderState(graphics, mouseX, mouseY, a);
int xo = (this.width - 252) / 2;
int yo = (this.height - 140) / 2;
graphics.nextStratum();
this.extractInside(graphics, xo, yo);
graphics.nextStratum();
this.extractWindow(graphics, xo, yo, mouseX, mouseY);
if (this.isScrolling && this.selectedTab != null) {
if (this.selectedTab.canScrollHorizontally() && this.selectedTab.canScrollVertically()) {
graphics.requestCursor(CursorTypes.RESIZE_ALL);
} else if (this.selectedTab.canScrollHorizontally()) {
graphics.requestCursor(CursorTypes.RESIZE_EW);
} else if (this.selectedTab.canScrollVertically()) {
graphics.requestCursor(CursorTypes.RESIZE_NS);
}
}
this.extractTooltips(graphics, mouseX, mouseY, xo, yo);
}
@Override
public boolean mouseDragged(MouseButtonEvent event, double dx, double dy) {
if (event.button() != 0) {
this.isScrolling = false;
return false;
} else {
if (!this.isScrolling) {
this.isScrolling = true;
} else if (this.selectedTab != null) {
this.selectedTab.scroll(dx, dy);
}
return true;
}
}
@Override
public boolean mouseReleased(MouseButtonEvent event) {
this.isScrolling = false;
return super.mouseReleased(event);
}
@Override
public boolean mouseScrolled(double x, double y, double scrollX, double scrollY) {
if (this.selectedTab != null) {
this.selectedTab.scroll(scrollX * 16.0, scrollY * 16.0);
return true;
} else {
return false;
}
}
private void extractInside(GuiGraphicsExtractor graphics, int xo, int yo) {
AdvancementTab tab = this.selectedTab;
if (tab == null) {
graphics.fill(xo + 9, yo + 18, xo + 9 + 234, yo + 18 + 113, -16777216);
int midX = xo + 9 + 117;
graphics.centeredText(this.font, NO_ADVANCEMENTS_LABEL, midX, yo + 18 + 56 - 9 / 2, -1);
graphics.centeredText(this.font, VERY_SAD_LABEL, midX, yo + 18 + 113 - 9, -1);
} else {
tab.extractContents(graphics, xo + 9, yo + 18);
}
}
public void extractWindow(GuiGraphicsExtractor graphics, int xo, int yo, int mouseX, int mouseY) {
graphics.blit(RenderPipelines.GUI_TEXTURED, WINDOW_LOCATION, xo, yo, 0.0F, 0.0F, 252, 140, 256, 256);
if (this.tabs.size() > 1) {
for (AdvancementTab tab : this.tabs.values()) {
tab.extractTab(graphics, xo, yo, mouseX, mouseY, tab == this.selectedTab);
}
for (AdvancementTab tab : this.tabs.values()) {
tab.extractIcon(graphics, xo, yo);
}
}
graphics.text(this.font, this.selectedTab != null ? this.selectedTab.getTitle() : TITLE, xo + 8, yo + 6, -12566464, false);
}
private void extractTooltips(GuiGraphicsExtractor graphics, int mouseX, int mouseY, int xo, int yo) {
if (this.selectedTab != null) {
graphics.pose().pushMatrix();
graphics.pose().translate(xo + 9, yo + 18);
graphics.nextStratum();
this.selectedTab.extractTooltips(graphics, mouseX - xo - 9, mouseY - yo - 18, xo, yo);
graphics.pose().popMatrix();
}
if (this.tabs.size() > 1) {
for (AdvancementTab tab : this.tabs.values()) {
if (tab.isMouseOver(xo, yo, mouseX, mouseY)) {
graphics.setTooltipForNextFrame(this.font, tab.getTitle(), mouseX, mouseY);
}
}
}
}
@Override
public void onAddAdvancementRoot(AdvancementNode root) {
AdvancementTab tab = AdvancementTab.create(this.minecraft, this, this.tabs.size(), root);
if (tab != null) {
this.tabs.put(root.holder(), tab);
}
}
@Override
public void onRemoveAdvancementRoot(AdvancementNode root) {
}
@Override
public void onAddAdvancementTask(AdvancementNode task) {
AdvancementTab tab = this.getTab(task);
if (tab != null) {
tab.addAdvancement(task);
}
}
@Override
public void onRemoveAdvancementTask(AdvancementNode task) {
}
@Override
public void onUpdateAdvancementProgress(AdvancementNode advancement, AdvancementProgress progress) {
AdvancementWidget widget = this.getAdvancementWidget(advancement);
if (widget != null) {
widget.setProgress(progress);
}
}
@Override
public void onSelectedTabChanged(@Nullable AdvancementHolder selectedTab) {
this.selectedTab = this.tabs.get(selectedTab);
}
@Override
public void onAdvancementsCleared() {
this.tabs.clear();
this.selectedTab = null;
}
public @Nullable AdvancementWidget getAdvancementWidget(AdvancementNode node) {
AdvancementTab tab = this.getTab(node);
return tab == null ? null : tab.getWidget(node.holder());
}
private @Nullable AdvancementTab getTab(AdvancementNode node) {
AdvancementNode root = node.root();
return this.tabs.get(root.holder());
}
}引用的其他类
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Button.builder()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
HeaderAndFooterLayout()
- 引用位置:
-
- 引用位置:
参数/字段/继承
- 引用位置:
-
- 引用位置:
字段/方法调用/返回值 - 关联成员:
AdvancementTab.create()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/实现
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Component.translatable()
- 引用位置:
-
ServerboundSeenAdvancementsPacket
- 引用位置:
方法调用 - 关联成员:
ServerboundSeenAdvancementsPacket.closedScreen()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Identifier.withDefaultNamespace()
- 引用位置: