Skip to content

Commit 2cf6b1c

Browse files
committed
* Changed Scoreboard API (now paket based) (Thanks MrMicky-FR FastBoard)
* Changed Scoreboard on lower 1.12.2 now supports 30 chars * Changed Scoreboard on 1.13+ now supports unlimited chars * Changed Scoreboard on 1.20.3 will hide red score numbers * Changed pom files to build java 8 builds without errors
1 parent c1123f2 commit 2cf6b1c

File tree

9 files changed

+98
-74
lines changed

9 files changed

+98
-74
lines changed

.github/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
### 1.3.16 Release (.03.2025)
2+
* Changed Scoreboard API (now paket based) (Thanks MrMicky-FR FastBoard)
3+
* Changed Scoreboard on lower 1.12.2 now supports 30 chars
4+
* Changed Scoreboard on 1.13+ now supports unlimited chars
5+
* Changed Scoreboard on 1.20.3 will hide red score numbers
6+
* Changed pom files to build java 8 builds without errors
7+
18
### (1.3.11-)1.3.15 Release (17.02.2025)
29
* Added 1.21.1-4 support
310
* Added (3) new ConfigOptions for ArmorStands (BLOCK_IN_GAME_ARMOR_STAND_DESTROY, BLOCK_IN_GAME_ARMOR_STAND_CHECK, BLOCK_IN_GAME_ARMOR_STAND_INTERACT)

.github/maven/api/pom.xml

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,6 @@
5959
</repositories>
6060

6161
<dependencies>
62-
<dependency>
63-
<groupId>me.tigerhix.lib</groupId>
64-
<artifactId>scoreboard</artifactId>
65-
<version>1.4.5</version>
66-
<scope>compile</scope>
67-
<optional>true</optional>
68-
<exclusions>
69-
<exclusion>
70-
<groupId>*</groupId>
71-
<artifactId>*</artifactId>
72-
</exclusion>
73-
</exclusions>
74-
</dependency>
7562
<dependency>
7663
<groupId>plugily.projects</groupId>
7764
<artifactId>MiniGamesBox-Database</artifactId>

.github/maven/classic/pom.xml

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@
5454
<id>papi-repo</id>
5555
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
5656
</repository>
57+
<repository>
58+
<id>via-version</id>
59+
<url>https://repo.viaversion.com</url>
60+
</repository>
61+
<repository>
62+
<id>jitpack</id>
63+
<url>https://jitpack.io</url>
64+
</repository>
5765
</repositories>
5866

5967
<dependencies>
@@ -64,17 +72,22 @@
6472
<scope>provided</scope>
6573
</dependency>
6674
<dependency>
67-
<groupId>me.tigerhix.lib</groupId>
68-
<artifactId>scoreboard</artifactId>
69-
<version>1.4.5</version>
70-
<scope>compile</scope>
75+
<groupId>fr.mrmicky</groupId>
76+
<artifactId>fastboard</artifactId>
77+
<version>2.1.3</version>
7178
<optional>true</optional>
72-
<exclusions>
73-
<exclusion>
74-
<groupId>*</groupId>
75-
<artifactId>*</artifactId>
76-
</exclusion>
77-
</exclusions>
79+
</dependency>
80+
<dependency>
81+
<groupId>com.viaversion</groupId>
82+
<artifactId>viaversion-api</artifactId>
83+
<version>5.2.1</version>
84+
<scope>provided</scope>
85+
</dependency>
86+
<dependency>
87+
<groupId>com.github.ProtocolSupport</groupId>
88+
<artifactId>ProtocolSupport</artifactId>
89+
<version>master</version>
90+
<scope>provided</scope>
7891
</dependency>
7992
<dependency>
8093
<groupId>com.github.cryptomorin</groupId>
@@ -199,7 +212,7 @@
199212
<shadedPattern>plugily.projects.minigamesbox.classic.utils.version.xseries</shadedPattern>
200213
</relocation>
201214
<relocation>
202-
<pattern>me.tigerhix.lib.scoreboard</pattern>
215+
<pattern>fr.mrmicky.fastboard</pattern>
203216
<shadedPattern>plugily.projects.minigamesbox.classic.utils.scoreboard</shadedPattern>
204217
</relocation>
205218
<relocation>

MiniGamesBox API/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ plugins {
2323
}
2424

2525
dependencies {
26-
implementation("me.tigerhix.lib:scoreboard:1.4.5") { isTransitive = false }
2726
compileOnly(project(":MiniGamesBox-Database", "shadow"))
2827
compileOnly("com.github.cryptomorin:XSeries:13.0.0") { isTransitive = false }
2928
}

MiniGamesBox API/src/main/java/plugily/projects/minigamesbox/api/arena/managers/IPluginScoreboardManager.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package plugily.projects.minigamesbox.api.arena.managers;
22

3-
import me.tigerhix.lib.scoreboard.type.Entry;
3+
import org.bukkit.entity.Player;
44
import plugily.projects.minigamesbox.api.user.IUser;
55

66
import java.util.List;
@@ -34,5 +34,13 @@ public interface IPluginScoreboardManager {
3434
*/
3535
void stopAllScoreboards();
3636

37-
List<Entry> formatScoreboard(IUser user);
37+
/**
38+
* Get Lines from the language.yml according to arena state
39+
*/
40+
List<String> getScoreboardLines();
41+
42+
/**
43+
* Update lines with defined placeholders
44+
*/
45+
List<String> formatScoreboardLines(List<String> lines, Player player);
3846
}

MiniGamesBox Classic/build.gradle.kts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ plugins {
2424

2525
repositories {
2626
maven("https://repo2.acrylicstyle.xyz/")
27+
maven(uri("https://repo.viaversion.com"))
2728
}
2829

2930
dependencies {
30-
implementation("me.tigerhix.lib:scoreboard:1.4.5") { isTransitive = false }
31+
implementation("fr.mrmicky:fastboard:2.1.3") { isTransitive = false }
3132
implementation("com.github.cryptomorin:XSeries:13.0.0") { isTransitive = false }
3233
implementation(project(":MiniGamesBox-API", "shadow"))
3334
implementation(project(":MiniGamesBox-Inventory", "shadow"))
@@ -37,6 +38,8 @@ dependencies {
3738
implementation("io.papermc:paperlib:1.0.8")
3839
implementation("org.openjdk.nashorn:nashorn-core:15.4")
3940
implementation("org.ow2.asm:asm:9.6")
41+
compileOnly("com.viaversion:viaversion-api:5.2.1")
42+
compileOnly("com.github.ProtocolSupport:ProtocolSupport:master")
4043
compileOnly("com.mojang:authlib:3.13.56")
4144
compileOnly("de.simonsator:DevelopmentPAFSpigot:1.0.67")
4245
compileOnly("de.simonsator:Party-and-Friends-MySQL-Edition-Spigot-API:1.5.4-RELEASE")
@@ -59,7 +62,7 @@ tasks {
5962
relocate("org.openjdk.nashorn", "plugily.projects.minigamesbox.classic.utils.skript.nashorn")
6063
relocate("com.cryptomorin.xseries.particles", "plugily.projects.minigamesbox.classic.utils.version.xseries")
6164
relocate("com.cryptomorin.xseries", "plugily.projects.minigamesbox.classic.utils.version.xseries")
62-
relocate("me.tigerhix.lib.scoreboard", "plugily.projects.minigamesbox.classic.utils.scoreboard")
65+
relocate("fr.mrmicky.fastboard", "plugily.projects.minigamesbox.classic.utils.scoreboard")
6366
relocate("org.bstats", "plugily.projects.minigamesbox.classic.utils.bstats")
6467
relocate("io.papermc.lib", "plugily.projects.minigamesbox.classic.utils.paperlib")
6568
}

MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/PluginMain.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
package plugily.projects.minigamesbox.classic;
2020

21-
import me.tigerhix.lib.scoreboard.ScoreboardLib;
2221
import org.bukkit.Bukkit;
2322
import org.bukkit.configuration.file.FileConfiguration;
2423
import org.bukkit.entity.ArmorStand;
@@ -206,9 +205,6 @@ public void onEnable() {
206205
//setup ItemManager
207206
ItemManager.register(this);
208207

209-
//setup Scoreboard
210-
ScoreboardLib.setPluginInstance(this);
211-
212208
//initialize default classes
213209
initializeDefaultClasses();
214210

MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/managers/PluginScoreboardManager.java

Lines changed: 46 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@
1818

1919
package plugily.projects.minigamesbox.classic.arena.managers;
2020

21-
import me.tigerhix.lib.scoreboard.ScoreboardLib;
22-
import me.tigerhix.lib.scoreboard.common.EntryBuilder;
23-
import me.tigerhix.lib.scoreboard.type.Entry;
24-
import me.tigerhix.lib.scoreboard.type.Scoreboard;
25-
import me.tigerhix.lib.scoreboard.type.ScoreboardHandler;
21+
import com.viaversion.viaversion.api.Via;
22+
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
23+
import fr.mrmicky.fastboard.FastBoard;
2624
import org.bukkit.Bukkit;
2725
import org.bukkit.entity.Player;
2826
import plugily.projects.minigamesbox.api.IPluginMain;
@@ -31,12 +29,10 @@
3129
import plugily.projects.minigamesbox.api.user.IUser;
3230
import plugily.projects.minigamesbox.classic.arena.PluginArena;
3331
import plugily.projects.minigamesbox.classic.handlers.language.MessageBuilder;
32+
import plugily.projects.minigamesbox.classic.utils.version.ServerVersion;
33+
import protocolsupport.api.ProtocolSupportAPI;
3434

35-
import java.util.List;
36-
import java.util.Map;
37-
import java.util.Optional;
38-
import java.util.UUID;
39-
import java.util.concurrent.ConcurrentHashMap;
35+
import java.util.*;
4036

4137
/**
4238
* @author Tigerpanzer_02
@@ -45,9 +41,7 @@
4541
*/
4642
public class PluginScoreboardManager implements IPluginScoreboardManager {
4743

48-
private final Map<UUID, Scoreboard> boardMap = new ConcurrentHashMap<>();
49-
private final Map<UUID, org.bukkit.scoreboard.Scoreboard> lastBoardMap = new ConcurrentHashMap<>();
50-
private final org.bukkit.scoreboard.Scoreboard dummyBoard = Bukkit.getScoreboardManager().getNewScoreboard();
44+
private final Map<UUID, FastBoard> boardMap = new HashMap<>();
5145
private final IPluginMain plugin;
5246
private final String boardTitle;
5347
private final PluginArena arena;
@@ -61,51 +55,67 @@ public PluginScoreboardManager(PluginArena arena) {
6155
@Override
6256
public void createScoreboard(IUser user) {
6357
Player player = user.getPlayer();
64-
lastBoardMap.put(player.getUniqueId(), player.getScoreboard());
65-
player.setScoreboard(dummyBoard);
6658

67-
Scoreboard scoreboard = ScoreboardLib.createScoreboard(player).setHandler(new ScoreboardHandler() {
59+
FastBoard board = new FastBoard(player) {
6860
@Override
69-
public String getTitle(Player player) {
70-
return boardTitle;
61+
public boolean hasLinesMaxLength() {
62+
if(Bukkit.getPluginManager().isPluginEnabled("ViaVersion")) {
63+
try {
64+
return Via.getAPI().getPlayerVersion(getPlayer()) < ProtocolVersion.v1_13.getVersion();
65+
} catch(Exception ignored) {
66+
//Not using ViaVersion 4 or unable to get ViaVersion return LegacyBoard!
67+
}
68+
}
69+
if(Bukkit.getPluginManager().isPluginEnabled("ProtocolSupport")) {
70+
try {
71+
int version = ProtocolSupportAPI.getProtocolVersion(getPlayer()).getId();
72+
if(version >= 401) {
73+
return false;
74+
}
75+
} catch(Exception ignored) {
76+
//Can't interact with protocol api
77+
}
78+
}
79+
return !ServerVersion.Version.isCurrentEqualOrHigher(ServerVersion.Version.v1_13);
7180
}
81+
};
7282

73-
@Override
74-
public List<Entry> getEntries(Player player) {
75-
return formatScoreboard(user);
76-
}
77-
});
78-
scoreboard.activate();
79-
boardMap.put(player.getUniqueId(), scoreboard);
83+
board.updateTitle(boardTitle);
84+
board.updateLines(formatScoreboardLines(getScoreboardLines(), player));
85+
86+
87+
boardMap.put(user.getUniqueId(), board);
8088
}
8189

8290
@Override
8391
public void updateScoreboards() {
84-
boardMap.values().forEach(Scoreboard::update);
92+
boardMap.values().forEach(fastBoard -> fastBoard.updateLines(formatScoreboardLines(getScoreboardLines(), fastBoard.getPlayer())));
8593
}
8694

8795
@Override
8896
public void removeScoreboard(IUser user) {
89-
Optional.ofNullable(boardMap.remove(user.getUniqueId())).ifPresent(Scoreboard::deactivate);
90-
Optional.ofNullable(lastBoardMap.remove(user.getUniqueId())).ifPresent(user.getPlayer()::setScoreboard);
97+
Optional.ofNullable(boardMap.remove(user.getUniqueId())).ifPresent(FastBoard::delete);
9198
}
9299

93100
@Override
94101
public void stopAllScoreboards() {
95-
boardMap.values().forEach(Scoreboard::deactivate);
102+
boardMap.values().forEach(FastBoard::delete);
96103
boardMap.clear();
97104
}
98105

99106
@Override
100-
public List<Entry> formatScoreboard(IUser user) {
101-
EntryBuilder builder = new EntryBuilder();
107+
public List<String> getScoreboardLines() {
108+
return new ArrayList<>(plugin.getLanguageManager().getLanguageList(arena.getArenaState() == IArenaState.FULL_GAME ? "Scoreboard.Content.Waiting"
109+
: "Scoreboard.Content." + arena.getArenaState().getFormattedName()));
110+
}
102111

103-
for (String line : plugin.getLanguageManager().getLanguageList(arena.getArenaState() == IArenaState.FULL_GAME ? "Scoreboard.Content.Waiting"
104-
: "Scoreboard.Content." + arena.getArenaState().getFormattedName())) {
105-
builder.next(new MessageBuilder(line).player(user.getPlayer()).arena(arena).build());
112+
@Override
113+
public List<String> formatScoreboardLines(List<String> lines, Player player) {
114+
List<String> formattedLines = new ArrayList<>();
115+
for(String line : lines) {
116+
formattedLines.add(new MessageBuilder(line).player(player).arena(arena).build());
106117
}
107-
108-
return builder.build();
118+
return formattedLines;
109119
}
110120

111121
}

README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ Library box with massive content that could be seen as minigames core. Used on a
77

88
## Open Source Libraries
99

10-
| Library | Author | License | Used on module |
11-
|------------------------------------------------------|-----------------------------------------------|-------------------------------------------------------------------------------|------------------------|
12-
| [FastInv](https://github.com/MrMicky-FR/FastInv) | [MrMicky](https://github.com/MrMicky-FR) | [MIT License](https://github.com/MrMicky-FR/FastInv/blob/master/LICENSE) | MiniGamesBox Inventory |
13-
| [Commons Box](https://github.com/Plajer/Commons-Box) | [Plajer](https://github.com/Plajer) | [GPLv3](https://github.com/Plajer/Commons-Box/blob/master/LICENSE.md) | MiniGamesBox Classic, Database, Utils |
14-
| [XSeries](https://github.com/CryptoMorin/XSeries) | [CryptoMorin](https://github.com/CryptoMorin) | [MIT License](https://github.com/CryptoMorin/XSeries/blob/master/LICENSE.txt) | MiniGamesBox |
10+
| Library | Author | License | Used on module |
11+
|------------------------------------------------------|-----------------------------------------------|-------------------------------------------------------------------------------|---------------------------------------|
12+
| [FastInv](https://github.com/MrMicky-FR/FastInv) | [MrMicky](https://github.com/MrMicky-FR) | [MIT License](https://github.com/MrMicky-FR/FastInv/blob/master/LICENSE) | MiniGamesBox Inventory |
13+
| [FastBoard](https://github.com/MrMicky-FR/FastBoard) | [MrMicky](https://github.com/MrMicky-FR) | [MIT License](https://github.com/MrMicky-FR/FastInv/blob/master/LICENSE) | MiniGamesBox Classic, Api |
14+
| [Commons Box](https://github.com/Plajer/Commons-Box) | [Plajer](https://github.com/Plajer) | [GPLv3](https://github.com/Plajer/Commons-Box/blob/master/LICENSE.md) | MiniGamesBox Classic, Database, Utils |
15+
| [XSeries](https://github.com/CryptoMorin/XSeries) | [CryptoMorin](https://github.com/CryptoMorin) | [MIT License](https://github.com/CryptoMorin/XSeries/blob/master/LICENSE.txt) | MiniGamesBox |

0 commit comments

Comments
 (0)