ServerList.java
net.minecraft.client.multiplayer.ServerList
信息
- 全限定名:net.minecraft.client.multiplayer.ServerList
- 类型:public class
- 包:net.minecraft.client.multiplayer
- 源码路径:src/main/java/net/minecraft/client/multiplayer/ServerList.java
- 起始行号:L21
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L22 - 说明:
TODO
- 类型:
-
IO_EXECUTOR- 类型:
ConsecutiveExecutor - 修饰符:
private static final - 源码定位:
L23 - 说明:
TODO
- 类型:
-
MAX_HIDDEN_SERVERS- 类型:
int - 修饰符:
private static final - 源码定位:
L24 - 说明:
TODO
- 类型:
-
minecraft- 类型:
Minecraft - 修饰符:
private final - 源码定位:
L25 - 说明:
TODO
- 类型:
-
serverList- 类型:
List<ServerData> - 修饰符:
private final - 源码定位:
L26 - 说明:
TODO
- 类型:
-
hiddenServerList- 类型:
List<ServerData> - 修饰符:
private final - 源码定位:
L27 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public ServerList(Minecraft minecraft) @ L29
- 构造器名:ServerList
- 源码定位:L29
- 修饰符:public
参数:
- minecraft: Minecraft
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void load() @ L33
- 方法名:load
- 源码定位:L33
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void save() @ L55
- 方法名:save
- 源码定位:L55
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public ServerData get(int index) @ L84
- 方法名:get
- 源码定位:L84
- 返回类型:ServerData
- 修饰符:public
参数:
- index: int
说明:
TODO
public ServerData get(String ip) @ L88
- 方法名:get
- 源码定位:L88
- 返回类型:ServerData
- 修饰符:public
参数:
- ip: String
说明:
TODO
public ServerData unhide(String ip) @ L104
- 方法名:unhide
- 源码定位:L104
- 返回类型:ServerData
- 修饰符:public
参数:
- ip: String
说明:
TODO
public void remove(ServerData thing) @ L117
- 方法名:remove
- 源码定位:L117
- 返回类型:void
- 修饰符:public
参数:
- thing: ServerData
说明:
TODO
public void add(ServerData server, boolean hidden) @ L123
- 方法名:add
- 源码定位:L123
- 返回类型:void
- 修饰符:public
参数:
- server: ServerData
- hidden: boolean
说明:
TODO
public int size() @ L135
- 方法名:size
- 源码定位:L135
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public void swap(int a, int b) @ L139
- 方法名:swap
- 源码定位:L139
- 返回类型:void
- 修饰符:public
参数:
- a: int
- b: int
说明:
TODO
public void replace(int id, ServerData data) @ L146
- 方法名:replace
- 源码定位:L146
- 返回类型:void
- 修饰符:public
参数:
- id: int
- data: ServerData
说明:
TODO
private static boolean set(ServerData data, List<ServerData> list) @ L150
- 方法名:set
- 源码定位:L150
- 返回类型:boolean
- 修饰符:private static
参数:
- data: ServerData
- list: List
说明:
TODO
public static void saveSingleServer(ServerData data) @ L162
- 方法名:saveSingleServer
- 源码定位:L162
- 返回类型:void
- 修饰符:public static
参数:
- data: ServerData
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class ServerList {
private static final Logger LOGGER = LogUtils.getLogger();
private static final ConsecutiveExecutor IO_EXECUTOR = new ConsecutiveExecutor(Util.backgroundExecutor(), "server-list-io");
private static final int MAX_HIDDEN_SERVERS = 16;
private final Minecraft minecraft;
private final List<ServerData> serverList = Lists.newArrayList();
private final List<ServerData> hiddenServerList = Lists.newArrayList();
public ServerList(Minecraft minecraft) {
this.minecraft = minecraft;
}
public void load() {
try {
this.serverList.clear();
this.hiddenServerList.clear();
CompoundTag tag = NbtIo.read(this.minecraft.gameDirectory.toPath().resolve("servers.dat"));
if (tag == null) {
return;
}
tag.getListOrEmpty("servers").compoundStream().forEach(serverTag -> {
ServerData serverData = ServerData.read(serverTag);
if (serverTag.getBooleanOr("hidden", false)) {
this.hiddenServerList.add(serverData);
} else {
this.serverList.add(serverData);
}
});
} catch (Exception var2) {
LOGGER.error("Couldn't load server list", (Throwable)var2);
}
}
public void save() {
try {
ListTag serverTags = new ListTag();
for (ServerData server : this.serverList) {
CompoundTag serverTag = server.write();
serverTag.putBoolean("hidden", false);
serverTags.add(serverTag);
}
for (ServerData server : this.hiddenServerList) {
CompoundTag serverTag = server.write();
serverTag.putBoolean("hidden", true);
serverTags.add(serverTag);
}
CompoundTag tag = new CompoundTag();
tag.put("servers", serverTags);
Path gameDirectoryPath = this.minecraft.gameDirectory.toPath();
Path newFile = Files.createTempFile(gameDirectoryPath, "servers", ".dat");
NbtIo.write(tag, newFile);
Path oldFile = gameDirectoryPath.resolve("servers.dat_old");
Path currentFile = gameDirectoryPath.resolve("servers.dat");
Util.safeReplaceFile(currentFile, newFile, oldFile);
} catch (Exception var7) {
LOGGER.error("Couldn't save server list", (Throwable)var7);
}
}
public ServerData get(int index) {
return this.serverList.get(index);
}
public @Nullable ServerData get(String ip) {
for (ServerData serverData : this.serverList) {
if (serverData.ip.equals(ip)) {
return serverData;
}
}
for (ServerData serverDatax : this.hiddenServerList) {
if (serverDatax.ip.equals(ip)) {
return serverDatax;
}
}
return null;
}
public @Nullable ServerData unhide(String ip) {
for (int i = 0; i < this.hiddenServerList.size(); i++) {
ServerData serverData = this.hiddenServerList.get(i);
if (serverData.ip.equals(ip)) {
this.hiddenServerList.remove(i);
this.serverList.add(serverData);
return serverData;
}
}
return null;
}
public void remove(ServerData thing) {
if (!this.serverList.remove(thing)) {
this.hiddenServerList.remove(thing);
}
}
public void add(ServerData server, boolean hidden) {
if (hidden) {
this.hiddenServerList.add(0, server);
while (this.hiddenServerList.size() > 16) {
this.hiddenServerList.remove(this.hiddenServerList.size() - 1);
}
} else {
this.serverList.add(server);
}
}
public int size() {
return this.serverList.size();
}
public void swap(int a, int b) {
ServerData swap = this.get(a);
this.serverList.set(a, this.get(b));
this.serverList.set(b, swap);
this.save();
}
public void replace(int id, ServerData data) {
this.serverList.set(id, data);
}
private static boolean set(ServerData data, List<ServerData> list) {
for (int i = 0; i < list.size(); i++) {
ServerData target = list.get(i);
if (Objects.equals(target.name, data.name) && target.ip.equals(data.ip)) {
list.set(i, data);
return true;
}
}
return false;
}
public static void saveSingleServer(ServerData data) {
IO_EXECUTOR.schedule(() -> {
ServerList list = new ServerList(Minecraft.getInstance());
list.load();
if (!set(data, list.serverList)) {
set(data, list.hiddenServerList);
}
list.save();
});
}
}引用的其他类
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用/返回值 - 关联成员:
ServerData.read()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
CompoundTag()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ListTag()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
NbtIo.read(), NbtIo.write()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.backgroundExecutor(), Util.safeReplaceFile()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
ConsecutiveExecutor()
- 引用位置: