ServerScoreboard.java
net.minecraft.server.ServerScoreboard
信息
- 全限定名:net.minecraft.server.ServerScoreboard
- 类型:public class
- 包:net.minecraft.server
- 源码路径:src/main/java/net/minecraft/server/ServerScoreboard.java
- 起始行号:L27
- 继承:Scoreboard
- 职责:
TODO
字段/常量
-
server- 类型:
MinecraftServer - 修饰符:
private final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
trackedObjectives- 类型:
Set<Objective> - 修饰符:
private final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
dirty- 类型:
boolean - 修饰符:
private - 源码定位:
L30 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public ServerScoreboard(MinecraftServer server) @ L32
- 构造器名:ServerScoreboard
- 源码定位:L32
- 修饰符:public
参数:
- server: MinecraftServer
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void load(ScoreboardSaveData.Packed data) @ L36
- 方法名:load
- 源码定位:L36
- 返回类型:void
- 修饰符:public
参数:
- data: ScoreboardSaveData.Packed
说明:
TODO
private ScoreboardSaveData.Packed store() @ L46
- 方法名:store
- 源码定位:L46
- 返回类型:ScoreboardSaveData.Packed
- 修饰符:private
参数:
- 无
说明:
TODO
protected void onScoreChanged(ScoreHolder owner, Objective objective, Score score) @ L50
- 方法名:onScoreChanged
- 源码定位:L50
- 返回类型:void
- 修饰符:protected
参数:
- owner: ScoreHolder
- objective: Objective
- score: Score
说明:
TODO
protected void onScoreLockChanged(ScoreHolder owner, Objective objective) @ L70
- 方法名:onScoreLockChanged
- 源码定位:L70
- 返回类型:void
- 修饰符:protected
参数:
- owner: ScoreHolder
- objective: Objective
说明:
TODO
public void onPlayerRemoved(ScoreHolder player) @ L76
- 方法名:onPlayerRemoved
- 源码定位:L76
- 返回类型:void
- 修饰符:public
参数:
- player: ScoreHolder
说明:
TODO
public void onPlayerScoreRemoved(ScoreHolder player, Objective objective) @ L83
- 方法名:onPlayerScoreRemoved
- 源码定位:L83
- 返回类型:void
- 修饰符:public
参数:
- player: ScoreHolder
- objective: Objective
说明:
TODO
public void setDisplayObjective(DisplaySlot slot, Objective objective) @ L93
- 方法名:setDisplayObjective
- 源码定位:L93
- 返回类型:void
- 修饰符:public
参数:
- slot: DisplaySlot
- objective: Objective
说明:
TODO
public boolean addPlayerToTeam(String player, PlayerTeam team) @ L116
- 方法名:addPlayerToTeam
- 源码定位:L116
- 返回类型:boolean
- 修饰符:public
参数:
- player: String
- team: PlayerTeam
说明:
TODO
public void removePlayerFromTeam(String player, PlayerTeam team) @ L130
- 方法名:removePlayerFromTeam
- 源码定位:L130
- 返回类型:void
- 修饰符:public
参数:
- player: String
- team: PlayerTeam
说明:
TODO
public void onObjectiveAdded(Objective objective) @ L138
- 方法名:onObjectiveAdded
- 源码定位:L138
- 返回类型:void
- 修饰符:public
参数:
- objective: Objective
说明:
TODO
public void onObjectiveChanged(Objective objective) @ L144
- 方法名:onObjectiveChanged
- 源码定位:L144
- 返回类型:void
- 修饰符:public
参数:
- objective: Objective
说明:
TODO
public void onObjectiveRemoved(Objective objective) @ L154
- 方法名:onObjectiveRemoved
- 源码定位:L154
- 返回类型:void
- 修饰符:public
参数:
- objective: Objective
说明:
TODO
public void onTeamAdded(PlayerTeam team) @ L164
- 方法名:onTeamAdded
- 源码定位:L164
- 返回类型:void
- 修饰符:public
参数:
- team: PlayerTeam
说明:
TODO
public void onTeamChanged(PlayerTeam team) @ L171
- 方法名:onTeamChanged
- 源码定位:L171
- 返回类型:void
- 修饰符:public
参数:
- team: PlayerTeam
说明:
TODO
public void onTeamRemoved(PlayerTeam team) @ L179
- 方法名:onTeamRemoved
- 源码定位:L179
- 返回类型:void
- 修饰符:public
参数:
- team: PlayerTeam
说明:
TODO
protected void setDirty() @ L187
- 方法名:setDirty
- 源码定位:L187
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
public void storeToSaveDataIfDirty(ScoreboardSaveData saveData) @ L191
- 方法名:storeToSaveDataIfDirty
- 源码定位:L191
- 返回类型:void
- 修饰符:public
参数:
- saveData: ScoreboardSaveData
说明:
TODO
public List<Packet<?>> getStartTrackingPackets(Objective objective) @ L198
- 方法名:getStartTrackingPackets
- 源码定位:L198
- 返回类型:List<Packet<?>>
- 修饰符:public
参数:
- objective: Objective
说明:
TODO
public void startTrackingObjective(Objective objective) @ L219
- 方法名:startTrackingObjective
- 源码定位:L219
- 返回类型:void
- 修饰符:public
参数:
- objective: Objective
说明:
TODO
public List<Packet<?>> getStopTrackingPackets(Objective objective) @ L231
- 方法名:getStopTrackingPackets
- 源码定位:L231
- 返回类型:List<Packet<?>>
- 修饰符:public
参数:
- objective: Objective
说明:
TODO
public void stopTrackingObjective(Objective objective) @ L244
- 方法名:stopTrackingObjective
- 源码定位:L244
- 返回类型:void
- 修饰符:public
参数:
- objective: Objective
说明:
TODO
public int getObjectiveDisplaySlotCount(Objective objective) @ L256
- 方法名:getObjectiveDisplaySlotCount
- 源码定位:L256
- 返回类型:int
- 修饰符:public
参数:
- objective: Objective
说明:
TODO
private void updatePlayerWaypoint(String player) @ L268
- 方法名:updatePlayerWaypoint
- 源码定位:L268
- 返回类型:void
- 修饰符:private
参数:
- player: String
说明:
TODO
private void updateTeamWaypoints(PlayerTeam team) @ L275
- 方法名:updateTeamWaypoints
- 源码定位:L275
- 返回类型:void
- 修饰符:private
参数:
- team: PlayerTeam
说明:
TODO
代码
public class ServerScoreboard extends Scoreboard {
private final MinecraftServer server;
private final Set<Objective> trackedObjectives = Sets.newHashSet();
private boolean dirty;
public ServerScoreboard(MinecraftServer server) {
this.server = server;
}
public void load(ScoreboardSaveData.Packed data) {
data.objectives().forEach(x$0 -> this.loadObjective(x$0));
data.scores().forEach(x$0 -> this.loadPlayerScore(x$0));
data.displaySlots().forEach((slot, name) -> {
Objective objective = this.getObjective(name);
this.setDisplayObjective(slot, objective);
});
data.teams().forEach(x$0 -> this.loadPlayerTeam(x$0));
}
private ScoreboardSaveData.Packed store() {
return new ScoreboardSaveData.Packed(this.packObjectives(), this.packPlayerScores(), this.packDisplaySlots(), this.packPlayerTeams());
}
@Override
protected void onScoreChanged(ScoreHolder owner, Objective objective, Score score) {
super.onScoreChanged(owner, objective, score);
if (this.trackedObjectives.contains(objective)) {
this.server
.getPlayerList()
.broadcastAll(
new ClientboundSetScorePacket(
owner.getScoreboardName(),
objective.getName(),
score.value(),
Optional.ofNullable(score.display()),
Optional.ofNullable(score.numberFormat())
)
);
}
this.setDirty();
}
@Override
protected void onScoreLockChanged(ScoreHolder owner, Objective objective) {
super.onScoreLockChanged(owner, objective);
this.setDirty();
}
@Override
public void onPlayerRemoved(ScoreHolder player) {
super.onPlayerRemoved(player);
this.server.getPlayerList().broadcastAll(new ClientboundResetScorePacket(player.getScoreboardName(), null));
this.setDirty();
}
@Override
public void onPlayerScoreRemoved(ScoreHolder player, Objective objective) {
super.onPlayerScoreRemoved(player, objective);
if (this.trackedObjectives.contains(objective)) {
this.server.getPlayerList().broadcastAll(new ClientboundResetScorePacket(player.getScoreboardName(), objective.getName()));
}
this.setDirty();
}
@Override
public void setDisplayObjective(DisplaySlot slot, @Nullable Objective objective) {
Objective old = this.getDisplayObjective(slot);
super.setDisplayObjective(slot, objective);
if (old != objective && old != null) {
if (this.getObjectiveDisplaySlotCount(old) > 0) {
this.server.getPlayerList().broadcastAll(new ClientboundSetDisplayObjectivePacket(slot, objective));
} else {
this.stopTrackingObjective(old);
}
}
if (objective != null) {
if (this.trackedObjectives.contains(objective)) {
this.server.getPlayerList().broadcastAll(new ClientboundSetDisplayObjectivePacket(slot, objective));
} else {
this.startTrackingObjective(objective);
}
}
this.setDirty();
}
@Override
public boolean addPlayerToTeam(String player, PlayerTeam team) {
if (super.addPlayerToTeam(player, team)) {
this.server
.getPlayerList()
.broadcastAll(ClientboundSetPlayerTeamPacket.createPlayerPacket(team, player, ClientboundSetPlayerTeamPacket.Action.ADD));
this.updatePlayerWaypoint(player);
this.setDirty();
return true;
} else {
return false;
}
}
@Override
public void removePlayerFromTeam(String player, PlayerTeam team) {
super.removePlayerFromTeam(player, team);
this.server.getPlayerList().broadcastAll(ClientboundSetPlayerTeamPacket.createPlayerPacket(team, player, ClientboundSetPlayerTeamPacket.Action.REMOVE));
this.updatePlayerWaypoint(player);
this.setDirty();
}
@Override
public void onObjectiveAdded(Objective objective) {
super.onObjectiveAdded(objective);
this.setDirty();
}
@Override
public void onObjectiveChanged(Objective objective) {
super.onObjectiveChanged(objective);
if (this.trackedObjectives.contains(objective)) {
this.server.getPlayerList().broadcastAll(new ClientboundSetObjectivePacket(objective, 2));
}
this.setDirty();
}
@Override
public void onObjectiveRemoved(Objective objective) {
super.onObjectiveRemoved(objective);
if (this.trackedObjectives.contains(objective)) {
this.stopTrackingObjective(objective);
}
this.setDirty();
}
@Override
public void onTeamAdded(PlayerTeam team) {
super.onTeamAdded(team);
this.server.getPlayerList().broadcastAll(ClientboundSetPlayerTeamPacket.createAddOrModifyPacket(team, true));
this.setDirty();
}
@Override
public void onTeamChanged(PlayerTeam team) {
super.onTeamChanged(team);
this.server.getPlayerList().broadcastAll(ClientboundSetPlayerTeamPacket.createAddOrModifyPacket(team, false));
this.updateTeamWaypoints(team);
this.setDirty();
}
@Override
public void onTeamRemoved(PlayerTeam team) {
super.onTeamRemoved(team);
this.server.getPlayerList().broadcastAll(ClientboundSetPlayerTeamPacket.createRemovePacket(team));
this.updateTeamWaypoints(team);
this.setDirty();
}
protected void setDirty() {
this.dirty = true;
}
public void storeToSaveDataIfDirty(ScoreboardSaveData saveData) {
if (this.dirty) {
this.dirty = false;
saveData.setData(this.store());
}
}
public List<Packet<?>> getStartTrackingPackets(Objective objective) {
List<Packet<?>> packets = Lists.newArrayList();
packets.add(new ClientboundSetObjectivePacket(objective, 0));
for (DisplaySlot slot : DisplaySlot.values()) {
if (this.getDisplayObjective(slot) == objective) {
packets.add(new ClientboundSetDisplayObjectivePacket(slot, objective));
}
}
for (PlayerScoreEntry score : this.listPlayerScores(objective)) {
packets.add(
new ClientboundSetScorePacket(
score.owner(), objective.getName(), score.value(), Optional.ofNullable(score.display()), Optional.ofNullable(score.numberFormatOverride())
)
);
}
return packets;
}
public void startTrackingObjective(Objective objective) {
List<Packet<?>> packets = this.getStartTrackingPackets(objective);
for (ServerPlayer player : this.server.getPlayerList().getPlayers()) {
for (Packet<?> packet : packets) {
player.connection.send(packet);
}
}
this.trackedObjectives.add(objective);
}
public List<Packet<?>> getStopTrackingPackets(Objective objective) {
List<Packet<?>> packets = Lists.newArrayList();
packets.add(new ClientboundSetObjectivePacket(objective, 1));
for (DisplaySlot slot : DisplaySlot.values()) {
if (this.getDisplayObjective(slot) == objective) {
packets.add(new ClientboundSetDisplayObjectivePacket(slot, objective));
}
}
return packets;
}
public void stopTrackingObjective(Objective objective) {
List<Packet<?>> packets = this.getStopTrackingPackets(objective);
for (ServerPlayer player : this.server.getPlayerList().getPlayers()) {
for (Packet<?> packet : packets) {
player.connection.send(packet);
}
}
this.trackedObjectives.remove(objective);
}
public int getObjectiveDisplaySlotCount(Objective objective) {
int count = 0;
for (DisplaySlot slot : DisplaySlot.values()) {
if (this.getDisplayObjective(slot) == objective) {
count++;
}
}
return count;
}
private void updatePlayerWaypoint(String player) {
ServerPlayer serverPlayer = this.server.getPlayerList().getPlayerByName(player);
if (serverPlayer != null) {
serverPlayer.level().getWaypointManager().remakeConnections(serverPlayer);
}
}
private void updateTeamWaypoints(PlayerTeam team) {
for (ServerLevel level : this.server.getAllLevels()) {
team.getPlayers()
.stream()
.map(name -> this.server.getPlayerList().getPlayerByName(name))
.filter(Objects::nonNull)
.forEach(player -> level.getWaypointManager().remakeConnections(player));
}
}
}引用的其他类
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ClientboundResetScorePacket()
- 引用位置:
-
ClientboundSetDisplayObjectivePacket
- 引用位置:
构造调用 - 关联成员:
ClientboundSetDisplayObjectivePacket()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ClientboundSetObjectivePacket()
- 引用位置:
-
ClientboundSetPlayerTeamPacket
- 引用位置:
方法调用 - 关联成员:
ClientboundSetPlayerTeamPacket.createAddOrModifyPacket(), ClientboundSetPlayerTeamPacket.createPlayerPacket(), ClientboundSetPlayerTeamPacket.createRemovePacket()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
ClientboundSetScorePacket()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
DisplaySlot.values()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数/方法调用/构造调用/返回值 - 关联成员:
Packed(), ScoreboardSaveData.Packed()
- 引用位置: