Skip to content

Commit 162de14

Browse files
authored
Merge pull request #100 from huanmeng-qwq/feat/refresh
Add refresh-related methods
2 parents 38de97b + 5f5b3ef commit 162de14

File tree

9 files changed

+120
-18
lines changed

9 files changed

+120
-18
lines changed

api/src/main/java/net/megavex/scoreboardlibrary/api/noop/NoopScoreboardObjective.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ public void defaultScoreFormat(@Nullable ScoreFormat defaultScoreFormat) {
5252
this.defaultScoreFormat = defaultScoreFormat;
5353
}
5454

55+
@Override
56+
public void refreshProperties() {
57+
}
58+
5559
@Override
5660
public @Nullable ObjectiveScore scoreInfo(@NotNull String entry) {
5761
return scores.get(entry);
@@ -68,4 +72,8 @@ public void defaultScoreFormat(@Nullable ScoreFormat defaultScoreFormat) {
6872
scores.remove(entry);
6973
return this;
7074
}
75+
76+
@Override
77+
public void refreshScore(@NotNull String entry) {
78+
}
7179
}

api/src/main/java/net/megavex/scoreboardlibrary/api/noop/NoopSidebar.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ public void line(int index, @Nullable ComponentLike value, @Nullable ScoreFormat
8181
lines[index] = value == null ? null : value.asComponent();
8282
}
8383

84+
@Override
85+
public void refreshLine(@Range(from = 0, to = Integer.MAX_VALUE - 1) final int index) {
86+
87+
}
8488
@Override
8589
public @Nullable Component line(int line) {
8690
checkLineBounds(line);
@@ -100,6 +104,11 @@ public void title(@NotNull ComponentLike title) {
100104
this.title = title.asComponent();
101105
}
102106

107+
@Override
108+
public void refreshTitle() {
109+
110+
}
111+
103112
private void checkClosed() {
104113
if (closed) {
105114
throw new IllegalStateException("NoopSidebar is closed");

api/src/main/java/net/megavex/scoreboardlibrary/api/noop/NoopTeamDisplay.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,8 @@ public boolean canSeeFriendlyInvisibles() {
140140
this.playerColor = playerColor;
141141
return this;
142142
}
143+
144+
@Override
145+
public void refresh() {
146+
}
143147
}

api/src/main/java/net/megavex/scoreboardlibrary/api/objective/ScoreboardObjective.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ public interface ScoreboardObjective {
4949
*/
5050
void defaultScoreFormat(@Nullable ScoreFormat defaultScoreFormat);
5151

52+
/**
53+
* Refreshes the objective's {@link #value()} and {@link #defaultScoreFormat()}, re-rendering any {@link net.kyori.adventure.text.TranslatableComponent}s.
54+
*/
55+
void refreshProperties();
56+
5257
/**
5358
* Get the score for an entry, or null if the entry has no score.
5459
*
@@ -141,4 +146,11 @@ public interface ScoreboardObjective {
141146
* @param entry entry to remove score of
142147
*/
143148
@NotNull ScoreboardObjective removeScore(@NotNull String entry);
149+
150+
/**
151+
* Refreshes a score, re-rendering any {@link net.kyori.adventure.text.TranslatableComponent}s inside its format.
152+
*
153+
* @param entry entry to refresh score of
154+
*/
155+
void refreshScore(@NotNull String entry);
144156
}

api/src/main/java/net/megavex/scoreboardlibrary/api/sidebar/Sidebar.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
package net.megavex.scoreboardlibrary.api.sidebar;
22

3-
import net.kyori.adventure.text.Component;
4-
import net.kyori.adventure.text.ComponentLike;
53
import net.megavex.scoreboardlibrary.api.ScoreboardLibrary;
64
import net.megavex.scoreboardlibrary.api.objective.ScoreFormat;
5+
import java.util.Collection;
6+
import java.util.Locale;
7+
import net.kyori.adventure.text.Component;
8+
import net.kyori.adventure.text.ComponentLike;
79
import org.bukkit.entity.Player;
810
import org.jetbrains.annotations.ApiStatus;
911
import org.jetbrains.annotations.NotNull;
1012
import org.jetbrains.annotations.Nullable;
1113
import org.jetbrains.annotations.Range;
1214

13-
import java.util.Collection;
14-
import java.util.Locale;
15-
1615
/**
1716
* Represents a sidebar.
1817
* To get an instance of this interface, use {@link ScoreboardLibrary#createSidebar()}.
@@ -31,7 +30,8 @@ public interface Sidebar {
3130
/**
3231
* @return max amount of lines this sidebar can have
3332
*/
34-
@Range(from = 1, to = Integer.MAX_VALUE) int maxLines();
33+
@Range(from = 1, to = Integer.MAX_VALUE)
34+
int maxLines();
3535

3636
/**
3737
* @return objective name used by this sidebar
@@ -90,6 +90,22 @@ default void clearLines() {
9090
}
9191
}
9292

93+
/**
94+
* Refreshes a specific line, re-rendering any {@link net.kyori.adventure.text.TranslatableComponent}s.
95+
*
96+
* @param index line index
97+
*/
98+
void refreshLine(@Range(from = 0, to = Integer.MAX_VALUE - 1) int index);
99+
100+
/**
101+
* Refreshes all lines in this sidebar, re-rendering any {@link net.kyori.adventure.text.TranslatableComponent}s.
102+
*/
103+
default void refreshLines() {
104+
for (int i = 0; i < maxLines(); i++) {
105+
refreshLine(i);
106+
}
107+
}
108+
93109
// Title
94110

95111
/**
@@ -104,6 +120,11 @@ default void clearLines() {
104120
*/
105121
void title(@NotNull ComponentLike title);
106122

123+
/**
124+
* Refresh the title of the sidebar, re-rendering any {@link net.kyori.adventure.text.TranslatableComponent}s.
125+
*/
126+
void refreshTitle();
127+
107128
// Players
108129

109130
/**

api/src/main/java/net/megavex/scoreboardlibrary/api/team/TeamDisplay.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,4 +170,9 @@ public interface TeamDisplay {
170170
* @since Minecraft 1.8
171171
*/
172172
@NotNull TeamDisplay playerColor(@Nullable NamedTextColor playerColor);
173+
174+
/**
175+
* Refreshes the team display, re-rendering any {@link net.kyori.adventure.text.TranslatableComponent}s.
176+
*/
177+
void refresh();
173178
}

implementation/src/main/java/net/megavex/scoreboardlibrary/implementation/objective/ScoreboardObjectiveImpl.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
package net.megavex.scoreboardlibrary.implementation.objective;
22

3-
import net.kyori.adventure.text.Component;
4-
import net.kyori.adventure.text.ComponentLike;
53
import net.megavex.scoreboardlibrary.api.objective.ObjectiveRenderType;
64
import net.megavex.scoreboardlibrary.api.objective.ObjectiveScore;
75
import net.megavex.scoreboardlibrary.api.objective.ScoreFormat;
86
import net.megavex.scoreboardlibrary.api.objective.ScoreboardObjective;
97
import net.megavex.scoreboardlibrary.implementation.packetAdapter.PropertiesPacketType;
108
import net.megavex.scoreboardlibrary.implementation.packetAdapter.objective.ObjectivePacketAdapter;
9+
import java.util.Collection;
10+
import java.util.HashMap;
11+
import java.util.Map;
12+
import java.util.Objects;
13+
import java.util.Queue;
14+
import net.kyori.adventure.text.Component;
15+
import net.kyori.adventure.text.ComponentLike;
1116
import org.bukkit.entity.Player;
1217
import org.jetbrains.annotations.NotNull;
1318
import org.jetbrains.annotations.Nullable;
1419

15-
import java.util.*;
16-
1720
import static net.kyori.adventure.text.Component.empty;
1821

1922
public class ScoreboardObjectiveImpl implements ScoreboardObjective {
@@ -95,6 +98,13 @@ public void defaultScoreFormat(@Nullable ScoreFormat defaultScoreFormat) {
9598
}
9699
}
97100

101+
@Override
102+
public void refreshProperties() {
103+
if (!closed) {
104+
taskQueue.add(new ObjectiveManagerTask.UpdateObjective(this));
105+
}
106+
}
107+
98108
@Override
99109
public @Nullable ObjectiveScore scoreInfo(@NotNull String entry) {
100110
return scores.get(entry);
@@ -117,6 +127,14 @@ public void defaultScoreFormat(@Nullable ScoreFormat defaultScoreFormat) {
117127
return this;
118128
}
119129

130+
@Override
131+
public void refreshScore(@NotNull String entry) {
132+
ObjectiveScore score = scores.get(entry);
133+
if (score != null) {
134+
taskQueue.add(new ObjectiveManagerTask.UpdateScore(this, entry, score));
135+
}
136+
}
137+
120138
public void sendProperties(@NotNull Collection<Player> players, @NotNull PropertiesPacketType packetType) {
121139
packetAdapter.sendProperties(players, packetType, value, renderType, defaultScoreFormat);
122140
}

implementation/src/main/java/net/megavex/scoreboardlibrary/implementation/sidebar/AbstractSidebar.java

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package net.megavex.scoreboardlibrary.implementation.sidebar;
22

33
import com.google.common.base.Preconditions;
4-
import net.kyori.adventure.text.Component;
5-
import net.kyori.adventure.text.ComponentLike;
6-
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
7-
import net.kyori.adventure.translation.GlobalTranslator;
84
import net.megavex.scoreboardlibrary.api.objective.ObjectiveDisplaySlot;
95
import net.megavex.scoreboardlibrary.api.objective.ObjectiveRenderType;
106
import net.megavex.scoreboardlibrary.api.objective.ScoreFormat;
@@ -17,15 +13,22 @@
1713
import net.megavex.scoreboardlibrary.implementation.player.ScoreboardLibraryPlayer;
1814
import net.megavex.scoreboardlibrary.implementation.sidebar.line.GlobalLineInfo;
1915
import net.megavex.scoreboardlibrary.implementation.sidebar.line.LocaleLineHandler;
16+
import java.util.Collection;
17+
import java.util.Collections;
18+
import java.util.Objects;
19+
import java.util.Queue;
20+
import java.util.Set;
21+
import java.util.concurrent.ConcurrentLinkedQueue;
22+
import java.util.function.Consumer;
23+
import net.kyori.adventure.text.Component;
24+
import net.kyori.adventure.text.ComponentLike;
25+
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
26+
import net.kyori.adventure.translation.GlobalTranslator;
2027
import org.bukkit.entity.Player;
2128
import org.jetbrains.annotations.NotNull;
2229
import org.jetbrains.annotations.Nullable;
2330
import org.jetbrains.annotations.Range;
2431

25-
import java.util.*;
26-
import java.util.concurrent.ConcurrentLinkedQueue;
27-
import java.util.function.Consumer;
28-
2932
import static net.kyori.adventure.text.Component.empty;
3033

3134
public abstract class AbstractSidebar implements Sidebar, PlayerDisplayable {
@@ -126,6 +129,17 @@ public final void line(@Range(from = 0, to = MAX_LINES - 1) int index, @Nullable
126129
}
127130
}
128131

132+
@Override
133+
public void refreshLine(@Range(from = 0, to = Integer.MAX_VALUE - 1) final int index) {
134+
checkClosed();
135+
GlobalLineInfo line = lines[index];
136+
if (line != null) {
137+
boolean updateValue = line.value() != null;
138+
boolean updateScore = line.scoreFormat() != null;
139+
taskQueue.add(new SidebarTask.UpdateLine(index, updateValue, updateScore));
140+
}
141+
}
142+
129143
@Override
130144
public final @Nullable Component line(@Range(from = 0, to = MAX_LINES - 1) int line) {
131145
checkClosed();
@@ -151,6 +165,12 @@ public final void title(@NotNull ComponentLike title) {
151165
}
152166
}
153167

168+
@Override
169+
public void refreshTitle() {
170+
checkClosed();
171+
taskQueue.add(SidebarTask.UpdateTitle.INSTANCE);
172+
}
173+
154174
public final @NotNull ScoreboardLibraryImpl scoreboardLibrary() {
155175
return scoreboardLibrary;
156176
}

implementation/src/main/java/net/megavex/scoreboardlibrary/implementation/team/TeamDisplayImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,11 @@ public boolean canSeeFriendlyInvisibles() {
210210
return this;
211211
}
212212

213+
@Override
214+
public void refresh() {
215+
scheduleUpdate();
216+
}
217+
213218
public @NotNull TeamDisplayPacketAdapter packetAdapter() {
214219
return packetAdapter;
215220
}

0 commit comments

Comments
 (0)