diff --git a/api/src/main/java/com/rappytv/globaltags/api/ApiHandler.java b/api/src/main/java/com/rappytv/globaltags/api/ApiHandler.java index 82d40b83..50b24308 100644 --- a/api/src/main/java/com/rappytv/globaltags/api/ApiHandler.java +++ b/api/src/main/java/com/rappytv/globaltags/api/ApiHandler.java @@ -18,6 +18,7 @@ @SuppressWarnings("unused") public class ApiHandler { + // https://github.com/elysiajs/elysia/issues/495 private static final Map emptyBody = Map.of("body", "placeholder body"); private ApiHandler() {} @@ -61,6 +62,8 @@ public Map getBody() { request.responseBody.tag, request.responseBody.position, request.responseBody.icon, + request.responseBody.referred, + request.responseBody.referrals, request.responseBody.roles, request.responseBody.ban )); @@ -154,7 +157,27 @@ public static void resetTag(UUID uuid, Consumer consumer) { ) { @Override public Map getBody() { - // https://github.com/elysiajs/elysia/issues/495 + return emptyBody; + } + }; + request.sendAsyncRequest((response) -> { + if(!request.isSuccessful()) { + consumer.accept(new ApiResponse(false, request.getError())); + return; + } + TagCache.clear(); + TagCache.resolveSelf((info) -> consumer.accept(new ApiResponse(true, request.getMessage()))); + }); + } + + public static void referPlayer(UUID uuid, Consumer consumer) { + ApiRequest request = new ApiRequest( + Method.POST, + "/players/" + uuid + "/referral", + Util.getSessionToken() + ) { + @Override + public Map getBody() { return emptyBody; } }; @@ -217,7 +240,6 @@ public static void unbanPlayer(UUID uuid, Consumer consumer) { ) { @Override public Map getBody() { - // https://github.com/elysiajs/elysia/issues/495 return emptyBody; } }; @@ -281,7 +303,6 @@ public static void toggleAdmin(UUID uuid, Consumer consumer) { ) { @Override public Map getBody() { - // https://github.com/elysiajs/elysia/issues/495 return emptyBody; } }; @@ -303,7 +324,6 @@ public static void linkDiscord(Consumer consumer) { ) { @Override public Map getBody() { - // https://github.com/elysiajs/elysia/issues/495 return emptyBody; } }; @@ -325,7 +345,6 @@ public static void unlinkDiscord(Consumer consumer) { ) { @Override public Map getBody() { - // https://github.com/elysiajs/elysia/issues/495 return emptyBody; } }; diff --git a/api/src/main/java/com/rappytv/globaltags/api/ResponseBody.java b/api/src/main/java/com/rappytv/globaltags/api/ResponseBody.java index 6b95f26a..befd3dce 100644 --- a/api/src/main/java/com/rappytv/globaltags/api/ResponseBody.java +++ b/api/src/main/java/com/rappytv/globaltags/api/ResponseBody.java @@ -6,6 +6,8 @@ public class ResponseBody { public String tag; public String position; public String icon; + public boolean referred; + public int referrals; public String[] roles; public String message; public Ban ban; diff --git a/api/src/main/java/com/rappytv/globaltags/types/PlayerInfo.java b/api/src/main/java/com/rappytv/globaltags/types/PlayerInfo.java index 219a7274..51439df7 100644 --- a/api/src/main/java/com/rappytv/globaltags/types/PlayerInfo.java +++ b/api/src/main/java/com/rappytv/globaltags/types/PlayerInfo.java @@ -19,15 +19,28 @@ public class PlayerInfo { private final String plainTag; private final String position; private final String icon; + private final boolean referred; + private final int referrals; private final List roles; private final Suspension suspension; - public PlayerInfo(UUID uuid, String tag, String position, String icon, String[] roles, Ban ban) { + public PlayerInfo( + UUID uuid, + String tag, + String position, + String icon, + boolean referred, + int referrals, + String[] roles, + Ban ban + ) { this.uuid = uuid; this.tag = Util.translateColorCodes(tag); this.plainTag = tag != null ? tag : ""; this.position = position; this.icon = icon; + this.referred = referred; + this.referrals = referrals; this.roles = new ArrayList<>(); for(String role : roles) { try { @@ -101,6 +114,20 @@ public boolean isAdmin() { return roles.contains(GlobalRole.ADMIN); } + /** + * Returns if the player has referred to another player for inviting them + */ + public boolean hasReferred() { + return referred; + } + + /** + * Returns how many other players were invited by the player + */ + public int getReferrals() { + return referrals; + } + /** * Returns all of the players roles */ diff --git a/build.gradle.kts b/build.gradle.kts index b443727a..9afa2ab3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,7 +15,7 @@ labyMod { author = "RappyTV" description = "Get yourself a custom Globaltag that's publicly visible to anyone using this addon." minecraftVersion = "*" - version = System.getenv().getOrDefault("VERSION", "1.2.1") + version = System.getenv().getOrDefault("VERSION", "1.2.2") } minecraft { diff --git a/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java b/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java index 8e70f234..159bcb86 100644 --- a/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java +++ b/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java @@ -4,6 +4,7 @@ import com.rappytv.globaltags.command.GlobalTagCommand; import com.rappytv.globaltags.config.GlobalTagConfig; import com.rappytv.globaltags.interaction.EditBanInfoBulletPoint; +import com.rappytv.globaltags.interaction.ReferPlayerBulletPoint; import com.rappytv.globaltags.interaction.ToggleBanBulletPoint; import com.rappytv.globaltags.interaction.ChangeTagBulletPoint; import com.rappytv.globaltags.interaction.ClearTagBulletPoint; @@ -57,6 +58,7 @@ protected void enable() { labyAPI().interactionMenuRegistry().register(new ChangeTagBulletPoint()); labyAPI().interactionMenuRegistry().register(new ClearTagBulletPoint()); labyAPI().interactionMenuRegistry().register(new EditBanInfoBulletPoint()); + labyAPI().interactionMenuRegistry().register(new ReferPlayerBulletPoint()); labyAPI().interactionMenuRegistry().register(new ReportBulletPoint()); labyAPI().interactionMenuRegistry().register(new ToggleAdminBulletPoint()); labyAPI().interactionMenuRegistry().register(new ToggleBanBulletPoint()); diff --git a/core/src/main/java/com/rappytv/globaltags/interaction/ReferPlayerBulletPoint.java b/core/src/main/java/com/rappytv/globaltags/interaction/ReferPlayerBulletPoint.java new file mode 100644 index 00000000..bf4e6565 --- /dev/null +++ b/core/src/main/java/com/rappytv/globaltags/interaction/ReferPlayerBulletPoint.java @@ -0,0 +1,39 @@ +package com.rappytv.globaltags.interaction; + +import com.rappytv.globaltags.GlobalTagAddon; +import com.rappytv.globaltags.api.ApiHandler; +import com.rappytv.globaltags.types.PlayerInfo; +import com.rappytv.globaltags.util.TagCache; +import net.labymod.api.Laby; +import net.labymod.api.client.component.Component; +import net.labymod.api.client.entity.player.Player; +import net.labymod.api.client.entity.player.interaction.BulletPoint; +import net.labymod.api.client.gui.icon.Icon; + +public class ReferPlayerBulletPoint implements BulletPoint { + + @Override + public Component getTitle() { + return Component.translatable("globaltags.context.referral.name"); + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public void execute(Player player) { + ApiHandler.referPlayer(player.getUniqueId(), (response) -> Laby.references().chatExecutor().displayClientMessage( + Component.empty() + .append(GlobalTagAddon.prefix) + .append(response.getMessage()) + )); + } + + @Override + public boolean isVisible(Player player) { + PlayerInfo executer = TagCache.get(Laby.labyAPI().getUniqueId()); + return executer != null && !executer.hasReferred(); + } +} diff --git a/core/src/main/resources/assets/globaltags/i18n/en_us.json b/core/src/main/resources/assets/globaltags/i18n/en_us.json index 6180d055..fb771ba7 100644 --- a/core/src/main/resources/assets/globaltags/i18n/en_us.json +++ b/core/src/main/resources/assets/globaltags/i18n/en_us.json @@ -122,6 +122,9 @@ "context": { "reason": "Reason", "placeholder": "Please enter a reason...", + "referral": { + "name": "This player invited me to GlobalTags" + }, "report": { "name": "Report GlobalTag", "title": "Report %s",