Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.smallaswater.tips</groupId>
<artifactId>Tips</artifactId>
<version>2.2.3-SNAPSHOT</version>
<version>2.2.4-SNAPSHOT</version>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

快照版本暂时不需要修改版本号



<properties>
Expand Down
7 changes: 5 additions & 2 deletions src/main/java/tip/tasks/BossBarAllPlayerTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,13 @@ public BossBarAllPlayerTask(Player player) {
}

public void onRun() {
if (player == null || !player.isOnline()) {
if (player == null || !player.isOnline() || !player.spawned) {
return;
}
BossBarApi.createBossBar(player);
// 检查是否需要重新创建BossBar(跨服后apis中可能没有当前player)
if (!Main.getInstance().apis.containsKey(player)) {
BossBarApi.createBossBar(player);
}
BossBarTask task = Main.getInstance().tasks.getIfPresent(player);
if (task == null) {
task = new BossBarTask();
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/tip/tasks/BroadCastPlayerTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public BroadCastPlayerTask(Player owner) {
}

public void onRun() {
if (player == null || !player.isOnline()) {
if (player == null || !player.isOnline() || !player.spawned) {
return;
}
BroadcastMessage message = (BroadcastMessage) Api.getSendPlayerMessage(player.getName(), player.level.getFolderName(), BaseMessage.BaseTypes.BROADCAST);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/tip/tasks/NameTagTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public NameTagTask(Player player) {
}

public void onRun() {
if (player == null || !player.isOnline()) {
if (player == null || !player.isOnline() || !player.spawned) {
return;
}
NameTagMessage nameTagMessage = (NameTagMessage) Api.getSendPlayerMessage(player.getName(), player.level.getFolderName(), BaseMessage.BaseTypes.NAME_TAG);
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/tip/tasks/ScoreBoardTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ public void onRun() {
if (this.scoreboard == null) {
return;
}
// for (Player player : Server.getInstance().getOnlinePlayers().values()) {
if (player == null || !player.isOnline()) {
return;
}
Expand All @@ -58,19 +57,20 @@ public void onRun() {
return;
}

if (player.isOnline()) {
if (player.isOnline() && player.spawned) {
try {
String title = Api.strReplace(message.getTitle(), player);
ArrayList<String> list = new ArrayList<>();
for (String ms : message.getMessages()) {
list.add(Api.strReplace(ms, player));
}
// 每次都先关闭再显示,强制GameCore重新发送数据包
this.scoreboard.closeScoreboard(player);
this.scoreboard.showScoreboard(player, title, list);
Main.getInstance().scoreboards.add(player);
} catch (Exception ignored) {
}
}
// }
}

}
3 changes: 3 additions & 0 deletions src/main/java/tip/tasks/TipTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ public void run() {
if ((sendPlayerClass = sendPlayerClassCache.getIfPresent(player)) == null) {
sendPlayerClass = new SendPlayerClass(player, getOwner());
sendPlayerClassCache.put(player, sendPlayerClass);
} else {
// 更新player引用,解决跨服后旧player对象失效的问题
sendPlayerClass.updatePlayer(player);
}
sendPlayerClass.init();
} catch (Exception e) {
Expand Down
27 changes: 15 additions & 12 deletions src/main/java/tip/utils/SendPlayerClass.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ public SendPlayerClass(Player player,Main main){

}

public void updatePlayer(Player player) {
this.player = player;
}

private Main getOwner() {
return main;
}
Expand All @@ -40,6 +44,12 @@ public void init(){
if(player == null || !player.isOnline()){
return;
}

// 等待玩家完全生成后再发送显示数据
if(!player.spawned){
return;
}

TipMessage tipMessage;
tipMessage = (TipMessage) Api.getSendPlayerMessage(player.getName(),player.level.getFolderName(),
BaseMessage.BaseTypes.TIP);
Expand All @@ -48,21 +58,14 @@ public void init(){
sendTip(player, Api.strReplace(tipMessage.getMessage(), player), tipMessage.getShowType());
}
}
if(bossTask == null){
bossTask = new BossBarAllPlayerTask(player);
}
// 每次都重新创建子Task,确保使用最新的player引用
bossTask = new BossBarAllPlayerTask(player);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

应当更新player而不是直接new新的,这会导致gc压力提升

bossTask.onRun();
if(broadtask == null){
broadtask = new BroadCastTask(player);
}
broadtask = new BroadCastTask(player);
broadtask.onRun();
if(nametask == null){
nametask = new NameTagTask(player);
}
nametask = new NameTagTask(player);
nametask.onRun();
if(scoreTask == null){
scoreTask = new ScoreBoardTask(player,getOwner());
}
scoreTask = new ScoreBoardTask(player,getOwner());
scoreTask.onRun();

}
Expand Down