Skip to content

Commit ee608f3

Browse files
committed
Add support for Team Viewer mod
1 parent 8dca403 commit ee608f3

File tree

12 files changed

+192
-1
lines changed

12 files changed

+192
-1
lines changed

bukkit-common/src/main/java/net/badlion/bukkitapi/AbstractBukkitBadlionPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import net.badlion.bukkitapi.cosmetics.CosmeticManager;
44
import net.badlion.bukkitapi.listener.PlayerListener;
55
import net.badlion.bukkitapi.survival.AbstractBukkitSurvivalManager;
6+
import net.badlion.bukkitapi.teamviewer.TeamViewerManager;
67
import net.badlion.bukkitapi.timers.TimerApi;
78
import net.badlion.bukkitapi.timers.TimerApiImpl;
89
import net.badlion.bukkitapi.waypoints.WaypointManager;
@@ -27,6 +28,7 @@ public AbstractBukkitBadlionPlugin() {
2728
this.badlionApi.setWaypointManager(this.waypointManager);
2829
this.cosmeticManager = new CosmeticManager();
2930
this.badlionApi.setCosmeticManager(this.cosmeticManager);
31+
this.badlionApi.setTeamViewerManager(new TeamViewerManager(this));
3032
}
3133

3234
protected void setMessageSender(AbstractBukkitPluginMessageSender messageSender) {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package net.badlion.bukkitapi.teamviewer;
2+
3+
import net.badlion.bukkitapi.AbstractBukkitBadlionPlugin;
4+
import net.badlion.modapicommon.AbstractBadlionApi;
5+
import net.badlion.modapicommon.mods.ModType;
6+
import net.badlion.modapicommon.utility.AbstractTeamViewerManager;
7+
import net.badlion.modapicommon.utility.TeamMemberLocation;
8+
9+
import java.util.List;
10+
import java.util.UUID;
11+
12+
public class TeamViewerManager extends AbstractTeamViewerManager {
13+
14+
private final AbstractBukkitBadlionPlugin apiBukkit;
15+
16+
public TeamViewerManager(AbstractBukkitBadlionPlugin apiBukkit) {
17+
this.apiBukkit = apiBukkit;
18+
}
19+
20+
@Override
21+
public void sendLocations(UUID player, List<TeamMemberLocation> locations) {
22+
this.apiBukkit.getMessageSender().sendModData(player, ModType.TEAM_VIEWER, AbstractBadlionApi.GSON_NON_PRETTY.toJsonTree(locations));
23+
}
24+
}

bungee/src/main/java/net/badlion/bungeeapi/BungeeBadlionPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import net.badlion.bungeeapi.cosmetics.UnsupportedCosmeticManager;
44
import net.badlion.bungeeapi.listener.PlayerListener;
55
import net.badlion.bungeeapi.survival.UnsupportedSurvivalManager;
6+
import net.badlion.bungeeapi.teamviewer.UnsupportedTeamViewerManager;
67
import net.badlion.bungeeapi.waypoints.UnsupportedWaypointManager;
78
import net.md_5.bungee.api.plugin.Plugin;
89

@@ -21,6 +22,7 @@ public BungeeBadlionPlugin() {
2122
this.badlionApi.setWaypointManager(new UnsupportedWaypointManager());
2223
this.badlionApi.setCosmeticManager(new UnsupportedCosmeticManager());
2324
this.badlionApi.setSurvivalManager(new UnsupportedSurvivalManager());
25+
this.badlionApi.setTeamViewerManager(new UnsupportedTeamViewerManager());
2426
}
2527

2628
@Override
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package net.badlion.bungeeapi.teamviewer;
2+
3+
import net.badlion.modapicommon.utility.AbstractTeamViewerManager;
4+
import net.badlion.modapicommon.utility.AbstractWaypoint;
5+
import net.badlion.modapicommon.utility.AbstractWaypointManager;
6+
import net.badlion.modapicommon.utility.TeamMemberLocation;
7+
8+
import java.util.List;
9+
import java.util.UUID;
10+
11+
public class UnsupportedTeamViewerManager extends AbstractTeamViewerManager {
12+
13+
@Override
14+
public void sendLocations(UUID player, List<TeamMemberLocation> locations) {
15+
throw new UnsupportedOperationException("Team Viewer mod hooks are not supported on bungee!");
16+
}
17+
}

examples.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Below are some examples of how you could hook into our mods using this API.
55
* [Waypoints](https://github.com/BadlionClient/BadlionClientModAPI/blob/master/examples.md#waypoints)
66
* [TNT Time](https://github.com/BadlionClient/BadlionClientModAPI/blob/master/examples.md#tnt-time)
77
* [Height Limit Overlay](https://github.com/BadlionClient/BadlionClientModAPI/blob/master/examples.md#height-limit-overlay)
8+
* [Team Viewer](https://github.com/BadlionClient/BadlionClientModAPI/blob/master/examples.md#team-viewer)
89
* [Notifications](https://github.com/BadlionClient/BadlionClientModAPI/blob/master/examples.md#notifications)
910
* [Click Event Types](https://github.com/BadlionClient/BadlionClientModAPI/blob/master/examples.md#click-event-types)
1011
* [Levels](https://github.com/BadlionClient/BadlionClientModAPI/blob/master/examples.md#levels)
@@ -143,6 +144,57 @@ public class Game {
143144
}
144145
```
145146

147+
## Team Viewer
148+
149+
Using the `net.badlion.modapicommon.mods.TeamViewer` class you can send a list of team members and their locations to
150+
the player and support the team viewer icon to be shown.
151+
152+
```java
153+
// Since we need to send the locations on a regular basis to update the locations it's best to put the logic in a task
154+
// We recommend running it faster than 3 seconds since the client removes the locations after 5 seconds of no updates
155+
public class TeamViewerTask extends BukkitRunnable {
156+
157+
@Override
158+
public void run() {
159+
160+
// This is just an example, there may be other ways you keep track of teams
161+
TeamManager teamManager = Plugin.getTeamManager();
162+
163+
// Loop over all teams to update the locations
164+
for (Team team : teamManager.getTeams()) {
165+
166+
List<TeamMemberLocation> locations = new ArrayList<>();
167+
168+
// First we loop over all players in this team
169+
// We do not need to worry about having the player receiving it being in the list too since the client ignored that location
170+
for (Player player : team.getMembers()) {
171+
172+
Location location = player.getLocation();
173+
174+
// Add the location for this member into the list
175+
locations.add(
176+
new TeamMemberLocation(
177+
player.getUniqueId(),
178+
team.getColor(), // This color has to be the in Hex value, can be different for each player
179+
location.getX(),
180+
location.getY(),
181+
location.getZ()
182+
)
183+
);
184+
185+
}
186+
187+
// Loop over all the players again and send the list
188+
for (Player player : team.getMembers()) {
189+
190+
TeamViewer.sendLocations(player.getUniqueId(), locations);
191+
192+
}
193+
}
194+
}
195+
}
196+
```
197+
146198

147199
## Notifications
148200

modapi-common/src/main/java/net/badlion/modapicommon/AbstractBadlionApi.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.google.gson.GsonBuilder;
55
import net.badlion.modapicommon.survival.AbstractSurvivalManager;
66
import net.badlion.modapicommon.utility.AbstractCosmeticManager;
7+
import net.badlion.modapicommon.utility.AbstractTeamViewerManager;
78
import net.badlion.modapicommon.utility.AbstractWaypointManager;
89

910
import java.io.File;
@@ -18,6 +19,7 @@ public abstract class AbstractBadlionApi {
1819
private AbstractWaypointManager waypointManager;
1920
private AbstractCosmeticManager cosmeticManager;
2021
private AbstractSurvivalManager survivalManager;
22+
private AbstractTeamViewerManager teamViewerManager;
2123

2224
protected AbstractBadlionApi() {
2325
AbstractBadlionApi.instance = this;
@@ -107,6 +109,24 @@ public AbstractSurvivalManager getSurvivalManager() {
107109
return this.survivalManager;
108110
}
109111

112+
/**
113+
* Sets the implementation for the {@link AbstractTeamViewerManager} class.
114+
*
115+
* @param teamViewerManager The team viewer manager instance
116+
*/
117+
public void setTeamViewerManager(AbstractTeamViewerManager teamViewerManager) {
118+
this.teamViewerManager = teamViewerManager;
119+
}
120+
121+
/**
122+
* Returns the implementation for the {@link AbstractTeamViewerManager} class.
123+
*
124+
* @return The team viewer manager instance
125+
*/
126+
public AbstractTeamViewerManager getTeamViewerManager() {
127+
return this.teamViewerManager;
128+
}
129+
110130
/**
111131
* Returns the Badlion Api instance.
112132
*

modapi-common/src/main/java/net/badlion/modapicommon/mods/ModType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ public enum ModType {
66
WAYPOINTS("waypoints"),
77
TNT_TIME("tntTime"),
88
NOTIFICATION("notification"),
9-
SURVIVAL("survival");
9+
SURVIVAL("survival"),
10+
TEAM_VIEWER("teamViewer");
1011

1112
private final String type;
1213

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package net.badlion.modapicommon.mods;
2+
3+
import net.badlion.modapicommon.AbstractBadlionApi;
4+
import net.badlion.modapicommon.utility.TeamMemberLocation;
5+
6+
import java.util.List;
7+
import java.util.UUID;
8+
9+
/**
10+
* Class with API Hooks for our Team Viewer mod.
11+
*/
12+
public class TeamViewer {
13+
14+
/**
15+
* Update the team member locations. You always need to send all the locations that should be showing as on each call old points will be deleted
16+
*
17+
* The client automatically removes locations that weren't updated for 5 seconds, so we recommend sending the updates faster than this.
18+
* If the team member can be tracked by the client it will also automatically update the location but above timeout still applies.
19+
*
20+
* @param player UUID from the player who should be receiving this
21+
* @param locations List of team member locations to show
22+
*/
23+
public static void sendLocations(UUID player, List<TeamMemberLocation> locations) {
24+
AbstractBadlionApi.getInstance().getTeamViewerManager().sendLocations(player, locations);
25+
}
26+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package net.badlion.modapicommon.utility;
2+
3+
import java.util.List;
4+
import java.util.UUID;
5+
6+
public abstract class AbstractTeamViewerManager {
7+
8+
public abstract void sendLocations(UUID player, List<TeamMemberLocation> locations);
9+
10+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package net.badlion.modapicommon.utility;
2+
3+
import java.util.UUID;
4+
5+
public class TeamMemberLocation {
6+
7+
private final UUID uuid;
8+
private final int color;
9+
private final double x;
10+
private final double y;
11+
private final double z;
12+
13+
public TeamMemberLocation(UUID uuid, int color, double x, double y, double z) {
14+
this.uuid = uuid;
15+
this.color = color;
16+
this.x = x;
17+
this.y = y;
18+
this.z = z;
19+
}
20+
}

0 commit comments

Comments
 (0)