Skip to content

Commit 6dfa9ff

Browse files
committed
Add hook for sending notifications to badlion users
1 parent 80ceb23 commit 6dfa9ff

File tree

10 files changed

+198
-17
lines changed

10 files changed

+198
-17
lines changed

bukkit-1.17/src/main/java/net/badlion/bukkitapi/waypoints/WaypointManager.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.google.gson.reflect.TypeToken;
77
import net.badlion.bukkitapi.BukkitBadlionPlugin;
88
import net.badlion.modapicommon.AbstractBadlionApi;
9+
import net.badlion.modapicommon.mods.ModType;
910
import net.badlion.modapicommon.utility.AbstractWaypoint;
1011
import net.badlion.modapicommon.utility.AbstractWaypointManager;
1112
import net.badlion.modapicommon.utility.Waypoint;
@@ -115,7 +116,7 @@ public void sendWaypointsToClient(Player player, World world) {
115116
data.addProperty("action", "add");
116117
data.add("waypoints", jsonWaypoints);
117118

118-
this.apiBukkit.getMessageSender().sendModData(player.getUniqueId(), "waypoints", data);
119+
this.apiBukkit.getMessageSender().sendModData(player.getUniqueId(), ModType.WAYPOINTS, data);
119120

120121
waypoints.forEach(waypoint -> {
121122
if (!waypoint.isSentBefore()) {

bukkit/src/main/java/net/badlion/bukkitapi/waypoints/WaypointManager.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.google.gson.reflect.TypeToken;
77
import net.badlion.bukkitapi.BukkitBadlionPlugin;
88
import net.badlion.modapicommon.AbstractBadlionApi;
9+
import net.badlion.modapicommon.mods.ModType;
910
import net.badlion.modapicommon.utility.AbstractWaypoint;
1011
import net.badlion.modapicommon.utility.AbstractWaypointManager;
1112
import net.badlion.modapicommon.utility.Waypoint;
@@ -115,7 +116,7 @@ public void sendWaypointsToClient(Player player, World world) {
115116
data.addProperty("action", "add");
116117
data.add("waypoints", jsonWaypoints);
117118

118-
this.apiBukkit.getMessageSender().sendModData(player.getUniqueId(), "waypoints", data);
119+
this.apiBukkit.getMessageSender().sendModData(player.getUniqueId(), ModType.WAYPOINTS, data);
119120

120121
waypoints.forEach(waypoint -> {
121122
if (!waypoint.isSentBefore()) {

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

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,71 @@
22

33
import com.google.gson.JsonElement;
44
import com.google.gson.JsonObject;
5+
import net.badlion.modapicommon.mods.ModType;
56

67
import java.nio.charset.StandardCharsets;
78
import java.util.UUID;
89

910
public abstract class AbstractPluginMessageSender {
1011

1112
/**
12-
* Sends a plugin message to every online Badlion player.
13+
* Sends a plugin message to every online Badlion player directed towards a certain Badlion mod.
1314
*
1415
* @param mod The name of the mod this data is for
1516
* @param data The payload data
1617
*/
17-
public void sendModData(String mod, JsonElement data) {
18+
public void sendModData(ModType mod, JsonElement data) {
1819
final JsonObject object = new JsonObject();
1920

20-
object.addProperty("mod", mod);
21+
object.addProperty("mod", mod.getType());
2122
object.add("payload", data);
2223

2324
this.sendPluginMessage(object.toString().getBytes(StandardCharsets.UTF_8));
2425
}
2526

2627
/**
27-
* Sends a plugin message to a specific player, identified by the player's UUID.
28+
* Sends a plugin message to a specific player, identified by the player's UUID, directed towards a certain Badlion mod.
2829
*
2930
* @param player UUID of the player
3031
* @param mod The name of the mod this data is for
3132
* @param data The payload data
3233
*/
33-
public void sendModData(UUID player, String mod, JsonElement data) {
34+
public void sendModData(UUID player, ModType mod, JsonElement data) {
3435
if (player == null) {
3536
return;
3637
}
3738

3839
final JsonObject object = new JsonObject();
3940

40-
object.addProperty("mod", mod);
41+
object.addProperty("mod", mod.getType());
42+
object.add("payload", data);
43+
44+
this.sendPluginMessage(player, object.toString().getBytes(StandardCharsets.UTF_8));
45+
}
46+
47+
/**
48+
* Used to send data unrelated to mods to the client.
49+
*/
50+
public void sendData(String type, JsonElement data) {
51+
final JsonObject object = new JsonObject();
52+
53+
object.addProperty("type", type);
54+
object.add("payload", data);
55+
56+
this.sendPluginMessage(object.toString().getBytes(StandardCharsets.UTF_8));
57+
}
58+
59+
/**
60+
* Used to send data unrelated to mods to the client.
61+
*/
62+
public void sendData(UUID player, String type, JsonElement data) {
63+
if (player == null) {
64+
return;
65+
}
66+
67+
final JsonObject object = new JsonObject();
68+
69+
object.addProperty("type", type);
4170
object.add("payload", data);
4271

4372
this.sendPluginMessage(player, object.toString().getBytes(StandardCharsets.UTF_8));

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public static void setCurrentMap(String mapName, int maxHeight) {
2121
data.addProperty("mapName", mapName);
2222
data.addProperty("maxHeight", maxHeight);
2323

24-
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData("heightOverlay", data);
24+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(ModType.HEIGHT_OVERLAY, data);
2525
}
2626

2727
/**
@@ -36,7 +36,7 @@ public static void setCurrentMap(UUID player, String mapName, int maxHeight) {
3636
data.addProperty("mapName", mapName);
3737
data.addProperty("maxHeight", maxHeight);
3838

39-
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(player, "heightOverlay", data);
39+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(player, ModType.HEIGHT_OVERLAY, data);
4040
}
4141

4242
/**
@@ -48,7 +48,7 @@ public static void reset() {
4848
data.addProperty("mapName", "");
4949
data.addProperty("maxHeight", -1);
5050

51-
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData("heightOverlay", data);
51+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(ModType.HEIGHT_OVERLAY, data);
5252
}
5353

5454
/**
@@ -60,6 +60,6 @@ public static void reset(UUID player) {
6060
data.addProperty("mapName", "");
6161
data.addProperty("maxHeight", -1);
6262

63-
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(player, "heightOverlay", data);
63+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(player, ModType.HEIGHT_OVERLAY, data);
6464
}
6565
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package net.badlion.modapicommon.mods;
2+
3+
public enum ModType {
4+
5+
HEIGHT_OVERLAY("heightOverlay"),
6+
WAYPOINTS("waypoints"),
7+
TNT_TIME("tntTime"),
8+
NOTIFICATION("notification");
9+
10+
private final String type;
11+
12+
ModType(String name) {
13+
this.type = name;
14+
}
15+
16+
public String getType() {
17+
return this.type;
18+
}
19+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package net.badlion.modapicommon.mods;
2+
3+
import net.badlion.modapicommon.AbstractBadlionApi;
4+
import net.badlion.modapicommon.utility.Notification;
5+
6+
import java.util.UUID;
7+
8+
/**
9+
* Class with API Hooks for our notifications system, allowing for sending custom notifications to BLC users.
10+
*/
11+
public class Notifications {
12+
13+
public static void sendNotification(UUID uuid, Notification notification) {
14+
if (uuid == null) {
15+
throw new IllegalStateException("uuid can't be null");
16+
}
17+
18+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendData(uuid, ModType.NOTIFICATION.getType(), AbstractBadlionApi.GSON_NON_PRETTY.toJsonTree(notification));
19+
}
20+
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class TNTTime {
1818
public static void setFuseOffset(int offset) {
1919
final JsonObject data = new JsonObject();
2020
data.addProperty("fuseOffset", offset);
21-
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData("tntTime", data);
21+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(ModType.TNT_TIME, data);
2222
}
2323

2424
/**
@@ -29,7 +29,7 @@ public static void setFuseOffset(int offset) {
2929
public static void setFuseOffset(UUID player, int offset) {
3030
final JsonObject data = new JsonObject();
3131
data.addProperty("fuseOffset", offset);
32-
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(player, "tntTime", data);
32+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(player, ModType.TNT_TIME, data);
3333
}
3434

3535
/**
@@ -39,7 +39,7 @@ public static void resetFuseOffset() {
3939
final JsonObject data = new JsonObject();
4040
data.addProperty("fuseOffset", 0);
4141

42-
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData("tntTime", data);
42+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(ModType.TNT_TIME, data);
4343
}
4444

4545
/**
@@ -49,6 +49,6 @@ public static void resetFuseOffset(UUID player) {
4949
final JsonObject data = new JsonObject();
5050
data.addProperty("fuseOffset", 0);
5151

52-
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(player, "tntTime", data);
52+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(player, ModType.TNT_TIME, data);
5353
}
5454
}

modapi-common/src/main/java/net/badlion/modapicommon/utility/AbstractWaypointManager.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.gson.JsonObject;
44
import net.badlion.modapicommon.AbstractBadlionApi;
5+
import net.badlion.modapicommon.mods.ModType;
56

67
import java.util.UUID;
78

@@ -35,6 +36,6 @@ public void resetWaypoints(UUID player) {
3536
final JsonObject data = new JsonObject();
3637
data.addProperty("action", "reset");
3738

38-
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(player, "waypoints", data);
39+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendModData(player, ModType.WAYPOINTS, data);
3940
}
4041
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package net.badlion.modapicommon.utility;
2+
3+
import com.google.gson.JsonObject;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class Notification {
9+
10+
public enum Level {
11+
ERROR, WARNING, SUCCESS, INFO
12+
}
13+
14+
@SuppressWarnings("unused")
15+
private final String type = "modapi";
16+
private final JsonObject data;
17+
private final List<NotificationButton> buttons;
18+
19+
private Notification() {
20+
this.data = new JsonObject();
21+
this.buttons = new ArrayList<>();
22+
}
23+
24+
public static Notification.Builder newNotification() {
25+
return new Notification.Builder(new Notification());
26+
}
27+
28+
public JsonObject getData() {
29+
return this.data;
30+
}
31+
32+
public List<NotificationButton> getButtons() {
33+
return this.buttons;
34+
}
35+
36+
public static class Builder {
37+
38+
private final Notification notification;
39+
40+
private Builder(Notification notification) {
41+
this.notification = notification;
42+
}
43+
44+
public Notification.Builder setTitle(String title) {
45+
this.notification.getData().addProperty("title", title);
46+
return this;
47+
}
48+
49+
public Notification.Builder setDescription(String description) {
50+
this.notification.getData().addProperty("description", description);
51+
return this;
52+
}
53+
54+
public Notification.Builder setDurationSeconds(long seconds) {
55+
return this.setDuration(seconds * 1000);
56+
}
57+
58+
public Notification.Builder setDuration(long durationMillis) {
59+
this.notification.getData().addProperty("duration", durationMillis);
60+
return this;
61+
}
62+
63+
public Notification.Builder setCloseOnClick(boolean closeOnClick) {
64+
this.notification.getData().addProperty("closeOnClick", closeOnClick);
65+
return this;
66+
}
67+
68+
public Notification.Builder setLevel(Level level) {
69+
this.notification.getData().addProperty("level", level.name());
70+
return this;
71+
}
72+
73+
public Notification.Builder addButton(NotificationButton button) {
74+
this.notification.getButtons().add(button);
75+
return this;
76+
}
77+
78+
public Notification build() {
79+
final JsonObject data = this.notification.getData();
80+
81+
if (!data.has("title")) {
82+
throw new RuntimeException("Title of notification must be set!");
83+
}
84+
85+
if (!data.has("description")) {
86+
throw new RuntimeException("Description of notification must be set!");
87+
}
88+
89+
return this.notification;
90+
}
91+
}
92+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package net.badlion.modapicommon.utility;
2+
3+
public class NotificationButton {
4+
5+
public enum Action {
6+
OPEN_URL, RUN_COMMAND, SUGGEST_COMMAND
7+
}
8+
9+
private final String text;
10+
private final Action action;
11+
private final String clickInfo;
12+
13+
public NotificationButton(String text, Action action, String clickInfo) {
14+
this.text = text;
15+
this.action = action;
16+
this.clickInfo = clickInfo;
17+
}
18+
}

0 commit comments

Comments
 (0)