DREAMFIRE Docs ← Back to site
Loading...
Searching...
No Matches
DreamScoreboardData.java
Go to the documentation of this file.
1/*
2 * MIT License
3 *
4 * Copyright (c) 2025 Dreamfire Studio
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24package com.dreamfirestudios.dreamcore.DreamScoreboard;
25
26import net.kyori.adventure.text.Component;
27import org.bukkit.scoreboard.DisplaySlot;
28import org.bukkit.scoreboard.Scoreboard;
29
30import java.util.function.Function;
31
43public record DreamScoreboardData(Function<Integer, String> text) {
44
51 public void createLine(Scoreboard scoreboard, int score, int teamIndex) {
52 final String teamName = "Line" + score;
53 if (scoreboard.getTeam(teamName) != null) return;
54
55 // Unique entry per line: repeat §r N times so each entry differs.
56 final StringBuilder entry = new StringBuilder();
57 for (int i = 0; i < teamIndex; i++) entry.append('§').append('r');
58
59 var team = scoreboard.registerNewTeam(teamName);
60 team.addEntry(entry.toString());
61 team.prefix(Component.text(text.apply(score)));
62
63 var obj = scoreboard.getObjective(DisplaySlot.SIDEBAR);
64 if (obj != null) obj.getScore(entry.toString()).setScore(score);
65 }
66
72 public void updateLine(Scoreboard scoreboard, int score) {
73 var team = scoreboard.getTeam("Line" + score);
74 if (team == null) return;
75 team.prefix(Component.text(text.apply(score)));
76 }
77
78 // -------- Back-compat wrappers (keep old PascalCase calls compiling) --------
79
83 @Deprecated public void CreateLine(Scoreboard scoreboard, int score, int teamIndex) {
84 createLine(scoreboard, score, teamIndex);
85 }
86
90 @Deprecated public void UpdateLine(Scoreboard scoreboard, int score) {
91 updateLine(scoreboard, score);
92 }
93}
record DreamScoreboardData(Function< Integer, String > text)
Holds a single scoreboard line's dynamic text function.