Skip to content

Commit fff93a1

Browse files
committed
Update to 2.0
1 parent d88be2f commit fff93a1

23 files changed

Lines changed: 418 additions & 495 deletions

README.md

Lines changed: 0 additions & 33 deletions
This file was deleted.

pom.xml

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,39 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
3-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
2+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xmlns="http://maven.apache.org/POM/4.0.0"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
45
<modelVersion>4.0.0</modelVersion>
5-
<groupId>ru.jl1mbo.scoreboard</groupId>
6-
<artifactId>Scoreboard</artifactId>
7-
<version>1.0.2</version>
6+
7+
<groupId>me.iwareq.scoreboard</groupId>
8+
<artifactId>ScoreboardAPI</artifactId>
9+
<version>2.0</version>
10+
11+
<properties>
12+
<maven.compiler.source>8</maven.compiler.source>
13+
<maven.compiler.target>8</maven.compiler.target>
14+
15+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
16+
</properties>
17+
818
<build>
9-
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
10-
<defaultGoal>install</defaultGoal>
19+
<defaultGoal>clean install</defaultGoal>
1120
<resources>
1221
<resource>
1322
<targetPath>.</targetPath>
1423
<filtering>true</filtering>
1524
<directory>${basedir}/src/main/resources/</directory>
1625
<includes>
17-
<include>*</include>
26+
<include>plugin.yml</include>
1827
</includes>
1928
</resource>
2029
</resources>
21-
<finalName>${pom.artifactId}-${pom.version}</finalName>
2230
<plugins>
2331
<plugin>
24-
<artifactId>maven-compiler-plugin</artifactId>
25-
<version>3.8.1</version>
32+
<artifactId>maven-shade-plugin</artifactId>
33+
<version>3.4.0</version>
2634
<configuration>
27-
<source>1.8</source>
28-
<target>1.8</target>
35+
<createDependencyReducedPom>false</createDependencyReducedPom>
2936
</configuration>
30-
</plugin>
31-
<plugin>
32-
<artifactId>maven-shade-plugin</artifactId>
33-
<version>3.2.2</version>
3437
<executions>
3538
<execution>
3639
<phase>package</phase>
@@ -42,27 +45,27 @@
4245
</plugin>
4346
</plugins>
4447
</build>
48+
4549
<repositories>
4650
<repository>
47-
<id>nukkit-repo</id>
48-
<url>https://repo.nukkitx.com/maven-snapshots</url>
51+
<id>opencollab-repo-snapshot</id>
52+
<url>https://repo.opencollab.dev/maven-snapshots/</url>
4953
</repository>
5054
</repositories>
55+
5156
<dependencies>
5257
<dependency>
5358
<groupId>cn.nukkit</groupId>
5459
<artifactId>nukkit</artifactId>
5560
<version>1.0-SNAPSHOT</version>
5661
<scope>provided</scope>
5762
</dependency>
63+
5864
<dependency>
5965
<groupId>org.projectlombok</groupId>
6066
<artifactId>lombok</artifactId>
61-
<version>1.18.20</version>
67+
<version>1.18.24</version>
6268
<scope>provided</scope>
6369
</dependency>
6470
</dependencies>
65-
<properties>
66-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
67-
</properties>
68-
</project>
71+
</project>
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package me.iwareq.scoreboard;
2+
3+
import cn.nukkit.Player;
4+
import lombok.Getter;
5+
import lombok.ToString;
6+
import me.iwareq.scoreboard.line.ScoreboardLine;
7+
import me.iwareq.scoreboard.manager.ScoreboardManager;
8+
import me.iwareq.scoreboard.packet.RemoveObjectivePacket;
9+
import me.iwareq.scoreboard.packet.SetDisplayObjectivePacket;
10+
import me.iwareq.scoreboard.packet.SetScorePacket;
11+
import me.iwareq.scoreboard.packet.data.DisplaySlot;
12+
import me.iwareq.scoreboard.packet.data.ScorerInfo;
13+
import me.iwareq.scoreboard.packet.data.SortOrder;
14+
15+
import java.util.HashMap;
16+
import java.util.HashSet;
17+
import java.util.Map;
18+
import java.util.Set;
19+
import java.util.function.BiConsumer;
20+
21+
@ToString
22+
public class Scoreboard {
23+
24+
@Getter
25+
private final Set<Player> viewers = new HashSet<>();
26+
27+
private final String displayName;
28+
29+
private final Map<Integer, ScoreboardLine> lines = new HashMap<>();
30+
31+
private final BiConsumer<Scoreboard, Player> callback;
32+
33+
private final ScoreboardManager manager;
34+
@Getter
35+
private final int updateTime;
36+
37+
private int lastIndex;
38+
39+
public Scoreboard(String displayName, BiConsumer<Scoreboard, Player> callback, int updateTime) {
40+
this.displayName = displayName;
41+
this.callback = callback;
42+
this.updateTime = updateTime;
43+
this.manager = ScoreboardAPI.getInstance().getScoreboardManager();
44+
}
45+
46+
public void setLine(int index, String text) {
47+
this.checkLineIndex(index);
48+
49+
this.lastIndex = index;
50+
51+
ScoreboardLine line = new ScoreboardLine(this, text);
52+
this.lines.put(index, line);
53+
}
54+
55+
public void addLine(String text) {
56+
this.lastIndex++;
57+
58+
this.setLine(this.lastIndex, text);
59+
}
60+
61+
private void checkLineIndex(int index) {
62+
if (index < 1 || index > 15) {
63+
throw new IllegalArgumentException("The line index value should be from 1 to 15");
64+
}
65+
}
66+
67+
public void refresh() {
68+
this.viewers.removeIf(p -> {
69+
boolean remove = !p.isConnected() || !p.isOnline();
70+
if (remove) {
71+
this.manager.removeScoreboard(p);
72+
}
73+
74+
return remove;
75+
});
76+
77+
this.viewers.forEach(player -> {
78+
this.hide(player, false);
79+
this.show(player, false);
80+
});
81+
}
82+
83+
public void show(Player player) {
84+
this.show(player, true);
85+
}
86+
87+
private void show(Player player, boolean add) {
88+
if (!add || this.viewers.add(player)) {
89+
this.callback.accept(this, player);
90+
91+
SetDisplayObjectivePacket objectivePacket = new SetDisplayObjectivePacket();
92+
objectivePacket.setDisplaySlot(DisplaySlot.SIDEBAR);
93+
objectivePacket.setObjectiveId("objective");
94+
objectivePacket.setDisplayName(this.displayName);
95+
objectivePacket.setCriteria("dummy");
96+
objectivePacket.setSortOrder(SortOrder.ASCENDING);
97+
98+
player.dataPacket(objectivePacket);
99+
100+
SetScorePacket scorePacket = new SetScorePacket(SetScorePacket.Action.SET);
101+
this.lines.forEach((index, line) ->
102+
scorePacket.getInfos().add(new ScorerInfo(index, "objective", index, line.getText())));
103+
104+
player.dataPacket(scorePacket);
105+
106+
if (add) {
107+
this.manager.addScoreboard(player, this);
108+
}
109+
}
110+
}
111+
112+
public void hide(Player player) {
113+
this.hide(player, true);
114+
}
115+
116+
private void hide(Player player, boolean remove) {
117+
if (!remove || this.viewers.remove(player)) {
118+
RemoveObjectivePacket packet = new RemoveObjectivePacket();
119+
packet.setObjectiveId("objective");
120+
121+
player.dataPacket(packet);
122+
123+
if (remove) {
124+
this.manager.removeScoreboard(player);
125+
}
126+
}
127+
}
128+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package me.iwareq.scoreboard;
2+
3+
import cn.nukkit.plugin.PluginBase;
4+
import lombok.Getter;
5+
import me.iwareq.scoreboard.manager.ScoreboardManager;
6+
import me.iwareq.scoreboard.updater.ScoreboardUpdater;
7+
8+
public class ScoreboardAPI extends PluginBase {
9+
10+
@Getter
11+
private static ScoreboardAPI instance;
12+
@Getter
13+
private ScoreboardManager scoreboardManager;
14+
15+
@Override
16+
public void onEnable() {
17+
ScoreboardAPI.instance = this;
18+
19+
this.scoreboardManager = new ScoreboardManager();
20+
21+
this.getServer().getScheduler().scheduleRepeatingTask(new ScoreboardUpdater(this.scoreboardManager), 20);
22+
}
23+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package me.iwareq.scoreboard.line;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import me.iwareq.scoreboard.Scoreboard;
6+
7+
@Getter
8+
@AllArgsConstructor
9+
public class ScoreboardLine {
10+
11+
private final Scoreboard scoreboard;
12+
private final String text;
13+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package me.iwareq.scoreboard.manager;
2+
3+
import cn.nukkit.Player;
4+
import lombok.Getter;
5+
import me.iwareq.scoreboard.Scoreboard;
6+
7+
import java.util.HashMap;
8+
import java.util.Map;
9+
10+
public class ScoreboardManager {
11+
12+
@Getter
13+
private final Map<String, Scoreboard> scoreboards = new HashMap<>();
14+
15+
public Scoreboard getScoreboard(Player player) {
16+
return this.scoreboards.get(player.getName());
17+
}
18+
19+
public void addScoreboard(Player player, Scoreboard scoreboard) {
20+
this.scoreboards.put(player.getName(), scoreboard);
21+
}
22+
23+
public void removeScoreboard(Player player) {
24+
this.scoreboards.remove(player.getName());
25+
}
26+
}

src/main/java/ru/jl1mbo/scoreboard/packet/RemoveObjectivePacket.java renamed to src/main/java/me/iwareq/scoreboard/packet/RemoveObjectivePacket.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1-
package ru.jl1mbo.scoreboard.packet;
1+
package me.iwareq.scoreboard.packet;
22

33
import cn.nukkit.network.protocol.DataPacket;
4+
import lombok.Setter;
45

6+
@Setter
57
public class RemoveObjectivePacket extends DataPacket {
68

7-
public String objectiveName;
9+
public static final byte NETWORK_ID = 0x6a;
10+
11+
private String objectiveId;
812

913
@Override
1014
public byte pid() {
11-
return 0x6a;
15+
return NETWORK_ID;
1216
}
1317

1418
@Override
@@ -17,6 +21,7 @@ public void decode() {/**/}
1721
@Override
1822
public void encode() {
1923
this.reset();
20-
this.putString(this.objectiveName);
24+
25+
this.putString(this.objectiveId);
2126
}
22-
}
27+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package me.iwareq.scoreboard.packet;
2+
3+
import cn.nukkit.network.protocol.DataPacket;
4+
import lombok.Setter;
5+
import me.iwareq.scoreboard.packet.data.DisplaySlot;
6+
import me.iwareq.scoreboard.packet.data.SortOrder;
7+
8+
@Setter
9+
public class SetDisplayObjectivePacket extends DataPacket {
10+
11+
public static final byte NETWORK_ID = 0x6b;
12+
13+
private DisplaySlot displaySlot;
14+
private String objectiveId;
15+
private String displayName;
16+
private String criteria;
17+
private SortOrder sortOrder;
18+
19+
@Override
20+
public byte pid() {
21+
return NETWORK_ID;
22+
}
23+
24+
@Override
25+
public void decode() {/**/}
26+
27+
@Override
28+
public void encode() {
29+
this.reset();
30+
31+
this.putString(this.displaySlot.getName());
32+
this.putString(this.objectiveId);
33+
this.putString(this.displayName);
34+
this.putString(this.criteria);
35+
this.putVarInt(this.sortOrder.ordinal());
36+
}
37+
}

0 commit comments

Comments
 (0)