ClientAdvancements.java
net.minecraft.client.multiplayer.ClientAdvancements
信息
- 全限定名:net.minecraft.client.multiplayer.ClientAdvancements
- 类型:public class
- 包:net.minecraft.client.multiplayer
- 源码路径:src/main/java/net/minecraft/client/multiplayer/ClientAdvancements.java
- 起始行号:L25
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L26 - 说明:
TODO
- 类型:
-
minecraft- 类型:
Minecraft - 修饰符:
private final - 源码定位:
L27 - 说明:
TODO
- 类型:
-
telemetryManager- 类型:
WorldSessionTelemetryManager - 修饰符:
private final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
tree- 类型:
AdvancementTree - 修饰符:
private final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
progress- 类型:
Map<AdvancementHolder,AdvancementProgress> - 修饰符:
private final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
listener- 类型:
ClientAdvancements.Listener - 修饰符:
private - 源码定位:
L31 - 说明:
TODO
- 类型:
-
selectedTab- 类型:
AdvancementHolder - 修饰符:
private - 源码定位:
L32 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.multiplayer.ClientAdvancements.Listener- 类型:
interface - 修饰符:
public - 源码定位:
L112 - 说明:
TODO
- 类型:
构造器
public ClientAdvancements(Minecraft minecraft, WorldSessionTelemetryManager telemetryManager) @ L34
- 构造器名:ClientAdvancements
- 源码定位:L34
- 修饰符:public
参数:
- minecraft: Minecraft
- telemetryManager: WorldSessionTelemetryManager
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void update(ClientboundUpdateAdvancementsPacket packet) @ L39
- 方法名:update
- 源码定位:L39
- 返回类型:void
- 修饰符:public
参数:
- packet: ClientboundUpdateAdvancementsPacket
说明:
TODO
public AdvancementTree getTree() @ L74
- 方法名:getTree
- 源码定位:L74
- 返回类型:AdvancementTree
- 修饰符:public
参数:
- 无
说明:
TODO
public void setSelectedTab(AdvancementHolder selectedTab, boolean tellServer) @ L78
- 方法名:setSelectedTab
- 源码定位:L78
- 返回类型:void
- 修饰符:public
参数:
- selectedTab: AdvancementHolder
- tellServer: boolean
说明:
TODO
public void setListener(ClientAdvancements.Listener listener) @ L92
- 方法名:setListener
- 源码定位:L92
- 返回类型:void
- 修饰符:public
参数:
- listener: ClientAdvancements.Listener
说明:
TODO
public AdvancementHolder get(Identifier id) @ L106
- 方法名:get
- 源码定位:L106
- 返回类型:AdvancementHolder
- 修饰符:public
参数:
- id: Identifier
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class ClientAdvancements {
private static final Logger LOGGER = LogUtils.getLogger();
private final Minecraft minecraft;
private final WorldSessionTelemetryManager telemetryManager;
private final AdvancementTree tree = new AdvancementTree();
private final Map<AdvancementHolder, AdvancementProgress> progress = new Object2ObjectOpenHashMap<>();
private ClientAdvancements.@Nullable Listener listener;
private @Nullable AdvancementHolder selectedTab;
public ClientAdvancements(Minecraft minecraft, WorldSessionTelemetryManager telemetryManager) {
this.minecraft = minecraft;
this.telemetryManager = telemetryManager;
}
public void update(ClientboundUpdateAdvancementsPacket packet) {
if (packet.shouldReset()) {
this.tree.clear();
this.progress.clear();
}
this.tree.remove(packet.getRemoved());
this.tree.addAll(packet.getAdded());
for (Entry<Identifier, AdvancementProgress> entry : packet.getProgress().entrySet()) {
AdvancementNode node = this.tree.get(entry.getKey());
if (node != null) {
AdvancementProgress progress = entry.getValue();
progress.update(node.advancement().requirements());
this.progress.put(node.holder(), progress);
if (this.listener != null) {
this.listener.onUpdateAdvancementProgress(node, progress);
}
if (!packet.shouldReset() && progress.isDone()) {
if (this.minecraft.level != null) {
this.telemetryManager.onAdvancementDone(this.minecraft.level, node.holder());
}
Optional<DisplayInfo> display = node.advancement().display();
if (packet.shouldShowAdvancements() && display.isPresent() && display.get().shouldShowToast()) {
this.minecraft.getToastManager().addToast(new AdvancementToast(node.holder()));
}
}
} else {
LOGGER.warn("Server informed client about progress for unknown advancement {}", entry.getKey());
}
}
}
public AdvancementTree getTree() {
return this.tree;
}
public void setSelectedTab(@Nullable AdvancementHolder selectedTab, boolean tellServer) {
ClientPacketListener connection = this.minecraft.getConnection();
if (connection != null && selectedTab != null && tellServer) {
connection.send(ServerboundSeenAdvancementsPacket.openedTab(selectedTab));
}
if (this.selectedTab != selectedTab) {
this.selectedTab = selectedTab;
if (this.listener != null) {
this.listener.onSelectedTabChanged(selectedTab);
}
}
}
public void setListener(ClientAdvancements.@Nullable Listener listener) {
this.listener = listener;
this.tree.setListener(listener);
if (listener != null) {
this.progress.forEach((holder, progress) -> {
AdvancementNode node = this.tree.get(holder);
if (node != null) {
listener.onUpdateAdvancementProgress(node, progress);
}
});
listener.onSelectedTabChanged(this.selectedTab);
}
}
public @Nullable AdvancementHolder get(Identifier id) {
AdvancementNode node = this.tree.get(id);
return node != null ? node.holder() : null;
}
@OnlyIn(Dist.CLIENT)
public interface Listener extends AdvancementTree.Listener {
void onUpdateAdvancementProgress(AdvancementNode advancement, AdvancementProgress progress);
void onSelectedTabChanged(@Nullable AdvancementHolder selectedTab);
}
}引用的其他类
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
字段/构造调用/返回值 - 关联成员:
AdvancementTree()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
AdvancementToast()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
ClientboundUpdateAdvancementsPacket
- 引用位置:
参数
- 引用位置:
-
ServerboundSeenAdvancementsPacket
- 引用位置:
方法调用 - 关联成员:
ServerboundSeenAdvancementsPacket.openedTab()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: