From ea6730c27c38765022e3c56e736754761b407731 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 00:11:35 +0200 Subject: [PATCH 01/20] Remove old API --- .../rappytv/globaltags/api/ApiHandler.java | 379 ------------------ .../rappytv/globaltags/api/ApiRequest.java | 96 ----- .../rappytv/globaltags/api/ResponseBody.java | 27 -- .../rappytv/globaltags/types/GlobalIcon.java | 45 --- .../rappytv/globaltags/types/GlobalRole.java | 26 -- .../rappytv/globaltags/types/PlayerInfo.java | 240 ----------- .../com/rappytv/globaltags/util/TagCache.java | 57 --- .../com/rappytv/globaltags/util/Util.java | 96 ----- .../interaction/ToggleAdminBulletPoint.java | 42 -- 9 files changed, 1008 deletions(-) delete mode 100644 api/src/main/java/com/rappytv/globaltags/api/ApiHandler.java delete mode 100644 api/src/main/java/com/rappytv/globaltags/api/ApiRequest.java delete mode 100644 api/src/main/java/com/rappytv/globaltags/api/ResponseBody.java delete mode 100644 api/src/main/java/com/rappytv/globaltags/types/GlobalIcon.java delete mode 100644 api/src/main/java/com/rappytv/globaltags/types/GlobalRole.java delete mode 100644 api/src/main/java/com/rappytv/globaltags/types/PlayerInfo.java delete mode 100644 api/src/main/java/com/rappytv/globaltags/util/TagCache.java delete mode 100644 api/src/main/java/com/rappytv/globaltags/util/Util.java delete mode 100644 core/src/main/java/com/rappytv/globaltags/interaction/ToggleAdminBulletPoint.java diff --git a/api/src/main/java/com/rappytv/globaltags/api/ApiHandler.java b/api/src/main/java/com/rappytv/globaltags/api/ApiHandler.java deleted file mode 100644 index 50b2430..0000000 --- a/api/src/main/java/com/rappytv/globaltags/api/ApiHandler.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.rappytv.globaltags.api; - -import com.rappytv.globaltags.types.GlobalIcon; -import com.rappytv.globaltags.types.PlayerInfo; -import com.rappytv.globaltags.types.PlayerInfo.Suspension; -import com.rappytv.globaltags.util.TagCache; -import com.rappytv.globaltags.util.Util; -import net.labymod.api.Laby; -import net.labymod.api.client.component.Component; -import net.labymod.api.client.component.format.NamedTextColor; -import net.labymod.api.client.entity.player.tag.PositionType; -import net.labymod.api.util.io.web.request.Request.Method; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; -import java.util.function.Consumer; - -@SuppressWarnings("unused") -public class ApiHandler { - - // https://github.com/elysiajs/elysia/issues/495 - private static final Map emptyBody = Map.of("body", "placeholder body"); - - private ApiHandler() {} - - public static void getVersion(Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.GET, - "/", - null - ) { - @Override - public Map getBody() { - return null; - } - }; - request.sendAsyncRequest((response) -> consumer.accept(request.responseBody.version)); - } - - public static void getInfo(Consumer consumer) { - getInfo(Laby.labyAPI().getUniqueId(), consumer); - } - - public static void getInfo(UUID uuid, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.GET, - "/players/" + uuid, - Util.getSessionToken() - ) { - @Override - public Map getBody() { - return null; - } - }; - request.sendAsyncRequest((response) -> { - if(!request.isSuccessful()) { - consumer.accept(null); - return; - } - consumer.accept(new PlayerInfo( - uuid, - request.responseBody.tag, - request.responseBody.position, - request.responseBody.icon, - request.responseBody.referred, - request.responseBody.referrals, - request.responseBody.roles, - request.responseBody.ban - )); - }); - } - - public static void setTag(String tag, Consumer consumer) { - setTag(Laby.labyAPI().getUniqueId(), tag, consumer); - } - - public static void setTag(UUID uuid, String tag, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.POST, - "/players/" + uuid, - Util.getSessionToken() - ) { - @Override - public Map getBody() { - return Map.of("tag", tag); - } - }; - 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 setPosition(PositionType position, Consumer consumer) { - setPosition(Laby.labyAPI().getUniqueId(), position, consumer); - } - - public static void setPosition(UUID uuid, PositionType position, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.POST, - "/players/" + uuid + "/position", - Util.getSessionToken() - ) { - @Override - public Map getBody() { - return Map.of("position", position.name().split("_")[0]); - } - }; - 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 setIcon(GlobalIcon icon, Consumer consumer) { - setIcon(Laby.labyAPI().getUniqueId(), icon, consumer); - } - - public static void setIcon(UUID uuid, GlobalIcon icon, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.POST, - "/players/" + uuid + "/icon", - Util.getSessionToken() - ) { - @Override - public Map getBody() { - return Map.of("icon", icon.name()); - } - }; - 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 resetTag(Consumer consumer) { - resetTag(Laby.labyAPI().getUniqueId(), consumer); - } - - public static void resetTag(UUID uuid, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.DELETE, - "/players/" + uuid, - Util.getSessionToken() - ) { - @Override - public Map getBody() { - 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; - } - }; - 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 reportPlayer(UUID uuid, String reason, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.POST, - "/players/" + uuid + "/report", - Util.getSessionToken() - ) { - @Override - public Map getBody() { - return Map.of("reason", reason); - } - }; - request.sendAsyncRequest((response) -> { - if(!request.isSuccessful()) { - consumer.accept(new ApiResponse(false, request.getError())); - return; - } - consumer.accept(new ApiResponse(true, request.getMessage())); - }); - } - - public static void banPlayer(UUID uuid, String reason, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.POST, - "/players/" + uuid + "/ban", - Util.getSessionToken() - ) { - @Override - public Map getBody() { - return Map.of("reason", reason); - } - }; - 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 unbanPlayer(UUID uuid, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.DELETE, - "/players/" + uuid + "/ban", - Util.getSessionToken() - ) { - @Override - public Map getBody() { - 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 editBan(UUID uuid, Suspension suspension, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.PUT, - "/players/" + uuid + "/ban", - Util.getSessionToken() - ) { - @Override - public Map getBody() { - Objects.requireNonNull(suspension.getReason(), "Reason must not be null"); - return Map.of("reason", suspension.getReason(), "appealable", suspension.isAppealable()); - } - }; - 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 appealBan(String reason, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.POST, - "/players/" + Laby.labyAPI().getUniqueId() + "/ban/appeal", - Util.getSessionToken() - ) { - @Override - public Map getBody() { - return Map.of("reason", reason); - } - }; - request.sendAsyncRequest((response) -> { - if(!request.isSuccessful()) { - consumer.accept(new ApiResponse(false, request.getError())); - return; - } - consumer.accept(new ApiResponse(true, request.getMessage())); - }); - } - - public static void toggleAdmin(UUID uuid, Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.POST, - "/players/" + uuid + "/admin", - Util.getSessionToken() - ) { - @Override - public Map getBody() { - 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 linkDiscord(Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.POST, - "/players/" + Laby.labyAPI().getUniqueId() + "/connections/discord", - Util.getSessionToken() - ) { - @Override - public Map getBody() { - 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.responseBody.code))); - }); - } - - public static void unlinkDiscord(Consumer consumer) { - ApiRequest request = new ApiRequest( - Method.DELETE, - "/players/" + Laby.labyAPI().getUniqueId() + "/connections/discord", - Util.getSessionToken() - ) { - @Override - public Map getBody() { - 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 class ApiResponse { - - private final boolean successful; - private final Component message; - - public ApiResponse(boolean successful, String message) { - this.successful = successful; - this.message = Component.text(message, successful ? NamedTextColor.GREEN : NamedTextColor.RED); - } - - public boolean isSuccessful() { - return successful; - } - - public Component getMessage() { - return message; - } - } -} diff --git a/api/src/main/java/com/rappytv/globaltags/api/ApiRequest.java b/api/src/main/java/com/rappytv/globaltags/api/ApiRequest.java deleted file mode 100644 index f946d87..0000000 --- a/api/src/main/java/com/rappytv/globaltags/api/ApiRequest.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.rappytv.globaltags.api; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import net.labymod.api.Laby; -import net.labymod.api.util.io.web.request.Callback; -import net.labymod.api.util.io.web.request.Request; -import net.labymod.api.util.io.web.request.Request.Method; -import net.labymod.api.util.io.web.request.types.GsonRequest; -import java.util.Map; - -public abstract class ApiRequest { - - private static boolean localizedResponses; - private static String version; - - private final Gson gson = new Gson(); - private boolean successful; - private String message; - private String error; - protected ResponseBody responseBody; - - private final Method method; - private final String path; - private final String key; - - public ApiRequest(Method method, String path, String key) { - this.method = method; - this.path = path; - this.key = key; - } - - public void sendAsyncRequest(Callback callback) { - GsonRequest request = Request.ofGson(JsonObject.class) - .url(getApiBase() + path) - .method(method) - .addHeader("Content-Type", "application/json") - .addHeader("Authorization", key != null ? "LabyConnect " + key : "") - .addHeader("X-Addon-Version", version) - .handleErrorStream() - .async(); - - Map body = getBody(); - if(body != null) - request.json(body); - - if(localizedResponses) - request.addHeader("X-Minecraft-Language", Laby.labyAPI().minecraft().options().getCurrentLanguage()); - - request.execute((response) -> { - if(response.hasException()) { - successful = false; - error = response.exception().getMessage(); - callback.accept(response); - response.exception().printStackTrace(); - return; - } - responseBody = gson.fromJson(response.get(), ResponseBody.class); - - if(responseBody.error != null) { - error = responseBody.error; - successful = false; - callback.accept(response); - return; - } - - if(responseBody.message != null) this.message = responseBody.message; - successful = true; - callback.accept(response); - }); - } - - public boolean isSuccessful() { - return successful; - } - public String getMessage() { - return message; - } - public String getError() { - return error; - } - public abstract Map getBody(); - - public static void useLocalizedResponses(boolean value) { - localizedResponses = value; - } - public static void addonVersion(String value) { - version = value; - } - public static String getVersion() { - return version; - } - private String getApiBase() { - return "https://gt.rappytv.com"; - } -} diff --git a/api/src/main/java/com/rappytv/globaltags/api/ResponseBody.java b/api/src/main/java/com/rappytv/globaltags/api/ResponseBody.java deleted file mode 100644 index befd3dc..0000000 --- a/api/src/main/java/com/rappytv/globaltags/api/ResponseBody.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.rappytv.globaltags.api; - -public class ResponseBody { - - // For success - public String tag; - public String position; - public String icon; - public boolean referred; - public int referrals; - public String[] roles; - public String message; - public Ban ban; - - // For errors - public String error; - - // Other - public String version; - public String code; - - public static class Ban { - public boolean active; - public String reason; - public boolean appealable; - } -} diff --git a/api/src/main/java/com/rappytv/globaltags/types/GlobalIcon.java b/api/src/main/java/com/rappytv/globaltags/types/GlobalIcon.java deleted file mode 100644 index f3f1230..0000000 --- a/api/src/main/java/com/rappytv/globaltags/types/GlobalIcon.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.rappytv.globaltags.types; - -import net.labymod.api.client.gui.icon.Icon; -import net.labymod.api.client.resources.ResourceLocation; -import org.jetbrains.annotations.Nullable; - -@SuppressWarnings("unused") -public enum GlobalIcon { - NONE, - BEREAL, - DISCORD, - EBIO, - EPICGAMES, - GITHUB, - GITLAB, - INSTAGRAM, - KICK, - PLAYSTATION, - SNAPCHAT, - STEAM, - THREADS, - TIKTOK, - TWITCH, - X, - XBOX, - YOUTUBE; - - private final Icon icon; - - GlobalIcon() { - this.icon = Icon.texture(ResourceLocation.create( - "globaltags", - "textures/icons/" + this.name().toLowerCase() + ".png" - )); - } - - /** - * Get the {@link Icon} of the {@link GlobalIcon} - * @return The {@link Icon} or null if the {@link GlobalIcon} equals {@link GlobalIcon#NONE} - */ - @Nullable - public Icon getIcon() { - return this != NONE ? icon : null; - } -} diff --git a/api/src/main/java/com/rappytv/globaltags/types/GlobalRole.java b/api/src/main/java/com/rappytv/globaltags/types/GlobalRole.java deleted file mode 100644 index 267f1d1..0000000 --- a/api/src/main/java/com/rappytv/globaltags/types/GlobalRole.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.rappytv.globaltags.types; - -import net.labymod.api.client.gui.icon.Icon; -import net.labymod.api.client.resources.ResourceLocation; -import org.jetbrains.annotations.NotNull; - -public enum GlobalRole { - ADMIN("purple"), - DEVELOPER("aqua"), - MODERATOR("orange"), - SUPPORTER("green"); - - private final Icon icon; - - GlobalRole(String color) { - this.icon = Icon.texture(ResourceLocation.create( - "globaltags", - "textures/icons/roles/" + color + ".png" - )); - } - - @NotNull - public Icon getIcon() { - return icon; - } -} diff --git a/api/src/main/java/com/rappytv/globaltags/types/PlayerInfo.java b/api/src/main/java/com/rappytv/globaltags/types/PlayerInfo.java deleted file mode 100644 index 460c875..0000000 --- a/api/src/main/java/com/rappytv/globaltags/types/PlayerInfo.java +++ /dev/null @@ -1,240 +0,0 @@ -package com.rappytv.globaltags.types; - -import com.rappytv.globaltags.api.ResponseBody.Ban; -import com.rappytv.globaltags.util.Util; -import net.labymod.api.client.component.Component; -import net.labymod.api.client.entity.player.tag.PositionType; -import net.labymod.api.client.gui.icon.Icon; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.UUID; - -public class PlayerInfo { - - private final UUID uuid; - private final Component tag; - 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, - 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 { - this.roles.add(GlobalRole.valueOf(role.toUpperCase())); - } catch (Exception ignored) {} - } - this.suspension = ban != null ? new Suspension(ban) : new Suspension(); - } - - /** - * Returns the player's uuid - */ - @NotNull - public UUID getUUID() { - return uuid; - } - - /** - * Returns the player's GlobalTag as a colored component - */ - @Nullable - public Component getTag() { - return !plainTag.isEmpty() ? tag : null; - } - - /** - * Returns the player's GlobalTag as a plain string - with color codes - */ - @NotNull - public String getPlainTag() { - return plainTag; - } - - /** - * Returns the player's GlobalTag position - */ - @NotNull - public PositionType getPosition() { - if(position == null) return PositionType.ABOVE_NAME; - return switch(position) { - default -> PositionType.ABOVE_NAME; - case "BELOW" -> PositionType.BELOW_NAME; - case "RIGHT" -> PositionType.RIGHT_TO_NAME; - case "LEFT" -> PositionType.LEFT_TO_NAME; - }; - } - - /** - * Returns the {@link GlobalIcon} enum value which the player has selected - */ - @NotNull - public GlobalIcon getGlobalIcon() { - try { - return GlobalIcon.valueOf(icon); - } catch (Exception ignored) { - return GlobalIcon.NONE; - } - } - - /** - * Returns the global icon of the player. See {@link GlobalIcon#getIcon()} - */ - @Nullable - public Icon getIcon() { - return getGlobalIcon().getIcon(); - } - - /** - * Returns if the player is a GlobalTag admin - */ - 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 - */ - @NotNull - public List getRoles() { - return roles; - } - - /** - * Returns the players highest role - */ - @Nullable - public GlobalRole getHighestRole() { - for(GlobalRole role : GlobalRole.values()) { - if(roles.contains(role)) return role; - } - return null; - } - - /** - * Use {@link PlayerInfo#isSuspended()} instead - */ - @Deprecated(forRemoval = true) - public boolean isBanned() { - return isSuspended(); - } - - /** - * Use {@link PlayerInfo#getSuspension()} instead - */ - @Deprecated(forRemoval = true) - @Nullable - public String getBanReason() { - return suspension.reason; - } - - /** - * Shortcut to check if the player suspension is active - */ - public boolean isSuspended() { - return suspension.active; - } - - /** - * Gets the suspension object from a player - */ - @NotNull - public Suspension getSuspension() { - return suspension; - } - - @SuppressWarnings("unused") - public static class Suspension { - - private final boolean active; - private final String reason; - private final boolean appealable; - - /** - * Creates a suspension from a {@link Ban} object - */ - public Suspension(Ban ban) { - Objects.requireNonNull(ban, "Ban must not be null"); - this.active = ban.active; - this.reason = ban.reason; - this.appealable = ban.appealable; - } - - /** - * Creates an inactive suspension - */ - public Suspension() { - this.active = false; - this.reason = null; - this.appealable = false; - } - - /** - * Creates an active suspension - */ - public Suspension(String reason, boolean appealable) { - this.active = true; - this.reason = reason; - this.appealable = appealable; - } - - /** - * Returns if the suspension is active or not - */ - public boolean isActive() { - return active; - } - - /** - * Returns the suspension reason - */ - @Nullable - public String getReason() { - return reason; - } - - /** - * Returns if the suspension can be appealed - */ - public boolean isAppealable() { - return appealable; - } - } -} diff --git a/api/src/main/java/com/rappytv/globaltags/util/TagCache.java b/api/src/main/java/com/rappytv/globaltags/util/TagCache.java deleted file mode 100644 index 6972bc9..0000000 --- a/api/src/main/java/com/rappytv/globaltags/util/TagCache.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.rappytv.globaltags.util; - -import com.rappytv.globaltags.api.ApiHandler; -import com.rappytv.globaltags.types.PlayerInfo; -import net.labymod.api.Laby; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.function.Consumer; - -public class TagCache { - - private TagCache() {} - - private static final Map cache = new HashMap<>(); - private static final Set resolving = new HashSet<>(); - - public static void add(UUID uuid, PlayerInfo info) { - cache.put(uuid, info); - } - public static void remove(UUID uuid) { - cache.remove(uuid); - } - public static boolean has(UUID uuid) { - return cache.containsKey(uuid); - } - public static PlayerInfo get(UUID uuid) { - return cache.get(uuid); - } - public static void resolveSelf() { - resolveSelf((info) -> {}); - } - public static void resolveSelf(Consumer consumer) { - resolve(Laby.labyAPI().getUniqueId(), consumer); - } - public static void resolve(UUID uuid) { - resolve(uuid, (info) -> {}); - } - public static void resolve(UUID uuid, Consumer consumer) { - if(has(uuid)) { - consumer.accept(get(uuid)); - return; - } - if(resolving.contains(uuid)) return; - resolving.add(uuid); - ApiHandler.getInfo(uuid, (info) -> { - add(uuid, info); - resolving.remove(uuid); - resolve(uuid, consumer); - }); - } - public static void clear() { - cache.clear(); - } -} diff --git a/api/src/main/java/com/rappytv/globaltags/util/Util.java b/api/src/main/java/com/rappytv/globaltags/util/Util.java deleted file mode 100644 index aeb6598..0000000 --- a/api/src/main/java/com/rappytv/globaltags/util/Util.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.rappytv.globaltags.util; - -import net.labymod.api.Laby; -import net.labymod.api.client.component.Component; -import net.labymod.api.client.component.format.NamedTextColor; -import net.labymod.api.client.component.serializer.legacy.LegacyComponentSerializer; -import net.labymod.api.client.gui.screen.widget.widgets.popup.SimpleAdvancedPopup; -import net.labymod.api.labyconnect.LabyConnectSession; -import net.labymod.api.labyconnect.TokenStorage.Purpose; -import net.labymod.api.labyconnect.TokenStorage.Token; -import net.labymod.api.notification.Notification; -import net.labymod.api.notification.Notification.Type; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class Util { - - public static final Component unchanged = Component.translatable( - "globaltags.settings.tags.updateSettings.unchanged", - NamedTextColor.DARK_GRAY - ); - private static Component tagResponse = null; - private static Component positionResponse = null; - private static Component iconResponse = null; - - public static void notify(String title, String text) { - notify( - Component.text(title), - Component.text(text) - ); - } - - public static void notify(Component title, Component description) { - Notification.builder() - .title(title) - .text(description) - .type(Type.SYSTEM) - .buildAndPush(); - } - - public static void update(ResultType type, Component component) { - switch (type) { - case TAG -> tagResponse = component; - case POSITION -> positionResponse = component; - case ICON -> iconResponse = component; - } - if(tagResponse == null || positionResponse == null || iconResponse == null) return; - SimpleAdvancedPopup popup = SimpleAdvancedPopup - .builder() - .title(Component.text("Update result", NamedTextColor.AQUA)) - .description(Component.translatable( - "globaltags.settings.tags.updateSettings.result", - tagResponse, - positionResponse, - iconResponse - )) - .build(); - - Laby.labyAPI().minecraft().executeOnRenderThread(() -> { - popup.displayInOverlay(); - TagCache.clear(); - TagCache.resolveSelf(); - tagResponse = null; - positionResponse = null; - iconResponse = null; - }); - } - - public enum ResultType { - TAG, - POSITION, - ICON - } - - @NotNull - public static Component translateColorCodes(String string) { - if(string == null) string = ""; - return LegacyComponentSerializer - .legacyAmpersand() - .deserialize(string); - } - - public static @Nullable String getSessionToken() { - LabyConnectSession session = Laby.labyAPI().labyConnect().getSession(); - if(session == null) return null; - - Token token = session.tokenStorage().getToken( - Purpose.JWT, - session.self().getUniqueId() - ); - - if(token == null || token.isExpired()) return null; - - return token.getToken(); - } -} diff --git a/core/src/main/java/com/rappytv/globaltags/interaction/ToggleAdminBulletPoint.java b/core/src/main/java/com/rappytv/globaltags/interaction/ToggleAdminBulletPoint.java deleted file mode 100644 index c8742f7..0000000 --- a/core/src/main/java/com/rappytv/globaltags/interaction/ToggleAdminBulletPoint.java +++ /dev/null @@ -1,42 +0,0 @@ -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 ToggleAdminBulletPoint implements BulletPoint { - - private PlayerInfo target; - - @Override - public Component getTitle() { - return Component.translatable("globaltags.context.admin." + (target.isAdmin() ? "remove" : "set")); - } - - @Override - public Icon getIcon() { - return null; - } - - @Override - public void execute(Player player) { - ApiHandler.toggleAdmin(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()); - target = TagCache.get(player.getUniqueId()); - return executer != null && executer.isAdmin() && target != null; - } -} From babc065f3419e8790bb99a3fa6bd5765049b5f7b Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 00:11:58 +0200 Subject: [PATCH 02/20] Add new api wrapper --- api/build.gradle.kts | 1 + core/build.gradle.kts | 1 + 2 files changed, 2 insertions(+) diff --git a/api/build.gradle.kts b/api/build.gradle.kts index efe2f89..38cd155 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -6,6 +6,7 @@ plugins { dependencies { labyApi("api") + maven(mavenCentral(), "com.rappytv.globaltags:GlobalTagsJava:1.0.0") // If you want to use external libraries, you can do that here. // The dependencies that are specified here are loaded into your project but will also diff --git a/core/build.gradle.kts b/core/build.gradle.kts index dda4a00..3ec3530 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -6,6 +6,7 @@ plugins { dependencies { api(project(":api")) + maven(mavenCentral(), "com.rappytv.globaltags:GlobalTagsJava:1.0.0") // If you want to use external libraries, you can do that here. // The dependencies that are specified here are loaded into your project but will also From 5e9cc7631f8cd8f461adbcdfa8a2273017d1fa59 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 00:12:10 +0200 Subject: [PATCH 03/20] New API implementation --- .../rappytv/globaltags/api/GlobalTagAPI.java | 90 +++++++++++++++++++ .../java/com/rappytv/globaltags/api/Util.java | 76 ++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100644 api/src/main/java/com/rappytv/globaltags/api/GlobalTagAPI.java create mode 100644 api/src/main/java/com/rappytv/globaltags/api/Util.java diff --git a/api/src/main/java/com/rappytv/globaltags/api/GlobalTagAPI.java b/api/src/main/java/com/rappytv/globaltags/api/GlobalTagAPI.java new file mode 100644 index 0000000..bdc90f6 --- /dev/null +++ b/api/src/main/java/com/rappytv/globaltags/api/GlobalTagAPI.java @@ -0,0 +1,90 @@ +package com.rappytv.globaltags.api; + +import com.rappytv.globaltags.wrapper.GlobalTagsAPI; +import com.rappytv.globaltags.wrapper.enums.AuthProvider; +import com.rappytv.globaltags.wrapper.http.ApiHandler; +import com.rappytv.globaltags.wrapper.model.PlayerInfo; +import com.rappytv.globaltags.wrapper.model.PlayerInfo.Cache; +import net.labymod.api.Laby; +import net.labymod.api.client.component.Component; +import net.labymod.api.client.component.serializer.legacy.LegacyComponentSerializer; +import net.labymod.api.labyconnect.LabyConnectSession; +import net.labymod.api.labyconnect.TokenStorage.Purpose; +import net.labymod.api.labyconnect.TokenStorage.Token; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.UUID; +import java.util.function.Supplier; + +public class GlobalTagAPI implements GlobalTagsAPI { + + private final Cache cache = new Cache<>(this); + private final ApiHandler apiHandler = new ApiHandler<>(this); + + private final Supplier addonVersion; + private final Supplier language; + + public GlobalTagAPI(Supplier addonVersion, Supplier language) { + this.addonVersion = addonVersion; + this.language = language; + } + + @Override + public @NotNull String getApiBase() { + return "https://gt.rappytv.com"; + } + + @Override + public @NotNull String getAgent() { + return "LabyAddon v" + addonVersion.get(); + } + + @Override + public @NotNull String getLanguageCode() { + return language.get(); + } + + @Override + public @NotNull Component translateColorCodes(@Nullable String string) { + if(string == null) string = ""; + return LegacyComponentSerializer + .legacyAmpersand() + .deserialize(string); + } + + @Override + public @Nullable UUID getClientUUID() { + return null; + } + + @NotNull + @Override + public PlayerInfo.Cache getCache() { + return cache; + } + + @Override + public @NotNull ApiHandler getApiHandler() { + return apiHandler; + } + + @Override + public @NotNull AuthProvider getAuthType() { + return AuthProvider.LABYCONNECT; + } + + @Override + public @Nullable String getAuthorization() { + LabyConnectSession session = Laby.labyAPI().labyConnect().getSession(); + if(session == null) return null; + + Token token = session.tokenStorage().getToken( + Purpose.JWT, + session.self().getUniqueId() + ); + + if(token == null || token.isExpired()) return null; + + return token.getToken(); + } +} diff --git a/api/src/main/java/com/rappytv/globaltags/api/Util.java b/api/src/main/java/com/rappytv/globaltags/api/Util.java new file mode 100644 index 0000000..ff10bc4 --- /dev/null +++ b/api/src/main/java/com/rappytv/globaltags/api/Util.java @@ -0,0 +1,76 @@ +package com.rappytv.globaltags.api; + +import com.rappytv.globaltags.wrapper.http.ApiHandler.ApiResponse; +import net.labymod.api.Laby; +import net.labymod.api.client.component.Component; +import net.labymod.api.client.component.format.NamedTextColor; +import net.labymod.api.client.gui.screen.widget.widgets.popup.SimpleAdvancedPopup; +import net.labymod.api.notification.Notification; +import net.labymod.api.notification.Notification.Type; + +public class Util { + + public static final Component unchanged = Component.translatable( + "globaltags.settings.tags.updateSettings.unchanged", + NamedTextColor.DARK_GRAY + ); + private static Component tagResponse = null; + private static Component positionResponse = null; + private static Component iconResponse = null; + + public static void update(GlobalTagAPI api, ResultType type, Component component) { + switch (type) { + case TAG -> tagResponse = component; + case POSITION -> positionResponse = component; + case ICON -> iconResponse = component; + } + if(tagResponse == null || positionResponse == null || iconResponse == null) return; + SimpleAdvancedPopup popup = SimpleAdvancedPopup + .builder() + .title(Component.text("Update result", NamedTextColor.AQUA)) + .description(Component.translatable( + "globaltags.settings.tags.updateSettings.result", + tagResponse, + positionResponse, + iconResponse + )) + .build(); + + Laby.labyAPI().minecraft().executeOnRenderThread(() -> { + popup.displayInOverlay(); + api.getCache().clear(); + api.getCache().resolveSelf(); + tagResponse = null; + positionResponse = null; + iconResponse = null; + }); + } + + public enum ResultType { + TAG, + POSITION, + ICON + } + + public static void notify(String title, String text) { + notify( + Component.text(title), + Component.text(text) + ); + } + + public static void notify(Component title, Component description) { + Notification.builder() + .title(title) + .text(description) + .type(Type.SYSTEM) + .buildAndPush(); + } + + public static Component getResponseComponent(ApiResponse response) { + return Component.text( + response.data(), + response.successful() ? NamedTextColor.GREEN : NamedTextColor.RED + ); + } +} From 3867e3352d85b4e693368e055a79799e786860e2 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 00:12:25 +0200 Subject: [PATCH 04/20] Adapt everything to new api --- .../rappytv/globaltags/GlobalTagAddon.java | 31 +++++----- .../globaltags/activities/BanActivity.java | 11 ++-- .../activities/ChangeTagActivity.java | 14 +++-- .../activities/EditBanActivity.java | 16 ++--- .../activities/ReportUUIDActivity.java | 11 ++-- .../globaltags/command/GlobalTagCommand.java | 20 ++++--- .../subcommands/ClearCacheCommand.java | 11 ++-- .../subcommands/LinkDiscordSubcommand.java | 19 +++--- .../subcommands/UnlinkDiscordSubcommand.java | 14 +++-- .../globaltags/config/GlobalTagConfig.java | 20 +++---- .../config/subconfig/TagSubConfig.java | 60 ++++++++++--------- .../globaltags/config/widget/AppealPopup.java | 16 +++-- .../config/widget/TagPreviewWidget.java | 36 ++++++----- .../interaction/ChangeTagBulletPoint.java | 21 +++++-- .../interaction/ClearTagBulletPoint.java | 21 ++++--- .../interaction/EditBanInfoBulletPoint.java | 17 +++--- .../interaction/ReferPlayerBulletPoint.java | 18 ++++-- .../interaction/ReportBulletPoint.java | 19 ++++-- .../interaction/ToggleBanBulletPoint.java | 22 ++++--- .../listener/ServerNavigationListener.java | 14 ++++- .../rappytv/globaltags/nametag/CustomTag.java | 37 +++++++++--- 21 files changed, 279 insertions(+), 169 deletions(-) diff --git a/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java b/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java index 159bcb8..db158b6 100644 --- a/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java +++ b/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java @@ -1,6 +1,6 @@ package com.rappytv.globaltags; -import com.rappytv.globaltags.api.ApiRequest; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.command.GlobalTagCommand; import com.rappytv.globaltags.config.GlobalTagConfig; import com.rappytv.globaltags.interaction.EditBanInfoBulletPoint; @@ -9,10 +9,8 @@ import com.rappytv.globaltags.interaction.ChangeTagBulletPoint; import com.rappytv.globaltags.interaction.ClearTagBulletPoint; import com.rappytv.globaltags.interaction.ReportBulletPoint; -import com.rappytv.globaltags.interaction.ToggleAdminBulletPoint; import com.rappytv.globaltags.listener.ServerNavigationListener; import com.rappytv.globaltags.nametag.CustomTag; -import com.rappytv.globaltags.util.TagCache; import net.labymod.api.Laby; import net.labymod.api.addon.LabyAddon; import net.labymod.api.client.component.Component; @@ -23,8 +21,6 @@ import net.labymod.api.models.addon.annotation.AddonMain; import net.labymod.api.revision.SimpleRevision; import net.labymod.api.util.version.SemanticVersion; -import java.util.Timer; -import java.util.TimerTask; @AddonMain public class GlobalTagAddon extends LabyAddon { @@ -33,6 +29,8 @@ public class GlobalTagAddon extends LabyAddon { .append(Component.text("GlobalTags").color(NamedTextColor.BLUE).decorate(TextDecoration.BOLD)) .append(Component.text(" » ", NamedTextColor.DARK_GRAY)); + private static GlobalTagAPI api; + @Override protected void preConfigurationLoad() { Laby.references().revisionRegistry().register(new SimpleRevision("globaltags", new SemanticVersion("1.1.0"), "2023-11-24")); @@ -44,7 +42,12 @@ protected void preConfigurationLoad() { @Override protected void enable() { registerSettingCategory(); - ApiRequest.addonVersion(addonInfo().getVersion()); + api = new GlobalTagAPI( + () -> addonInfo().getVersion(), + () -> configuration().localizedResponses().get() + ? Laby.labyAPI().minecraft().options().getCurrentLanguage() + : "en_us" + ); TagRegistry tagRegistry = labyAPI().tagRegistry(); for (PositionType positionType : PositionType.values()) @@ -60,22 +63,16 @@ protected void enable() { 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()); - registerCommand(new GlobalTagCommand()); - - // Clear cache every 5 minutes - new Timer().scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - TagCache.clear(); - TagCache.resolveSelf(); - } - }, 1000 * 10, 1000 * 60 * 5); + registerCommand(new GlobalTagCommand(this)); } @Override protected Class configurationClass() { return GlobalTagConfig.class; } + + public static GlobalTagAPI getAPI() { + return api; + } } diff --git a/core/src/main/java/com/rappytv/globaltags/activities/BanActivity.java b/core/src/main/java/com/rappytv/globaltags/activities/BanActivity.java index 56f3a35..9676560 100644 --- a/core/src/main/java/com/rappytv/globaltags/activities/BanActivity.java +++ b/core/src/main/java/com/rappytv/globaltags/activities/BanActivity.java @@ -1,7 +1,8 @@ package com.rappytv.globaltags.activities; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.api.ApiHandler; +import com.rappytv.globaltags.api.Util; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; import net.labymod.api.client.component.format.NamedTextColor; @@ -26,10 +27,12 @@ @AutoActivity public class BanActivity extends SimpleActivity { + private final GlobalTagAPI api; private final UUID uuid; private final String username; - public BanActivity(UUID uuid, String username) { + public BanActivity(GlobalTagAPI api, UUID uuid, String username) { + this.api = api; this.uuid = uuid; this.username = username; } @@ -52,10 +55,10 @@ public void initialize(Parent parent) { sendButton.setEnabled(false); sendButton.setActionListener(() -> { Laby.labyAPI().minecraft().minecraftWindow().displayScreen((ScreenInstance) null); - ApiHandler.banPlayer(uuid, inputWidget.getText(), (response) -> Laby.references().chatExecutor().displayClientMessage( + api.getApiHandler().banPlayer(uuid, inputWidget.getText(), (response) -> Laby.references().chatExecutor().displayClientMessage( Component.empty() .append(GlobalTagAddon.prefix) - .append(response.getMessage()) + .append(Util.getResponseComponent(response)) )); }); inputWidget.updateListener((text) -> sendButton.setEnabled(!text.isBlank())); diff --git a/core/src/main/java/com/rappytv/globaltags/activities/ChangeTagActivity.java b/core/src/main/java/com/rappytv/globaltags/activities/ChangeTagActivity.java index e3712c2..9812a9a 100644 --- a/core/src/main/java/com/rappytv/globaltags/activities/ChangeTagActivity.java +++ b/core/src/main/java/com/rappytv/globaltags/activities/ChangeTagActivity.java @@ -1,9 +1,9 @@ package com.rappytv.globaltags.activities; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.api.ApiHandler; import java.util.UUID; -import com.rappytv.globaltags.util.TagCache; +import com.rappytv.globaltags.api.Util; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; import net.labymod.api.client.component.format.NamedTextColor; @@ -26,10 +26,12 @@ @AutoActivity public class ChangeTagActivity extends SimpleActivity { + private final GlobalTagAPI api; private final UUID uuid; private final String username; - public ChangeTagActivity(UUID uuid, String username) { + public ChangeTagActivity(GlobalTagAPI api, UUID uuid, String username) { + this.api = api; this.uuid = uuid; this.username = username; } @@ -37,7 +39,7 @@ public ChangeTagActivity(UUID uuid, String username) { @Override public void initialize(Parent parent) { super.initialize(parent); - TagCache.resolve(uuid, (info) -> { + api.getCache().resolve(uuid, (info) -> { FlexibleContentWidget windowWidget = new FlexibleContentWidget().addId("window"); HorizontalListWidget profileWrapper = new HorizontalListWidget().addId("header"); IconWidget headWidget = new IconWidget(Icon.head(this.uuid)).addId("head"); @@ -55,10 +57,10 @@ public void initialize(Parent parent) { sendButton.setEnabled(!inputWidget.getText().isBlank() && (!hasTag || !inputWidget.getText().equals(info.getPlainTag()))); sendButton.setActionListener(() -> { Laby.labyAPI().minecraft().minecraftWindow().displayScreen((ScreenInstance) null); - ApiHandler.setTag(uuid, inputWidget.getText(), (response) -> Laby.references().chatExecutor().displayClientMessage( + api.getApiHandler().setTag(uuid, inputWidget.getText(), (response) -> Laby.references().chatExecutor().displayClientMessage( Component.empty() .append(GlobalTagAddon.prefix) - .append(response.getMessage()) + .append(Util.getResponseComponent(response)) )); }); inputWidget.updateListener((text) -> sendButton.setEnabled(!text.isBlank() && (!hasTag || !inputWidget.getText().equals(info.getPlainTag())))); diff --git a/core/src/main/java/com/rappytv/globaltags/activities/EditBanActivity.java b/core/src/main/java/com/rappytv/globaltags/activities/EditBanActivity.java index 646dda3..c8c69e2 100644 --- a/core/src/main/java/com/rappytv/globaltags/activities/EditBanActivity.java +++ b/core/src/main/java/com/rappytv/globaltags/activities/EditBanActivity.java @@ -1,11 +1,11 @@ package com.rappytv.globaltags.activities; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.api.ApiHandler; import java.util.UUID; import java.util.function.Consumer; -import com.rappytv.globaltags.types.PlayerInfo.Suspension; -import com.rappytv.globaltags.util.TagCache; +import com.rappytv.globaltags.api.Util; +import com.rappytv.globaltags.wrapper.model.PlayerInfo.Suspension; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; import net.labymod.api.client.component.format.NamedTextColor; @@ -30,10 +30,12 @@ @AutoActivity public class EditBanActivity extends SimpleActivity { + private final GlobalTagAPI api; private final UUID uuid; private final String username; - public EditBanActivity(UUID uuid, String username) { + public EditBanActivity(GlobalTagAPI api, UUID uuid, String username) { + this.api = api; this.uuid = uuid; this.username = username; } @@ -41,7 +43,7 @@ public EditBanActivity(UUID uuid, String username) { @Override public void initialize(Parent parent) { super.initialize(parent); - TagCache.resolve(uuid, (info) -> { + api.getCache().resolve(uuid, (info) -> { Suspension suspension = info.getSuspension(); FlexibleContentWidget windowWidget = new FlexibleContentWidget().addId("window"); HorizontalListWidget profileWrapper = new HorizontalListWidget().addId("header"); @@ -79,11 +81,11 @@ public void initialize(Parent parent) { inputWidget.getText(), checkBoxWidget.state() == State.CHECKED ); - ApiHandler.editBan(uuid, editedSuspension, (response) -> + api.getApiHandler().editBan(uuid, editedSuspension, (response) -> Laby.references().chatExecutor().displayClientMessage( Component.empty() .append(GlobalTagAddon.prefix) - .append(response.getMessage()) + .append(Util.getResponseComponent(response)) ) ); }); diff --git a/core/src/main/java/com/rappytv/globaltags/activities/ReportUUIDActivity.java b/core/src/main/java/com/rappytv/globaltags/activities/ReportUUIDActivity.java index cd5670c..628056a 100644 --- a/core/src/main/java/com/rappytv/globaltags/activities/ReportUUIDActivity.java +++ b/core/src/main/java/com/rappytv/globaltags/activities/ReportUUIDActivity.java @@ -1,7 +1,8 @@ package com.rappytv.globaltags.activities; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.api.ApiHandler; +import com.rappytv.globaltags.api.Util; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; import net.labymod.api.client.component.format.NamedTextColor; @@ -25,10 +26,12 @@ @AutoActivity public class ReportUUIDActivity extends SimpleActivity { + private final GlobalTagAPI api; private final UUID uuid; private final String username; - public ReportUUIDActivity(UUID uuid, String username) { + public ReportUUIDActivity(GlobalTagAPI api, UUID uuid, String username) { + this.api = api; this.uuid = uuid; this.username = username; } @@ -51,10 +54,10 @@ public void initialize(Parent parent) { sendButton.setEnabled(false); sendButton.setActionListener(() -> { Laby.labyAPI().minecraft().minecraftWindow().displayScreen((ScreenInstance) null); - ApiHandler.reportPlayer(uuid, inputWidget.getText(), (response) -> Laby.references().chatExecutor().displayClientMessage( + api.getApiHandler().reportPlayer(uuid, inputWidget.getText(), (response) -> Laby.references().chatExecutor().displayClientMessage( Component.empty() .append(GlobalTagAddon.prefix) - .append(response.getMessage()) + .append(Util.getResponseComponent(response)) )); }); inputWidget.updateListener((text) -> sendButton.setEnabled(!text.isBlank())); diff --git a/core/src/main/java/com/rappytv/globaltags/command/GlobalTagCommand.java b/core/src/main/java/com/rappytv/globaltags/command/GlobalTagCommand.java index 6f59867..05bec1c 100644 --- a/core/src/main/java/com/rappytv/globaltags/command/GlobalTagCommand.java +++ b/core/src/main/java/com/rappytv/globaltags/command/GlobalTagCommand.java @@ -1,8 +1,7 @@ package com.rappytv.globaltags.command; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.api.ApiHandler; -import com.rappytv.globaltags.api.ApiRequest; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.command.subcommands.ClearCacheCommand; import com.rappytv.globaltags.command.subcommands.LinkDiscordSubcommand; import com.rappytv.globaltags.command.subcommands.UnlinkDiscordSubcommand; @@ -17,21 +16,26 @@ public class GlobalTagCommand extends Command { - public GlobalTagCommand() { + private final GlobalTagAPI api; + private final String version; + + public GlobalTagCommand(GlobalTagAddon addon) { super("globaltags", "globaltag", "gt"); + this.api = GlobalTagAddon.getAPI(); + this.version = addon.addonInfo().getVersion(); - withSubCommand(new ClearCacheCommand()); - withSubCommand(new LinkDiscordSubcommand()); - withSubCommand(new UnlinkDiscordSubcommand()); + withSubCommand(new ClearCacheCommand(api)); + withSubCommand(new LinkDiscordSubcommand(api)); + withSubCommand(new UnlinkDiscordSubcommand(api)); } @Override public boolean execute(String prefix, String[] arguments) { - ApiHandler.getVersion((version) -> { + api.getApiHandler().getVersion((version) -> { TextComponent clearComponent = TextComponent.builder() .append(GlobalTagAddon.prefix) .append(Component.text("Version: ", NamedTextColor.GREEN)) - .append(Component.text(ApiRequest.getVersion() + "\n", NamedTextColor.AQUA)) + .append(Component.text(this.version + "\n", NamedTextColor.AQUA)) .append(GlobalTagAddon.prefix) .append(Component.text("API Version: ", NamedTextColor.GREEN)) .append(version != null ? Component.text(version, NamedTextColor.AQUA) : Component.translatable("globaltags.messages.offline", NamedTextColor.RED)) diff --git a/core/src/main/java/com/rappytv/globaltags/command/subcommands/ClearCacheCommand.java b/core/src/main/java/com/rappytv/globaltags/command/subcommands/ClearCacheCommand.java index 0661598..9f738c5 100644 --- a/core/src/main/java/com/rappytv/globaltags/command/subcommands/ClearCacheCommand.java +++ b/core/src/main/java/com/rappytv/globaltags/command/subcommands/ClearCacheCommand.java @@ -1,21 +1,24 @@ package com.rappytv.globaltags.command.subcommands; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.util.TagCache; import net.labymod.api.client.chat.command.SubCommand; import net.labymod.api.client.component.Component; import net.labymod.api.client.component.format.NamedTextColor; public class ClearCacheCommand extends SubCommand { - public ClearCacheCommand() { + private final GlobalTagAPI api; + + public ClearCacheCommand(GlobalTagAPI api) { super("clearcache", "cc"); + this.api = api; } @Override public boolean execute(String prefix, String[] arguments) { - TagCache.clear(); - TagCache.resolveSelf(); + api.getCache().clear(); + api.getCache().resolveSelf(); displayMessage( Component.empty() .append(GlobalTagAddon.prefix) diff --git a/core/src/main/java/com/rappytv/globaltags/command/subcommands/LinkDiscordSubcommand.java b/core/src/main/java/com/rappytv/globaltags/command/subcommands/LinkDiscordSubcommand.java index 0c1ea9f..83bdbed 100644 --- a/core/src/main/java/com/rappytv/globaltags/command/subcommands/LinkDiscordSubcommand.java +++ b/core/src/main/java/com/rappytv/globaltags/command/subcommands/LinkDiscordSubcommand.java @@ -1,30 +1,35 @@ package com.rappytv.globaltags.command.subcommands; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.api.ApiHandler; import net.labymod.api.Laby; import net.labymod.api.client.chat.command.SubCommand; import net.labymod.api.client.component.Component; -import net.labymod.api.client.component.TextComponent; import net.labymod.api.client.component.format.NamedTextColor; public class LinkDiscordSubcommand extends SubCommand { - public LinkDiscordSubcommand() { + private final GlobalTagAPI api; + + public LinkDiscordSubcommand(GlobalTagAPI api) { super("link"); + this.api = api; } @Override public boolean execute(String s, String[] strings) { - ApiHandler.linkDiscord((info) -> { - if(info.isSuccessful()) { - String code = ((TextComponent) info.getMessage()).getText(); + api.getApiHandler().linkDiscord((info) -> { + if(info.successful()) { + String code = info.data(); Laby.references().chatExecutor().copyToClipboard(code); displayMessage(GlobalTagAddon.prefix.copy().append( Component.translatable("globaltags.messages.code", NamedTextColor.GREEN) )); } else displayMessage( - GlobalTagAddon.prefix.copy().append(info.getMessage()) + GlobalTagAddon.prefix.copy().append(Component.text( + info.data(), + NamedTextColor.RED + )) ); }); return true; diff --git a/core/src/main/java/com/rappytv/globaltags/command/subcommands/UnlinkDiscordSubcommand.java b/core/src/main/java/com/rappytv/globaltags/command/subcommands/UnlinkDiscordSubcommand.java index d0351c7..432ec1b 100644 --- a/core/src/main/java/com/rappytv/globaltags/command/subcommands/UnlinkDiscordSubcommand.java +++ b/core/src/main/java/com/rappytv/globaltags/command/subcommands/UnlinkDiscordSubcommand.java @@ -1,19 +1,25 @@ package com.rappytv.globaltags.command.subcommands; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.api.ApiHandler; +import com.rappytv.globaltags.api.Util; import net.labymod.api.client.chat.command.SubCommand; +import net.labymod.api.client.component.Component; +import net.labymod.api.client.component.format.NamedTextColor; public class UnlinkDiscordSubcommand extends SubCommand { - public UnlinkDiscordSubcommand() { + private final GlobalTagAPI api; + + public UnlinkDiscordSubcommand(GlobalTagAPI api) { super("unlink"); + this.api = api; } @Override public boolean execute(String s, String[] strings) { - ApiHandler.unlinkDiscord((response) -> displayMessage( - GlobalTagAddon.prefix.copy().append(response.getMessage())) + api.getApiHandler().unlinkDiscord((response) -> displayMessage( + GlobalTagAddon.prefix.copy().append(Util.getResponseComponent(response))) ); return true; } diff --git a/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java b/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java index 7de2bbb..0d30df5 100644 --- a/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java +++ b/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java @@ -1,9 +1,8 @@ package com.rappytv.globaltags.config; -import com.rappytv.globaltags.api.ApiRequest; +import com.rappytv.globaltags.GlobalTagAddon; +import com.rappytv.globaltags.api.Util; import com.rappytv.globaltags.config.subconfig.TagSubConfig; -import com.rappytv.globaltags.util.TagCache; -import com.rappytv.globaltags.util.Util; import net.labymod.api.Laby; import net.labymod.api.addon.AddonConfig; import net.labymod.api.client.gui.screen.widget.widgets.input.ButtonWidget.ButtonSetting; @@ -23,12 +22,6 @@ @SpriteTexture("settings") public class GlobalTagConfig extends AddonConfig { - public GlobalTagConfig() { - localizedResponses.addChangeListener((property, oldValue, newValue) -> - ApiRequest.useLocalizedResponses(newValue) - ); - } - @SwitchSetting @SpriteSlot(size = 32) private final ConfigProperty enabled = new ConfigProperty<>(true); @@ -58,14 +51,14 @@ public void joinDiscord(Setting setting) { @SettingSection("tags") @SpriteSlot(size = 32, y = 1) - private final TagSubConfig tags = new TagSubConfig(); + private final TagSubConfig tags = new TagSubConfig(GlobalTagAddon.getAPI()); @MethodOrder(after = "tags") @ButtonSetting @SpriteSlot(size = 32, y = 2) public void clearCache(Setting setting) { - TagCache.clear(); - TagCache.resolveSelf(); + GlobalTagAddon.getAPI().getCache().clear(); + GlobalTagAddon.getAPI().getCache().resolveSelf(); Util.notify( I18n.translate("globaltags.notifications.success"), I18n.translate("globaltags.notifications.cacheCleared") @@ -76,6 +69,9 @@ public void clearCache(Setting setting) { public ConfigProperty enabled() { return enabled; } + public ConfigProperty localizedResponses() { + return localizedResponses; + } public ConfigProperty showOwnTag() { return showOwnTag; } diff --git a/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java b/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java index b9c2ab7..6c53fcb 100644 --- a/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java +++ b/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java @@ -1,15 +1,14 @@ package com.rappytv.globaltags.config.subconfig; -import com.rappytv.globaltags.api.ApiHandler; +import com.rappytv.globaltags.api.GlobalTagAPI; +import com.rappytv.globaltags.api.Util; +import com.rappytv.globaltags.api.Util.ResultType; import com.rappytv.globaltags.config.widget.TagPreviewWidget; import com.rappytv.globaltags.config.widget.TagPreviewWidget.TagPreviewSetting; -import com.rappytv.globaltags.types.GlobalIcon; -import com.rappytv.globaltags.util.TagCache; -import com.rappytv.globaltags.util.Util; -import com.rappytv.globaltags.util.Util.ResultType; +import com.rappytv.globaltags.wrapper.enums.GlobalIcon; +import com.rappytv.globaltags.wrapper.enums.GlobalPosition; import net.labymod.api.client.component.Component; import net.labymod.api.client.component.format.NamedTextColor; -import net.labymod.api.client.entity.player.tag.PositionType; import net.labymod.api.client.gui.screen.widget.widgets.input.ButtonWidget.ButtonSetting; import net.labymod.api.client.gui.screen.widget.widgets.input.TextFieldWidget.TextFieldSetting; import net.labymod.api.client.gui.screen.widget.widgets.input.dropdown.DropdownWidget.DropdownSetting; @@ -23,7 +22,10 @@ public class TagSubConfig extends Config { - public TagSubConfig() { + private final GlobalTagAPI api; + + public TagSubConfig(GlobalTagAPI api) { + this.api = api; Runnable runnable = () -> Debounce.of( "globaltags-config-update", 1000, @@ -45,7 +47,7 @@ public TagSubConfig() { @DropdownSetting @SpriteSlot(size = 32, x = 3) - private final ConfigProperty position = new ConfigProperty<>(PositionType.ABOVE_NAME); + private final ConfigProperty position = new ConfigProperty<>(GlobalPosition.ABOVE); @DropdownSetting @SpriteSlot(size = 32, y = 1, x = 2) @@ -56,29 +58,29 @@ public TagSubConfig() { @SpriteSlot(size = 32, y = 1, x = 1) @SuppressWarnings("ConstantConditions") public void updateSettings(Setting setting) { - TagCache.resolveSelf((info) -> { - if(Util.getSessionToken() == null) { + api.getCache().resolveSelf((info) -> { + if(api.getAuthorization() == null) { Util.notify( Component.translatable("globaltags.notifications.error"), Component.translatable("globaltags.settings.tags.tagPreview.labyConnect") ); return; } - if(info == null || !info.getPlainTag().equals(tag.get())) ApiHandler.setTag(tag.get(), (response) -> { - if(response.isSuccessful()) Util.update(ResultType.TAG, Component.text("✔", NamedTextColor.GREEN)); - else Util.update(ResultType.TAG, response.getMessage()); + if(info == null || !info.getPlainTag().equals(tag.get())) api.getApiHandler().setTag(tag.get(), (response) -> { + if(response.successful()) Util.update(api, ResultType.TAG, Component.text("✔", NamedTextColor.GREEN)); + else Util.update(api, ResultType.TAG, Component.text(response.data(), NamedTextColor.RED)); }); - else Util.update(ResultType.TAG, Util.unchanged); - if(info != null && !info.getPosition().equals(position.get())) ApiHandler.setPosition(position.get(), (response) -> { - if(response.isSuccessful()) Util.update(ResultType.POSITION, Component.text("✔", NamedTextColor.GREEN)); - else Util.update(ResultType.POSITION, response.getMessage()); + else Util.update(api, ResultType.TAG, Util.unchanged); + if(info != null && !info.getPosition().equals(position.get())) api.getApiHandler().setPosition(position.get(), (response) -> { + if(response.successful()) Util.update(api, ResultType.POSITION, Component.text("✔", NamedTextColor.GREEN)); + else Util.update(api, ResultType.POSITION, Component.text(response.data(), NamedTextColor.RED)); }); - else Util.update(ResultType.POSITION, Util.unchanged); - if(info != null && !info.getGlobalIcon().equals(globalIcon.get())) ApiHandler.setIcon(globalIcon.get(), (response) -> { - if(response.isSuccessful()) Util.update(ResultType.ICON, Component.text("✔", NamedTextColor.GREEN)); - else Util.update(ResultType.ICON, response.getMessage()); + else Util.update(api, ResultType.POSITION, Util.unchanged); + if(info != null && !info.getGlobalIcon().equals(globalIcon.get())) api.getApiHandler().setIcon(globalIcon.get(), (response) -> { + if(response.successful()) Util.update(api, ResultType.ICON, Component.text("✔", NamedTextColor.GREEN)); + else Util.update(api, ResultType.ICON, Component.text(response.data(), NamedTextColor.RED)); }); - else Util.update(ResultType.ICON, Util.unchanged); + else Util.update(api, ResultType.ICON, Util.unchanged); }); } @@ -86,14 +88,14 @@ public void updateSettings(Setting setting) { @ButtonSetting @SpriteSlot(size = 32, y = 1, x = 3) public void resetTag(Setting setting) { - ApiHandler.resetTag((info) -> { - if(info.isSuccessful()) TagPreviewWidget.refetch(); + api.getApiHandler().resetTag((info) -> { + if(info.successful()) TagPreviewWidget.refetch(); Util.notify( - Component.translatable(info.isSuccessful() + Component.translatable(info.successful() ? "globaltags.notifications.success" : "globaltags.notifications.error" ), - info.getMessage().color(NamedTextColor.WHITE) + Component.text(info.data(), NamedTextColor.WHITE) ); }); } @@ -101,11 +103,13 @@ public void resetTag(Setting setting) { public ConfigProperty tag() { return tag; } - public ConfigProperty position() { + public ConfigProperty position() { return position; } - public ConfigProperty icon() { return globalIcon; } + public GlobalTagAPI getAPI() { + return api; + } } diff --git a/core/src/main/java/com/rappytv/globaltags/config/widget/AppealPopup.java b/core/src/main/java/com/rappytv/globaltags/config/widget/AppealPopup.java index db99e9c..e820a6b 100644 --- a/core/src/main/java/com/rappytv/globaltags/config/widget/AppealPopup.java +++ b/core/src/main/java/com/rappytv/globaltags/config/widget/AppealPopup.java @@ -1,7 +1,7 @@ package com.rappytv.globaltags.config.widget; -import com.rappytv.globaltags.api.ApiHandler; -import com.rappytv.globaltags.util.Util; +import com.rappytv.globaltags.api.GlobalTagAPI; +import com.rappytv.globaltags.api.Util; import net.labymod.api.client.component.Component; import net.labymod.api.client.component.format.NamedTextColor; import net.labymod.api.client.gui.screen.widget.Widget; @@ -14,6 +14,12 @@ public class AppealPopup extends AdvancedPopup { + private final GlobalTagAPI api; + + public AppealPopup(GlobalTagAPI api) { + this.api = api; + } + @Override public @Nullable Widget initialize() { VerticalListWidget content = new VerticalListWidget<>().addId("content"); @@ -34,13 +40,13 @@ public class AppealPopup extends AdvancedPopup { .addId("send-button", "popup-description"); sendButton.setEnabled(false); sendButton.setActionListener(() -> - ApiHandler.appealBan(inputWidget.getText(), (response) -> + api.getApiHandler().appealBan(inputWidget.getText(), (response) -> Util.notify( - Component.translatable(response.isSuccessful() + Component.translatable(response.successful() ? "globaltags.notifications.success" : "globaltags.notifications.error" ), - response.getMessage().color(NamedTextColor.WHITE) + Component.text(response.data(), NamedTextColor.WHITE) ) ) ); diff --git a/core/src/main/java/com/rappytv/globaltags/config/widget/TagPreviewWidget.java b/core/src/main/java/com/rappytv/globaltags/config/widget/TagPreviewWidget.java index 11e7864..71e5eda 100644 --- a/core/src/main/java/com/rappytv/globaltags/config/widget/TagPreviewWidget.java +++ b/core/src/main/java/com/rappytv/globaltags/config/widget/TagPreviewWidget.java @@ -1,14 +1,14 @@ package com.rappytv.globaltags.config.widget; +import com.rappytv.globaltags.api.GlobalTagAPI; +import com.rappytv.globaltags.api.Util; import com.rappytv.globaltags.config.subconfig.TagSubConfig; -import com.rappytv.globaltags.types.GlobalIcon; -import com.rappytv.globaltags.types.PlayerInfo; -import com.rappytv.globaltags.util.TagCache; -import com.rappytv.globaltags.util.Util; +import com.rappytv.globaltags.wrapper.model.PlayerInfo; import net.labymod.api.Laby; import net.labymod.api.Textures.SpriteCommon; import net.labymod.api.client.component.Component; import net.labymod.api.client.component.format.NamedTextColor; +import net.labymod.api.client.gui.icon.Icon; import net.labymod.api.client.gui.lss.property.annotation.AutoWidget; import net.labymod.api.client.gui.screen.Parent; import net.labymod.api.client.gui.screen.activity.Link; @@ -35,9 +35,11 @@ public class TagPreviewWidget extends HorizontalListWidget { private static boolean refetch = true; private static boolean changed = false; + private final GlobalTagAPI api; private final TagSubConfig config; private TagPreviewWidget(TagSubConfig config) { + this.api = config.getAPI(); this.config = config; } @@ -46,7 +48,7 @@ public void tick() { super.tick(); if(!refetch && !changed) return; if(refetch) - TagCache.remove(Laby.labyAPI().getUniqueId()); + api.getCache().remove(Laby.labyAPI().getUniqueId()); reInitialize(); refetch = false; changed = false; @@ -59,7 +61,7 @@ public void initialize(Parent parent) { } public void initialize(boolean refetched) { - TagCache.resolveSelf((info) -> + api.getCache().resolveSelf((info) -> Laby.labyAPI().minecraft().executeOnRenderThread(() -> { Component error = getError(info); if (error != null) { @@ -87,14 +89,20 @@ public void initialize(boolean refetched) { "globaltags.settings.tags.tagPreview.empty", NamedTextColor.RED ) - : Util.translateColorCodes(config.tag().get()) + : api.translateColorCodes(config.tag().get()) ).addId("text"); - if (config.icon().get() != GlobalIcon.NONE) - this.addEntryInitialized(new IconWidget(config.icon().get().getIcon()).addId("icon")); + String iconUrl = config.icon().get().getIconUrl(); + if (iconUrl != null) + this.addEntryInitialized( + new IconWidget(Icon.url(iconUrl)) + .addId("icon") + ); this.addEntryInitialized(tag); if (info.getHighestRole() != null) - this.addEntryInitialized(new IconWidget(info.getHighestRole().getIcon()) - .addId("staff-icon")); + this.addEntryInitialized( + new IconWidget(Icon.url(info.getHighestRole().getIconUrl())) + .addId("staff-icon") + ); } ButtonWidget refreshButton = ButtonWidget.icon(SpriteCommon.REFRESH, TagPreviewWidget::refetch) .addId("refresh-button"); @@ -102,7 +110,7 @@ public void initialize(boolean refetched) { if(info != null && info.isSuspended()) { ButtonWidget appealButton = ButtonWidget.i18n( "globaltags.settings.tags.tagPreview.appeal.name", - () -> new AppealPopup().displayInOverlay() + () -> new AppealPopup(api).displayInOverlay() ).addId("appeal-button"); appealButton.setHoverComponent(Component.translatable( "globaltags.settings.tags.tagPreview.appeal.description", @@ -122,8 +130,8 @@ public static void refetch() { refetch = true; } - private Component getError(PlayerInfo info) { - String session = Util.getSessionToken(); + private Component getError(PlayerInfo info) { + String session = api.getAuthorization(); if(session == null) return Component.translatable("globaltags.settings.tags.tagPreview.labyConnect"); else if(info == null) return Component.translatable("globaltags.settings.tags.tagPreview.noInfo"); else if(info.isSuspended()) return Component.translatable( diff --git a/core/src/main/java/com/rappytv/globaltags/interaction/ChangeTagBulletPoint.java b/core/src/main/java/com/rappytv/globaltags/interaction/ChangeTagBulletPoint.java index c1f138c..d046b85 100644 --- a/core/src/main/java/com/rappytv/globaltags/interaction/ChangeTagBulletPoint.java +++ b/core/src/main/java/com/rappytv/globaltags/interaction/ChangeTagBulletPoint.java @@ -1,8 +1,9 @@ package com.rappytv.globaltags.interaction; +import com.rappytv.globaltags.api.GlobalTagAPI; +import com.rappytv.globaltags.GlobalTagAddon; import com.rappytv.globaltags.activities.ChangeTagActivity; -import com.rappytv.globaltags.types.PlayerInfo; -import com.rappytv.globaltags.util.TagCache; +import com.rappytv.globaltags.wrapper.model.PlayerInfo; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; import net.labymod.api.client.entity.player.Player; @@ -11,6 +12,12 @@ public class ChangeTagBulletPoint implements BulletPoint { + private final GlobalTagAPI api; + + public ChangeTagBulletPoint() { + this.api = GlobalTagAddon.getAPI(); + } + @Override public Component getTitle() { return Component.translatable("globaltags.context.changeTag.name"); @@ -24,14 +31,18 @@ public Icon getIcon() { @Override public void execute(Player player) { Laby.labyAPI().minecraft().executeNextTick(() -> - Laby.labyAPI().minecraft().minecraftWindow().displayScreen(new ChangeTagActivity(player.getUniqueId(), player.getName())) + Laby.labyAPI().minecraft().minecraftWindow().displayScreen(new ChangeTagActivity( + api, + player.getUniqueId(), + player.getName() + )) ); } @Override public boolean isVisible(Player player) { - PlayerInfo executer = TagCache.get(Laby.labyAPI().getUniqueId()); - PlayerInfo target = TagCache.get(player.getUniqueId()); + PlayerInfo executer = api.getCache().get(Laby.labyAPI().getUniqueId()); + PlayerInfo target = api.getCache().get(player.getUniqueId()); return executer != null && executer.isAdmin() && target != null; } } diff --git a/core/src/main/java/com/rappytv/globaltags/interaction/ClearTagBulletPoint.java b/core/src/main/java/com/rappytv/globaltags/interaction/ClearTagBulletPoint.java index 859cc49..014f974 100644 --- a/core/src/main/java/com/rappytv/globaltags/interaction/ClearTagBulletPoint.java +++ b/core/src/main/java/com/rappytv/globaltags/interaction/ClearTagBulletPoint.java @@ -1,17 +1,24 @@ package com.rappytv.globaltags.interaction; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.api.ApiHandler; -import com.rappytv.globaltags.types.PlayerInfo; -import com.rappytv.globaltags.util.TagCache; +import com.rappytv.globaltags.api.Util; +import com.rappytv.globaltags.wrapper.model.PlayerInfo; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; +import net.labymod.api.client.component.format.NamedTextColor; 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 ClearTagBulletPoint implements BulletPoint { + private final GlobalTagAPI api; + + public ClearTagBulletPoint() { + this.api = GlobalTagAddon.getAPI(); + } + @Override public Component getTitle() { return Component.translatable("globaltags.context.clearTag.name"); @@ -24,17 +31,17 @@ public Icon getIcon() { @Override public void execute(Player player) { - ApiHandler.resetTag(player.getUniqueId(), (response) -> Laby.references().chatExecutor().displayClientMessage( + api.getApiHandler().resetTag(player.getUniqueId(), (response) -> Laby.references().chatExecutor().displayClientMessage( Component.empty() .append(GlobalTagAddon.prefix) - .append(response.getMessage()) + .append(Util.getResponseComponent(response)) )); } @Override public boolean isVisible(Player player) { - PlayerInfo executer = TagCache.get(Laby.labyAPI().getUniqueId()); - PlayerInfo target = TagCache.get(player.getUniqueId()); + PlayerInfo executer = api.getCache().get(Laby.labyAPI().getUniqueId()); + PlayerInfo target = api.getCache().get(player.getUniqueId()); return executer != null && executer.isAdmin() && target != null && target.getTag() != null; } } diff --git a/core/src/main/java/com/rappytv/globaltags/interaction/EditBanInfoBulletPoint.java b/core/src/main/java/com/rappytv/globaltags/interaction/EditBanInfoBulletPoint.java index 4071182..fdda472 100644 --- a/core/src/main/java/com/rappytv/globaltags/interaction/EditBanInfoBulletPoint.java +++ b/core/src/main/java/com/rappytv/globaltags/interaction/EditBanInfoBulletPoint.java @@ -1,11 +1,9 @@ package com.rappytv.globaltags.interaction; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.activities.BanActivity; import com.rappytv.globaltags.activities.EditBanActivity; -import com.rappytv.globaltags.api.ApiHandler; -import com.rappytv.globaltags.types.PlayerInfo; -import com.rappytv.globaltags.util.TagCache; +import com.rappytv.globaltags.wrapper.model.PlayerInfo; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; import net.labymod.api.client.entity.player.Player; @@ -14,7 +12,11 @@ public class EditBanInfoBulletPoint implements BulletPoint { - private PlayerInfo target; + private final GlobalTagAPI api; + + public EditBanInfoBulletPoint() { + this.api = GlobalTagAddon.getAPI(); + } @Override public Component getTitle() { @@ -30,6 +32,7 @@ public Icon getIcon() { public void execute(Player player) { Laby.labyAPI().minecraft().executeNextTick(() -> Laby.labyAPI().minecraft().minecraftWindow().displayScreen(new EditBanActivity( + api, player.getUniqueId(), player.getName() )) @@ -38,8 +41,8 @@ public void execute(Player player) { @Override public boolean isVisible(Player player) { - PlayerInfo executer = TagCache.get(Laby.labyAPI().getUniqueId()); - target = TagCache.get(player.getUniqueId()); + PlayerInfo executer = api.getCache().get(Laby.labyAPI().getUniqueId()); + PlayerInfo target = api.getCache().get(player.getUniqueId()); return executer != null && executer.isAdmin() && target != null && target.isSuspended(); } } diff --git a/core/src/main/java/com/rappytv/globaltags/interaction/ReferPlayerBulletPoint.java b/core/src/main/java/com/rappytv/globaltags/interaction/ReferPlayerBulletPoint.java index bf4e656..acd36b3 100644 --- a/core/src/main/java/com/rappytv/globaltags/interaction/ReferPlayerBulletPoint.java +++ b/core/src/main/java/com/rappytv/globaltags/interaction/ReferPlayerBulletPoint.java @@ -1,9 +1,9 @@ package com.rappytv.globaltags.interaction; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; -import com.rappytv.globaltags.api.ApiHandler; -import com.rappytv.globaltags.types.PlayerInfo; -import com.rappytv.globaltags.util.TagCache; +import com.rappytv.globaltags.api.Util; +import com.rappytv.globaltags.wrapper.model.PlayerInfo; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; import net.labymod.api.client.entity.player.Player; @@ -12,6 +12,12 @@ public class ReferPlayerBulletPoint implements BulletPoint { + private final GlobalTagAPI api; + + public ReferPlayerBulletPoint() { + this.api = GlobalTagAddon.getAPI(); + } + @Override public Component getTitle() { return Component.translatable("globaltags.context.referral.name"); @@ -24,16 +30,16 @@ public Icon getIcon() { @Override public void execute(Player player) { - ApiHandler.referPlayer(player.getUniqueId(), (response) -> Laby.references().chatExecutor().displayClientMessage( + api.getApiHandler().referPlayer(player.getUniqueId(), (response) -> Laby.references().chatExecutor().displayClientMessage( Component.empty() .append(GlobalTagAddon.prefix) - .append(response.getMessage()) + .append(Util.getResponseComponent(response)) )); } @Override public boolean isVisible(Player player) { - PlayerInfo executer = TagCache.get(Laby.labyAPI().getUniqueId()); + PlayerInfo executer = api.getCache().get(Laby.labyAPI().getUniqueId()); return executer != null && !executer.hasReferred(); } } diff --git a/core/src/main/java/com/rappytv/globaltags/interaction/ReportBulletPoint.java b/core/src/main/java/com/rappytv/globaltags/interaction/ReportBulletPoint.java index dabfb39..2ccfe66 100644 --- a/core/src/main/java/com/rappytv/globaltags/interaction/ReportBulletPoint.java +++ b/core/src/main/java/com/rappytv/globaltags/interaction/ReportBulletPoint.java @@ -1,8 +1,9 @@ package com.rappytv.globaltags.interaction; +import com.rappytv.globaltags.api.GlobalTagAPI; +import com.rappytv.globaltags.GlobalTagAddon; import com.rappytv.globaltags.activities.ReportUUIDActivity; -import com.rappytv.globaltags.types.PlayerInfo; -import com.rappytv.globaltags.util.TagCache; +import com.rappytv.globaltags.wrapper.model.PlayerInfo; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; import net.labymod.api.client.entity.player.Player; @@ -11,6 +12,12 @@ public class ReportBulletPoint implements BulletPoint { + private final GlobalTagAPI api; + + public ReportBulletPoint() { + this.api = GlobalTagAddon.getAPI(); + } + @Override public Component getTitle() { return Component.translatable("globaltags.context.report.name"); @@ -24,13 +31,17 @@ public Icon getIcon() { @Override public void execute(Player player) { Laby.labyAPI().minecraft().executeNextTick(() -> - Laby.labyAPI().minecraft().minecraftWindow().displayScreen(new ReportUUIDActivity(player.getUniqueId(), player.getName())) + Laby.labyAPI().minecraft().minecraftWindow().displayScreen(new ReportUUIDActivity( + api, + player.getUniqueId(), + player.getName() + )) ); } @Override public boolean isVisible(Player player) { - PlayerInfo playerInfo = TagCache.get(player.getUniqueId()); + PlayerInfo playerInfo = api.getCache().get(player.getUniqueId()); return playerInfo != null && playerInfo.getTag() != null; } } diff --git a/core/src/main/java/com/rappytv/globaltags/interaction/ToggleBanBulletPoint.java b/core/src/main/java/com/rappytv/globaltags/interaction/ToggleBanBulletPoint.java index 61e5ed4..05c57cb 100644 --- a/core/src/main/java/com/rappytv/globaltags/interaction/ToggleBanBulletPoint.java +++ b/core/src/main/java/com/rappytv/globaltags/interaction/ToggleBanBulletPoint.java @@ -1,10 +1,10 @@ package com.rappytv.globaltags.interaction; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; import com.rappytv.globaltags.activities.BanActivity; -import com.rappytv.globaltags.api.ApiHandler; -import com.rappytv.globaltags.types.PlayerInfo; -import com.rappytv.globaltags.util.TagCache; +import com.rappytv.globaltags.api.Util; +import com.rappytv.globaltags.wrapper.model.PlayerInfo; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; import net.labymod.api.client.entity.player.Player; @@ -13,7 +13,12 @@ public class ToggleBanBulletPoint implements BulletPoint { - private PlayerInfo target; + private final GlobalTagAPI api; + private PlayerInfo target; + + public ToggleBanBulletPoint() { + this.api = GlobalTagAddon.getAPI(); + } @Override public Component getTitle() { @@ -28,14 +33,15 @@ public Icon getIcon() { @Override public void execute(Player player) { if(target.isSuspended()) { - ApiHandler.unbanPlayer(target.getUUID(), (response) -> Laby.references().chatExecutor().displayClientMessage( + api.getApiHandler().unbanPlayer(target.getUUID(), (response) -> Laby.references().chatExecutor().displayClientMessage( Component.empty() .append(GlobalTagAddon.prefix) - .append(response.getMessage()) + .append(Util.getResponseComponent(response)) )); } else { Laby.labyAPI().minecraft().executeNextTick(() -> Laby.labyAPI().minecraft().minecraftWindow().displayScreen(new BanActivity( + api, player.getUniqueId(), player.getName() )) @@ -45,8 +51,8 @@ public void execute(Player player) { @Override public boolean isVisible(Player player) { - PlayerInfo executer = TagCache.get(Laby.labyAPI().getUniqueId()); - target = TagCache.get(player.getUniqueId()); + PlayerInfo executer = api.getCache().get(Laby.labyAPI().getUniqueId()); + target = api.getCache().get(player.getUniqueId()); return executer != null && executer.isAdmin() && target != null; } } diff --git a/core/src/main/java/com/rappytv/globaltags/listener/ServerNavigationListener.java b/core/src/main/java/com/rappytv/globaltags/listener/ServerNavigationListener.java index 927c1ab..be90fb7 100644 --- a/core/src/main/java/com/rappytv/globaltags/listener/ServerNavigationListener.java +++ b/core/src/main/java/com/rappytv/globaltags/listener/ServerNavigationListener.java @@ -1,14 +1,22 @@ package com.rappytv.globaltags.listener; -import com.rappytv.globaltags.util.TagCache; +import com.rappytv.globaltags.GlobalTagAddon; +import com.rappytv.globaltags.wrapper.model.PlayerInfo.Cache; +import net.labymod.api.client.component.Component; import net.labymod.api.event.Subscribe; import net.labymod.api.event.client.network.server.ServerDisconnectEvent; public class ServerNavigationListener { + private final Cache cache; + + public ServerNavigationListener() { + this.cache = GlobalTagAddon.getAPI().getCache(); + } + @Subscribe public void onLeave(ServerDisconnectEvent event) { - TagCache.clear(); - TagCache.resolveSelf(); + cache.clear(); + cache.resolveSelf(); } } diff --git a/core/src/main/java/com/rappytv/globaltags/nametag/CustomTag.java b/core/src/main/java/com/rappytv/globaltags/nametag/CustomTag.java index 98c89ea..a6a2c47 100644 --- a/core/src/main/java/com/rappytv/globaltags/nametag/CustomTag.java +++ b/core/src/main/java/com/rappytv/globaltags/nametag/CustomTag.java @@ -1,15 +1,18 @@ package com.rappytv.globaltags.nametag; +import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.GlobalTagAddon; import com.rappytv.globaltags.config.GlobalTagConfig; -import com.rappytv.globaltags.types.PlayerInfo; -import com.rappytv.globaltags.util.TagCache; +import com.rappytv.globaltags.wrapper.enums.GlobalPosition; +import com.rappytv.globaltags.wrapper.model.PlayerInfo; import net.labymod.api.Laby; +import net.labymod.api.client.component.Component; import net.labymod.api.client.entity.Entity; import net.labymod.api.client.entity.player.Player; import net.labymod.api.client.entity.player.tag.PositionType; import net.labymod.api.client.entity.player.tag.tags.NameTag; import net.labymod.api.client.entity.player.tag.tags.NameTagBackground; +import net.labymod.api.client.gui.icon.Icon; import net.labymod.api.client.render.font.RenderableComponent; import net.labymod.api.client.render.matrix.Stack; import org.jetbrains.annotations.Nullable; @@ -19,11 +22,13 @@ public class CustomTag extends NameTag { private final int black = new Color(0, 0, 0, 70).getRGB(); + private final GlobalTagAPI api; private final GlobalTagConfig config; private final PositionType position; - private PlayerInfo info; + private PlayerInfo info; public CustomTag(GlobalTagAddon addon, PositionType position) { + this.api = addon.getAPI(); this.config = addon.configuration(); this.position = position; } @@ -42,14 +47,14 @@ public float getScale() { return null; info = null; - if(TagCache.has(uuid)) - info = TagCache.get(uuid); + if(api.getCache().has(uuid)) + info = api.getCache().get(uuid); else { if(position == PositionType.ABOVE_NAME) - TagCache.resolve(uuid); + api.getCache().resolve(uuid); } if(info == null || info.getTag() == null) return null; - if(!position.equals(info.getPosition())) return null; + if(!getGlobalPosition(position).equals(info.getPosition())) return null; return RenderableComponent.of(info.getTag()); } @@ -62,8 +67,14 @@ public void render(Stack stack, Entity entity) { if(info == null) return; Laby.labyAPI().renderPipeline().renderSeeThrough(entity, () -> { - if(info.getIcon() != null) info.getIcon().render(stack, -11, 0, 9, 9); - if(info.getHighestRole() != null) info.getHighestRole().getIcon().render( + if(info.getIconUrl() != null) Icon.url(info.getIconUrl()).render( + stack, + -11, + 0, + 9, + 9 + ); + if(info.getHighestRole() != null) Icon.url(info.getHighestRole().getIconUrl()).render( stack, getWidth() + 0.9F, -1.2F, @@ -73,6 +84,14 @@ public void render(Stack stack, Entity entity) { }); } + private GlobalPosition getGlobalPosition(PositionType type) { + try { + return GlobalPosition.valueOf(type.name().split("_")[0]); + } catch (Exception e) { + return GlobalPosition.ABOVE; + } + } + @Override protected NameTagBackground getCustomBackground() { boolean enabled = config.showBackground().get(); From 5daf684ca19f3b7305c9a9b7c2c98ca81b00398a Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 00:14:05 +0200 Subject: [PATCH 05/20] Remove warnings --- .../globaltags/command/subcommands/UnlinkDiscordSubcommand.java | 2 -- .../com/rappytv/globaltags/interaction/ClearTagBulletPoint.java | 1 - .../src/main/java/com/rappytv/globaltags/nametag/CustomTag.java | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/core/src/main/java/com/rappytv/globaltags/command/subcommands/UnlinkDiscordSubcommand.java b/core/src/main/java/com/rappytv/globaltags/command/subcommands/UnlinkDiscordSubcommand.java index 432ec1b..2c087db 100644 --- a/core/src/main/java/com/rappytv/globaltags/command/subcommands/UnlinkDiscordSubcommand.java +++ b/core/src/main/java/com/rappytv/globaltags/command/subcommands/UnlinkDiscordSubcommand.java @@ -4,8 +4,6 @@ import com.rappytv.globaltags.GlobalTagAddon; import com.rappytv.globaltags.api.Util; import net.labymod.api.client.chat.command.SubCommand; -import net.labymod.api.client.component.Component; -import net.labymod.api.client.component.format.NamedTextColor; public class UnlinkDiscordSubcommand extends SubCommand { diff --git a/core/src/main/java/com/rappytv/globaltags/interaction/ClearTagBulletPoint.java b/core/src/main/java/com/rappytv/globaltags/interaction/ClearTagBulletPoint.java index 014f974..d7f26bf 100644 --- a/core/src/main/java/com/rappytv/globaltags/interaction/ClearTagBulletPoint.java +++ b/core/src/main/java/com/rappytv/globaltags/interaction/ClearTagBulletPoint.java @@ -6,7 +6,6 @@ import com.rappytv.globaltags.wrapper.model.PlayerInfo; import net.labymod.api.Laby; import net.labymod.api.client.component.Component; -import net.labymod.api.client.component.format.NamedTextColor; 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; diff --git a/core/src/main/java/com/rappytv/globaltags/nametag/CustomTag.java b/core/src/main/java/com/rappytv/globaltags/nametag/CustomTag.java index a6a2c47..dda43ae 100644 --- a/core/src/main/java/com/rappytv/globaltags/nametag/CustomTag.java +++ b/core/src/main/java/com/rappytv/globaltags/nametag/CustomTag.java @@ -28,7 +28,7 @@ public class CustomTag extends NameTag { private PlayerInfo info; public CustomTag(GlobalTagAddon addon, PositionType position) { - this.api = addon.getAPI(); + this.api = GlobalTagAddon.getAPI(); this.config = addon.configuration(); this.position = position; } From 603418b25de0b4c121582084d5a93c9eb834f1cf Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 00:37:17 +0200 Subject: [PATCH 06/20] Bump labygradle --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 1c5ea34..01845ed 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,7 +1,7 @@ rootProject.name = "GlobalTags" pluginManagement { - val labyGradlePluginVersion = "0.4.1" + val labyGradlePluginVersion = "0.4.5" plugins { id("net.labymod.gradle") version (labyGradlePluginVersion) } From 31e3af040097dafee152643c13379ab59a999491 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 00:37:45 +0200 Subject: [PATCH 07/20] Try to fix crash - I don't think it's my fault --- .../java/com/rappytv/globaltags/config/GlobalTagConfig.java | 2 +- .../rappytv/globaltags/config/subconfig/TagSubConfig.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java b/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java index 0d30df5..b9e2e2c 100644 --- a/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java +++ b/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java @@ -51,7 +51,7 @@ public void joinDiscord(Setting setting) { @SettingSection("tags") @SpriteSlot(size = 32, y = 1) - private final TagSubConfig tags = new TagSubConfig(GlobalTagAddon.getAPI()); + private final TagSubConfig tags = new TagSubConfig(); @MethodOrder(after = "tags") @ButtonSetting diff --git a/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java b/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java index 6c53fcb..e53ea65 100644 --- a/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java +++ b/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java @@ -1,5 +1,6 @@ package com.rappytv.globaltags.config.subconfig; +import com.rappytv.globaltags.GlobalTagAddon; import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.api.Util; import com.rappytv.globaltags.api.Util.ResultType; @@ -24,8 +25,8 @@ public class TagSubConfig extends Config { private final GlobalTagAPI api; - public TagSubConfig(GlobalTagAPI api) { - this.api = api; + public TagSubConfig() { + this.api = GlobalTagAddon.getAPI(); Runnable runnable = () -> Debounce.of( "globaltags-config-update", 1000, From 1180f87f4f8672848b480ea437d199b7b9e982ec Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 22:47:32 +0200 Subject: [PATCH 08/20] Make prefix final --- core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java b/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java index db158b6..6bfaa6f 100644 --- a/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java +++ b/core/src/main/java/com/rappytv/globaltags/GlobalTagAddon.java @@ -25,7 +25,7 @@ @AddonMain public class GlobalTagAddon extends LabyAddon { - public static Component prefix = Component.empty() + public static final Component prefix = Component.empty() .append(Component.text("GlobalTags").color(NamedTextColor.BLUE).decorate(TextDecoration.BOLD)) .append(Component.text(" » ", NamedTextColor.DARK_GRAY)); From fb7fac8c18f0d0f93f129e380cd163b975adea64 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 22:48:07 +0200 Subject: [PATCH 09/20] Fix ChangeTagActivity when player does not have a tag --- .../com/rappytv/globaltags/activities/ChangeTagActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/rappytv/globaltags/activities/ChangeTagActivity.java b/core/src/main/java/com/rappytv/globaltags/activities/ChangeTagActivity.java index 9812a9a..02b8b2e 100644 --- a/core/src/main/java/com/rappytv/globaltags/activities/ChangeTagActivity.java +++ b/core/src/main/java/com/rappytv/globaltags/activities/ChangeTagActivity.java @@ -49,7 +49,7 @@ public void initialize(Parent parent) { TextFieldWidget inputWidget = new TextFieldWidget() .placeholder(Component.translatable("globaltags.context.changeTag.placeholder", NamedTextColor.DARK_GRAY)) .addId("input"); - boolean hasTag = info.getPlainTag() != null; + boolean hasTag = !info.getPlainTag().isBlank(); inputWidget.setText(hasTag ? info.getPlainTag() : ""); ButtonWidget sendButton = new ButtonWidget() .updateComponent(Component.translatable("globaltags.context.changeTag.send", NamedTextColor.AQUA)) From fc919be9325a82eb2f839d4feb3d5b23b75b4a20 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 22:49:15 +0200 Subject: [PATCH 10/20] Fix missing comma --- core/src/main/resources/assets/globaltags/i18n/de_de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/assets/globaltags/i18n/de_de.json b/core/src/main/resources/assets/globaltags/i18n/de_de.json index 0dc225e..e11e9f9 100644 --- a/core/src/main/resources/assets/globaltags/i18n/de_de.json +++ b/core/src/main/resources/assets/globaltags/i18n/de_de.json @@ -124,7 +124,7 @@ "placeholder": "Bitte gib einen Grund an...", "referral": { "name": "Dieser Spieler hat mich zu GlobalTags eingeladen" - } + }, "report": { "name": "GlobalTag melden", "title": "%s melden", From f71b47151fcd59cc0b2c150b37b4854ecec2c747 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 26 Jul 2024 22:49:48 +0200 Subject: [PATCH 11/20] Remove redundant ConstantConditions suppressor --- .../com/rappytv/globaltags/config/subconfig/TagSubConfig.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java b/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java index e53ea65..3742277 100644 --- a/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java +++ b/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java @@ -57,7 +57,6 @@ public TagSubConfig() { @MethodOrder(after = "globalIcon") @ButtonSetting @SpriteSlot(size = 32, y = 1, x = 1) - @SuppressWarnings("ConstantConditions") public void updateSettings(Setting setting) { api.getCache().resolveSelf((info) -> { if(api.getAuthorization() == null) { From 18fd9a863055f9bd8192ab2d23bca85fd775098d Mon Sep 17 00:00:00 2001 From: RappyTV Date: Sat, 27 Jul 2024 00:27:50 +0200 Subject: [PATCH 12/20] Fix GlobalTagAPI#getClientUUID returning null --- api/src/main/java/com/rappytv/globaltags/api/GlobalTagAPI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/com/rappytv/globaltags/api/GlobalTagAPI.java b/api/src/main/java/com/rappytv/globaltags/api/GlobalTagAPI.java index bdc90f6..b180dc2 100644 --- a/api/src/main/java/com/rappytv/globaltags/api/GlobalTagAPI.java +++ b/api/src/main/java/com/rappytv/globaltags/api/GlobalTagAPI.java @@ -54,7 +54,7 @@ public GlobalTagAPI(Supplier addonVersion, Supplier language) { @Override public @Nullable UUID getClientUUID() { - return null; + return Laby.labyAPI().getUniqueId(); } @NotNull From 6e35ee39997bcce22afd6459e7072d680045aa0d Mon Sep 17 00:00:00 2001 From: RappyTV Date: Sat, 27 Jul 2024 00:29:40 +0200 Subject: [PATCH 13/20] Fix broken config resulting in addon not being loaded --- .../globaltags/config/subconfig/TagSubConfig.java | 8 ++------ .../globaltags/config/widget/TagPreviewWidget.java | 9 +++++---- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java b/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java index 3742277..29116e6 100644 --- a/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java +++ b/core/src/main/java/com/rappytv/globaltags/config/subconfig/TagSubConfig.java @@ -23,10 +23,7 @@ public class TagSubConfig extends Config { - private final GlobalTagAPI api; - public TagSubConfig() { - this.api = GlobalTagAddon.getAPI(); Runnable runnable = () -> Debounce.of( "globaltags-config-update", 1000, @@ -58,6 +55,7 @@ public TagSubConfig() { @ButtonSetting @SpriteSlot(size = 32, y = 1, x = 1) public void updateSettings(Setting setting) { + GlobalTagAPI api = GlobalTagAddon.getAPI(); api.getCache().resolveSelf((info) -> { if(api.getAuthorization() == null) { Util.notify( @@ -88,6 +86,7 @@ public void updateSettings(Setting setting) { @ButtonSetting @SpriteSlot(size = 32, y = 1, x = 3) public void resetTag(Setting setting) { + GlobalTagAPI api = GlobalTagAddon.getAPI(); api.getApiHandler().resetTag((info) -> { if(info.successful()) TagPreviewWidget.refetch(); Util.notify( @@ -109,7 +108,4 @@ public ConfigProperty position() { public ConfigProperty icon() { return globalIcon; } - public GlobalTagAPI getAPI() { - return api; - } } diff --git a/core/src/main/java/com/rappytv/globaltags/config/widget/TagPreviewWidget.java b/core/src/main/java/com/rappytv/globaltags/config/widget/TagPreviewWidget.java index 71e5eda..7a13777 100644 --- a/core/src/main/java/com/rappytv/globaltags/config/widget/TagPreviewWidget.java +++ b/core/src/main/java/com/rappytv/globaltags/config/widget/TagPreviewWidget.java @@ -1,5 +1,6 @@ package com.rappytv.globaltags.config.widget; +import com.rappytv.globaltags.GlobalTagAddon; import com.rappytv.globaltags.api.GlobalTagAPI; import com.rappytv.globaltags.api.Util; import com.rappytv.globaltags.config.subconfig.TagSubConfig; @@ -35,11 +36,9 @@ public class TagPreviewWidget extends HorizontalListWidget { private static boolean refetch = true; private static boolean changed = false; - private final GlobalTagAPI api; private final TagSubConfig config; private TagPreviewWidget(TagSubConfig config) { - this.api = config.getAPI(); this.config = config; } @@ -48,7 +47,7 @@ public void tick() { super.tick(); if(!refetch && !changed) return; if(refetch) - api.getCache().remove(Laby.labyAPI().getUniqueId()); + GlobalTagAddon.getAPI().getCache().remove(GlobalTagAddon.getAPI().getClientUUID()); reInitialize(); refetch = false; changed = false; @@ -60,7 +59,9 @@ public void initialize(Parent parent) { initialize(refetch); } + @SuppressWarnings("ConstantConditions") public void initialize(boolean refetched) { + GlobalTagAPI api = GlobalTagAddon.getAPI(); api.getCache().resolveSelf((info) -> Laby.labyAPI().minecraft().executeOnRenderThread(() -> { Component error = getError(info); @@ -131,7 +132,7 @@ public static void refetch() { } private Component getError(PlayerInfo info) { - String session = api.getAuthorization(); + String session = GlobalTagAddon.getAPI().getAuthorization(); if(session == null) return Component.translatable("globaltags.settings.tags.tagPreview.labyConnect"); else if(info == null) return Component.translatable("globaltags.settings.tags.tagPreview.noInfo"); else if(info.isSuspended()) return Component.translatable( From 7137b36fb495877804d9b4a80b8ff19c2cb06cab Mon Sep 17 00:00:00 2001 From: RappyTV Date: Sat, 27 Jul 2024 00:30:26 +0200 Subject: [PATCH 14/20] Bump globaltagsjava version --- api/build.gradle.kts | 2 +- core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/build.gradle.kts b/api/build.gradle.kts index 38cd155..e826736 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -6,7 +6,7 @@ plugins { dependencies { labyApi("api") - maven(mavenCentral(), "com.rappytv.globaltags:GlobalTagsJava:1.0.0") + maven(mavenCentral(), "com.rappytv.globaltags:GlobalTagsJava:1.0.2") // If you want to use external libraries, you can do that here. // The dependencies that are specified here are loaded into your project but will also diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 3ec3530..bff9667 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -6,7 +6,7 @@ plugins { dependencies { api(project(":api")) - maven(mavenCentral(), "com.rappytv.globaltags:GlobalTagsJava:1.0.0") + maven(mavenCentral(), "com.rappytv.globaltags:GlobalTagsJava:1.0.2") // If you want to use external libraries, you can do that here. // The dependencies that are specified here are loaded into your project but will also From 0aff01e1ae403a21a24592b21ecaf50983dcf51a Mon Sep 17 00:00:00 2001 From: RappyTV Date: Sat, 27 Jul 2024 00:30:49 +0200 Subject: [PATCH 15/20] Remove all icons as they're now loaded from an image server --- .../assets/globaltags/textures/icons/bereal.png | Bin 2805 -> 0 bytes .../globaltags/textures/icons/discord.png | Bin 2432 -> 0 bytes .../assets/globaltags/textures/icons/ebio.png | Bin 3497 -> 0 bytes .../globaltags/textures/icons/epicgames.png | Bin 2698 -> 0 bytes .../assets/globaltags/textures/icons/github.png | Bin 2441 -> 0 bytes .../assets/globaltags/textures/icons/gitlab.png | Bin 2467 -> 0 bytes .../globaltags/textures/icons/instagram.png | Bin 6767 -> 0 bytes .../assets/globaltags/textures/icons/kick.png | Bin 2279 -> 0 bytes .../globaltags/textures/icons/pinterest.png | Bin 2886 -> 0 bytes .../globaltags/textures/icons/playstation.png | Bin 3407 -> 0 bytes .../globaltags/textures/icons/roles/aqua.png | Bin 18290 -> 0 bytes .../globaltags/textures/icons/roles/green.png | Bin 19038 -> 0 bytes .../globaltags/textures/icons/roles/orange.png | Bin 18707 -> 0 bytes .../globaltags/textures/icons/roles/purple.png | Bin 18578 -> 0 bytes .../globaltags/textures/icons/snapchat.png | Bin 2478 -> 0 bytes .../assets/globaltags/textures/icons/steam.png | Bin 5472 -> 0 bytes .../globaltags/textures/icons/threads.png | Bin 1987 -> 0 bytes .../assets/globaltags/textures/icons/tiktok.png | Bin 2676 -> 0 bytes .../assets/globaltags/textures/icons/twitch.png | Bin 1859 -> 0 bytes .../assets/globaltags/textures/icons/x.png | Bin 2628 -> 0 bytes .../assets/globaltags/textures/icons/xbox.png | Bin 3253 -> 0 bytes .../globaltags/textures/icons/youtube.png | Bin 1975 -> 0 bytes 22 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/bereal.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/discord.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/ebio.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/epicgames.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/github.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/gitlab.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/instagram.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/kick.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/pinterest.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/playstation.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/roles/aqua.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/roles/green.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/roles/orange.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/roles/purple.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/snapchat.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/steam.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/threads.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/tiktok.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/twitch.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/x.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/xbox.png delete mode 100644 core/src/main/resources/assets/globaltags/textures/icons/youtube.png diff --git a/core/src/main/resources/assets/globaltags/textures/icons/bereal.png b/core/src/main/resources/assets/globaltags/textures/icons/bereal.png deleted file mode 100644 index a94bda69b63abaa7779a4dc63cd4a87cd71f791a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2805 zcmbVO3p`Z$9zTN(6(*8P(rHSm%*>fF%$SV4#$z=Id1O`dIGD`LnVlJ#QH%6aBwNt~ zp)HvxO0t_sSyH!$N>(ZKc9lHZD9?Mw>(k!5d;8oypU*kxfBygP@B4fIW_J5{x#>(d znGOJej)%L8FZzyG-C7#xlTTGTpf7E)d$1G$W*De$3~)5_9{});0pCAJ7Q|Xb=ORJ^ zn}={IJuQo5Xh8{?&;Yt=Rp2aZ8xkqn%pN+B4;@&TO@2@Kj0 zAUqd>$RO30K(e7wXf#WZ43QxsL?x0SJef>~Z0Ocj;KYSPwMlqkbYB$H0~aBa ziRnaQbaXT!+KPZk!igkXTU#PTCX&f`6oHp2L^8GVdf^( z%!Mj%#B^r~%$6Y%e*_UsCdy~hWROfIK%hk+U&KSArAxmMfL+)!n1MsHM!`d5JVf<} zAUegCPJ)(0Bsv6*Ls~NSU z7KP)$sW8%=5dk7W6{FUXzTEe4cJ`4VVSE94;3i=!KsUBf$Og#-@|dkG7TrT6m9a%! z*u#Z^LnA}r^Lg|z3Xew)qfznfFbW6HqfxBzY?x|=w}r_Rh)ZMJa$u`Tc^8BmrON-L zJn#RM_m=R{{$mUNHjk<+RfR)$=S$I)Dkl2I5B`2)CE$Z&wL)ieRXxDKaaGBOdANyf z{@;$kIBj$UjFSG3q8NuskuX^_TLL?VqtW_m(GgMOiK=cL_k;MKE{>gj(bxvZB8fc{8`}{ZLpRwY97H$fKtaVpQyGSdv;`ar^j2V~+zg zrk?fktc`)~=BBxthp6)$mm)#y&aTZ6*9K5=1HHv}0y_A0*2eab-c_sMwDU3X7ZPV0 zC`oxU>UEx}D_1Yp+p0XPJs-Qu+|Zm~vR#rRovMz|Yd>~mrSUpW9`>1fZhjPIkG_3Q&C|o`$Btv! zj?CtE43j<@zsIf}Q(V0Xt`A1EzKh824a}{gx9Q|P_ zYEkzpQPe}BT^J@~6lgP)4m|LYV{Ya@$Jl7&eyz3?g_nSwJIjBctwq(OVKM=Mnt+CB z(r6N^6>Aqi)7W6Jp<26Yan(+Pcvig55+DPZ>jl_gY`z4ZFvfRtGo2xfb*ivz1RYNubM{L#?PCJ6T?e~ z3b29)z0C{c_m5{ylk7dc;^g`P*r6qTnuyYn#1VFwc7K0sz%wB`XUNG(vG1d4s$V>9 z&V{uhltIn&A$OEd9?iy7`d<97v#%v>$;*Xl8HoqI>vYr-IoZ%o!fze*GIHyE;VS{(9#QpeoipJ}}$O z7h5sAvJHuTj$-zacHe5p)TgYe2vDQcZ~Nz`kXOAGdvjCH#6mx41$3|q&X@O8^c+q) zm)=+?#|E(yA|JNAN*ylAyZr7$S>RCT@yDJq4Z3F4CQbt>!0492 zNVTos?LXS^a{tBk2dKUwGnbUD&HT&S{(2J}gs$f~)O@GC>yc?b?cKV(+Ay?PfU21p z8ah_*(~gc{Y2Plsc6Bw_jxo3NQ;L0R4f{E8lwrH4vMHUttyOMg2j#eRlq7dT57H|vrfzUH()^mqX|>v}}X{KRCQB~)qiAaSXG|1TBW zJJJXly8D(yja-Y9lyuJzy*-efbExOR-GX`Bf=|&}y@z8+t!m^f*ChMPGlB57+=L#( zd;eNgyL#(y$L=z-^VZ)k@!e%_;$LIQ@MoYi(5P;-CAUrgMDLwNsz0V4OfQ$SP8$;b E4N*Q-y#N3J diff --git a/core/src/main/resources/assets/globaltags/textures/icons/discord.png b/core/src/main/resources/assets/globaltags/textures/icons/discord.png deleted file mode 100644 index 135b51f055347768a84ee78f1bc4d5f82e14c5b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2432 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 diff --git a/core/src/main/resources/assets/globaltags/textures/icons/epicgames.png b/core/src/main/resources/assets/globaltags/textures/icons/epicgames.png deleted file mode 100644 index f2ccc1154852da1a3eeacc57f0c6ab2753d26097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2698 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 Sz8=Wc0VlRf8X){ zzHcU96&vB|JjEFR0N1EUMLgTeY!BCweOHocH`!*qDKeP`02fc&!vRXRdjWvMWHKR% zNm9n3IA!2t8cI#@tp*c|27usDs|mwX2?kUXDWp*f{dn?A2qZO9C^1lpC{1!gM@D9v zi4QVk6Y$JbT%v(OL%?7w$`Tj|1_P}Iy^%((QfQbLW&5^i7y^eOOsW)`V-pA_DOI4H zG83SPkMM8=5rSd~Umywy2nu=+6e2ZG!I2AMrI|HaG+q%tB8weK zAsxe*P#CsYEPRVUpE9Sw0*OQdBSKgxUB7jF|1B5)aNKEk5fdYX*EEbDI8fc3SBsd%{D2Ch8Knmfu^CvXW$Ta!8J@A^= zq9a(+{}C6jVKk*>ESQ;?lfruIH{%Xwm4|H!``Qlp-%T7|dn36=;cUgQb;n8-I~Xf= zgpsXqX10{=U*^{X0OS0l6mt@++aE3XChoFq(yR2^lOCUBr9wp;xOpdK+{dLG)(OhQ z)D+wU&b$;Vdu8VtH|4LzXVxutf=j&Mn}L}{_JUd+s1SIq&(}?OSp5L28T|G_Oh@-o zhx0Ib=_s}G>CMs?`wq7puzQimX>dO3VwVO;#IBRxuF9~~u6B#4mQ1{+Ut9Xsu_9BC zQvKB1eUg5w`i3SWWwuvr&ew}d?5isuJ67sN`|EcAe;DubVfT{4tb-vh9Va!7FURXR z4xOP65NEnwx#*?iriKV$&aRb(@7{4P_x>4}5tlu0_bIRF*2X=bpH@}5v4eQY-eyj- zo26mjd$$j`U%%voEDv@7l3IRhs_27izTGk*l9mbgeR|*_x3jQE^W8b2f3IuJ7?CWki9{jUl+wT9ox6M4pGJ**R3d!71%T9kFD{P3M)9k z-~1LH4GHVK%JFyVsAx;1s}eNy4gA?7$DLD6?_RC1vy?S1-}xlyY|x7L*BplB@P?ia z51(MGS(e?Kc;!|1&6fJY-Qnp^$$vP5U+s!*27bd%2&TBEN$>(_F( zI2)gR*Jys}aUj171v+C3YIDHO^X)OmqdnXjy6aDL+-kQ&>oXtLxVJCQ@@sMG*<*R$ zDpV|m;%+%S%k@L%^(B@~j%xaGz-8v;JGn(K*ss0ptpCDT-(aa@qt$Wg)ST=OXQW-< zk#Ym~I^60Rch=r_df8hi20z~WL(M+7@xAGVz77X}D(M?o^>M6sX|MJ;hkU^KB7XvR z{Wk%bb#~{>8-(2xp=PV>NjCS7&9Z~yKP^4-P`+zz?LdiL)1LjUpY4?2oNz0o@T2%U zfm!OV)Z`_^-%;0+7pZrhKM{5}`t(KjSI^K!9)Ua;&SYZqeiC;-psH{kw5Ve=e@6jgc=Iw2$^Ha_Bu|T6%dL@6<Rf2~uC<+QF*SQb>cNXv(sxx` z&W$5)U7NgZsMvQXW6}4S=SYY1+uX5=i9789a1eA=Ht&9}Hcg|>KA+_W&@2A*!~l%RLy@o;T#~d5^o*EvX1m5qQ_Cl7bIUl$P|D~BBbxWwvWY>qS6(}mk(+#yH@j2#N%@9s%J0{~aA`+Fko z-B3879m>hYLm9Ny)&T;#I4Fb6Wc8qWp6V!P7p*{Vlu@9*v3;PMy`lr?`ZeHHe>g#a zI|_#c`n#h&uyB86(4TVQgz>LwNf7W)2+mCzr20!C&|J>|sE+YQ0p%c2341713Mj7# zfyv3pC@6>nrJzz!NvOOe3@RZd1&7MPWu<|CA0UD@ZwE)Xp~j8BbrIf_LC!dwCtOm} z&(9CyCk?@PJ4wP66%{3+Qj$_q5(I<JSyp1s!^gn?z_{U_RloSLC6gG45aKQLsMgC<2N&|^Q zDT4@6laYW*NkHX|p-{MtA{+)4gTmlY=wDDhjDw3~z<+|mq~U*_{|-t>83!Z|`M-i4 z?BR|WZ+9fYVHbC#6H3z4!wCfZO(R?#gT{Ch6cenI{?~bgy1Ick#?b{$SilgmA|9#|aG!ybjuPzDjmfw;Ihz#XA>Fnc5vDWNEXQjn0BlYvPn z$jd+_q@l773!wy&=>NBzUxoQAci>tsSVB|- z{w^IOl-J)QvJ-{!DEceKTtR2WjoQtp%0N5~kcgwqF06tW)z zTyMM7sS11ugE5foL|z$TBH@x6UpV$2C(n+e&=AYZT)DR#4P9QTZOW;zW!cG=tqUXbER$}cMy^pR5 zY6x3K%$Y2i|AN;W`kjNGP;#dTt!Q6b&UeB;c{#kS$>#j;hH^E}$H|s8sXpV}5p20% z%8;A04b(Q{dLy+F>TH=sBQ)hGi|5b?*jx0F@BzOq>ywts{b zh6iH#tUKa|66XR|QGz~ROWhIv<7SyY+<5K%g^bs%X`&$<@eL{UoSd$(u1WUsry8QS zqqV?5Qdujydw?i_At}wnL>tSS^UOB5k#KYFk>Yognsw~eN>B6Oy`!caa zerH22kjx2WG*=A{PktqsvTudSBj!DY1bT8UL3qzn%k^88Wop`L!^rJ83k35I=4!Yq z_a(-=pU_LN#xfD(bOj<|Dwr;fGrY!?aE?8qr0mT!2usMSC^FQ%+b>9Z`VsXqJ6l3L zy@-=I@S@b{2hSV%uBFF2^-I5gUKMgSm2) zN4HUMlox**ib0H&1jihwVx@P4C%`0B&NrTincCu*9hfuj18c5Tqm_0NE5f@+@`tS? z&@Nw27RYDm=+>D|1Z9qfNt$=l)AuTZh>gPUrzLVY7$*|>Uf25Q<=<4x>i8-7!TQ%O z#*8bi(uRGQ+Mcbat4;2zukSNok0>OaJ`tS+TQm6h3HyYnsI&rFZ}{7HF>lwaix+Rz z?04vpHV|Pt_Ac91?#ZT4#C>-YoYXB~>@T{T zYW_#a8{MOxuv*|2l$UE&N6tUYC?L@ROv%1JC^R0MJut1j_* z9*`jiej^Rhv2Bg@bt4JcOjE+!)oCT`3PtNn-Ih+(?O7sDodIXc`l|KZ9Dk2wuC%%0 zs1{9ewtvF0pZ`iq@@&e=DW#WKjZ6d>UCK|EOXbkTAgW~Si@KJi^@SoM7yiOX>hU#K zs{{SHtpT)8v;@bhT5(NgwL@Bx00*8O!KcnW3XMnt^7kyImyH)qC9}SUkYrN%IGldl zD!jU`M$s!C@@`LQ%Q8Fv+A90RsFlNwuDFR&Z&DFbDHEyPI`R!ny>kPLeCgHQj${?< z$#kWp{MrZ&9=v9JLJ^!E3yvYsvSr9p#+v`kCkb!xM-Sv_M_7Axxk|t)iAcvzZNO!# zg01sMtl#KPhNGTCgq|jcI@9!`0hSDP&LatSU~be3MJCVnjX(!8sadHPy|vm`w=*7K zgeFt<$r{!8yj1$a5wB;3q||s4h!z2fBvB0P8*wuN?^LLbcAyPM&H`L^r{;XTwv`Xv zBsJ^qot(Q@48J^n!fz?f`~$Zqd`AJ+66J2H6HB0|&M@Xi3A)ZTrAR=eY; zuV3aSnb57mw{hx`6JnBeu65imBzdo>@Ll?pJ)l!aHe)=B-oZ8l3kK--_5d$#vPp## zxp)*iYB{3CF*ON(?G$f)xV&qQMsCLJrtd8#=gQ^A=TTi@aX&wwxYjD&C)WC@ZAkKN znVg`oXlA_$x$%T_X+#vUNtu-m4Z6%foQYl^doOp0n@jk9h5dX1%T%7$0EJJW47`Mm7gc@jW=tXwaPS6=-wl1=phC{WL;F+pj@6hW@P`(?Z~p6DZ}!?hv2%-B>b zYgqN2b8Q++sp@q{ZJz1pey+(Qxw2Qp)&LmlM!ddUOV$j25MhwH2|iBuFs~ecqzKMxQ2t|78J{~|wGVj!yUg)= zJNhCV>fgzznufSeu5QGFKb?Eu;VK4OY`l1WZEfii`Tc;bF_1~@J^szlwS$J!N4}xf z{LVKSl^eE8zP3?Hgv`+kK2TGTr-d4|>RNw&ly@xpVFu>50P5l#tYx_se+SMz2RZaM z4m{=J&~LYE=+5F3U74v>)oGLq$OXUo(cq8I!Eeeb3*I@kt`HKPbX|$PBRrx+VtFcI z$23i=Irfa0hCc0i7iS`oY!+WnJj8?gBglaW@s2jv1PhVjS?hQWY-~ zDS952elB15*w7|Kl3|$hal{=QHxbgsTDt&Uh;f%Uym{LRO$ z-Pf9F<9cz|6*#ka;#It5|i?gAbEF$tZ`dP(Sp-rGu6 z=^lnvM!mEAhGo<1VJL$xv7*mL{ot$WPN zZr1htA)&oL27iJN%tyuk=ytT>+?ZR5ILV-^Ib0m`!RynS!50rp-b^vfrls{3bj;OEKbjJ-ByD*Eh`DnegGG#1 z+IUc(F=T{|q~kA-6cg(!^gn*Y^e%RRREI2qTQQ$b zq)xvE4ciE9FrN7g$0+G{MN_`FO=s0jQ-_Ao0hZKdSw?>9?n!LHR-NdABUD&4A}c&J z){+-)-ocBFsxO(-QjSva&evLUtYJR-kT#PRab%dL;2vu^1y*eCyM}Fy34eEvPYLsd zE**vGppAzo_+RI_9F$C4v&@%;1_w9b=52Pl@qTFPoexhHRcF++>Ci;80ue2YJJN-R zNvP%deX@nD8$l3c61Pz3`j%MUI{5(SoyN!a8LT4nD;Vy5&K8Pb;=QVt;7Xb_nOJc6 zWGHTG$X#U;=2S|o{BETzt*l&-F}G^_$@+L>tWTXX>1>nfR}K5apSl-WE9bI`gBis( zFYjbfR-b`RezXCz;$F6yhQ@j;$(KHzlh@G8xx36ba7S&}R z_l6>63cVv35fwe_y6Wn7DXaE`i;mJEnDrk*Q_3UH=REjRzHX zDXWKhZ5(oyr|>}^B5Jsj^mgORUc3_E#pj(=eC5d!=LDtm3z3Z^IY4^(7Njwh*^RLx z-qW$uBeJJsDxuhKs}*#-+?&j1v1_eYB+g8{x@OyB03Ezmh5cv2tke&)dOj`ipC_8D z$OV6nbo-HhE10TKGNX*Tg3aFg%2NSjP(RMf?4Vm#_Q@vY;)+ulo3cX&r6lj_!d#0) zr&|;`FjvP)C6L-w@Q_U`p@3|Qo`-0Z-aw4z@)2vJoI2;L!U^B3Qs~?+om)?=T}nViJjlXlXDf)3P5(zG`1Np?RmAz%#-7*8SZb1K+0} z-L=#K{mEMNEa+_YRhVgIh7s`_= zEVY4^>UX=X25z#!`G5>B<$t=Lcl0o-w~$q~wWllx&z)B1Vh|2<($W z4C}rxNVRpa+!~osEvale8Bv!gR`8`=W}06guw3Y5<^SZC9~-=8`jW*e_6rD*2h|G8(V@KKl6HOT`^mJZIR&*rr8CB$B5LSyh229e3+@1MFsychGkscJs>!;t#8?5FO8&X~Jwhba`{*^4R6 z*#bgMFH&&!U7!dnzS1)h=o+Cr?OgqCVIOSv-I?Wc@$BHB9*Z3c<>h4Ym5#%%WhRlL zq7O+bKD*$hJiHP}nk&eyKj@l`O{F5M-O{lwMK>Cz5XJ^C@!Chw^%=-ANeRj{LBeF2odM&c(`W>wycRwrAKWp zrzqtfJI9;1UGYICd&Wx^<*=4IXKWY%9iJK@+q~zOc^PUQA|!&cD{TyzRQnLSi3LI9 zf-%i)u6Zi9$H`df^ZxvbwpMc|vK!ItIiH~3I7lHKfXNZ`By zk>RQxQKa>3kvma)T8c(G3cV^VHuxGjuU5U{DdMZG53F!pwO)HSx8aeokGsxwXTSYk zzwh^deEzREt;9 zs|aG5Qkti^Qu@D82e-c^KyaKWawVh~Ro7xc%}$QToH%JV z=s>|a5JeHFQftF9)GDo9tJ0G4bTVBb*C+_39484n*7)RT955|&Top_F;2b`T;_sK;zrRN&qDpsAg`kR4a|L4RZO_Byb!<)-^iB-~v#6p|Sdt&{kN z!1T`1ue6#wGZf%V=rT^O9oCY z??@bZb4A*^rY@C~?S5-kk;~Wo_%}#`zw>f?=NU1V@xIk>OS}*L@x$`4-hbU)b^6>a z>6YQ?A)m{b1o4&!!or>{)$`vRnPL?0iA+kp;_p|7`G?=JFwWSprfu=atG}qf)rN!= z6Z6H)O3lobYZco(9ZAVa-xT$nwZ?5&lei{t_SDnMPG5>o=yt`=h|hwm1`|gr-6zna zC!Vj!R}al@$et4_cIlBJ6EGzE`tqf)+)dTJz~pxgJ)x!^9T2lz;tJn*UF`DL?_f5? zOV&sdlKX1*hs20ecb@@T!FlH|+)g!zvf+qCEIGEWt4Z=@$1UXWotrg<-92#;aP;)w zzC3UwoN5-+TW?o0$9}amDPPMz?$~Q9{c^40#dkYi-zzJo&P80m^v~7W99bzFC4Kbh zZsXp_A?fTm_vX9reYNM}D@kTH`>z+KAtA@{g;Iw(7TmGv5aOS5qAk_@Y+PG&%nl7a za&~ivwLPtVc#Z|X@2i4dIk8Ox#a!j3 zbYA>mXv8($le%9IlE?PS;!a)itu?XTlEK`jkb9xa#H*8~Vq@VhT}p9d!tsZ6t&gs9 zsGjS3L6OoBHMl44=z-5K-g2jGjT+pyKcd|CB+;55-Y_?FWV6*YFm3wT`ZYcuGqXD? zY**Ze#@?@(;jYex3)@uG$9&huve$tQv*Th;r{!4MzVn{StT9fkX$y_KQa{Dlv z74h%gw|5i`W$~ZXo`Gx2eXoyPY5jvy{Be4c<)key*7VDW-fnSduDCyb{!G2GOaj#u zZCB6A={q_^D#wa(^ywS0N^GR?zjx`#7<{xx*+vvtM0Z}|VT;Kn-J{&P?I zuC9;aT!#A_8r?bllgvv??(cjfxpF~fe@{X4`M>?XO3Y=!M>{@(1HU3>V~*kA;^LbB E00Brwu>b%7 diff --git a/core/src/main/resources/assets/globaltags/textures/icons/pinterest.png b/core/src/main/resources/assets/globaltags/textures/icons/pinterest.png deleted file mode 100644 index 4fa1815e1f5ae5a394f8faa3b46aec9cb35f4377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2886 zcmbVO3piBU9^XYJsu>X?*=>qqX7&t&*$nciQA84z9>&ZbGntt^_6&o%p_J3n3f8W|`?X`aE|NFncy*Y5f-0`}m zx&Q!-_vLs85wnM8=!_=b$3)RjiD|5ivs4ZMdIp*?0?5oV0f13tQScJQ5`RC0he@bh zJ{Eye<0LWy4FIn0aWXD13RQp+XrxHWhTfk44FW}cHWbSAhy7(;>TSgce&rh6iJq_NjYMfOX(R*= zI}q{0#28Lc5_;MHxbN%b6^LU3k(fA;2hH^aeSN$f=`2S_3WG`?RMg)e@s-LITqzIr z^=3naTc{!tA8}$b=>kW(1BJ;FFepx_1A`I~!Q)Y!c|1p^fXB3F(Fvl#SRvjRFGdsm z@Avut=luX&L=+!a{FmiuN>Yg#ap_Nz!4kil1OQNBPju zw&*W=;G0;b5G92ENk)8w$uWUK$;Hvxk%YJYXU5S8#4K}=w`1`W})rfRshfOwgZ?6dE!sM>f@%fV|Gdy2} z%|3t6GdZM}UVNbGtlK4O(*c(UF80cKA~pL?)|$Jlp06*f&nmkP%x{@EcDm8%@Uq(d z;H_x(?&v&^INKTNCNa&~=TpnFTYr``&g)s$a@}ORPDK%T@S0nB-G(tz_NA1Geb5r>7ORBHseU1TrHZJOY-3FH$Kc^MUSFxURPMVJ@ z(9?m{+3O}mvwf}@bf#y{uo;(LYv=8wo|VpCvZW@<36_;`?kdi?REiG7Dq8ooPq!c+$+SOOF`0hp`N{{} zD?PS>?>_4`oW5F8={lMO7*^aj6&iP}vW;8_jFm$kJ^XZ zpRmj>9|u+DX4vh#J(9fi<@-rRc5`{{hQ);?xPFyBrdON2CP{QMG>5cY}T3h zMwOpOQ=3cKn;Wkex9O%}HhnRjbEG*J$jB+T4^Lw^J#2Pn8!g>>=8VeAW<-;Vd&#Y; zU){=~7nN62oUQy8m|Z8&^LTVYw1chccY#*uqy~=EG2G&pv8waPgXa2bNls8|j9Im7 z(71!z!IHJr(3_^4*)w0>o1B>3;5KPr0Iu>&iq30>!n)O=Mo+eOJI-}ExD%J=EH=w& zE2`AHt34(DR==gtjz4{MSiveq54~71Fg5g3d`kv!>{R6X^!Ecf_d?EJ+Z}K;KV_!- zIjHOQf@J@@nLuxOUj?+~4ZE=ye=S}Y`Lo*dcHrKgNzf|otj8ZmFDmcdtMw%+Gxk;^ z^@g-$;2)C7W8<5js@S^A>o3+pE}tHiel1!4x^-p)c)TH?AoI}Ka&g~`ma0c2cx|sZ zS)6;(K5<3jJEz16HrGejM~2z?6v|0XWCqFkoa=(g=q zEP#~G@ugLT8xNAea~-EH*d5>Q+K#v1n^>vSF?i{uLv8maH684I;yh&F& zOKq6B>jl>@OST(Ki4=n^Tk}XA8Eb(tu$li+k{UN z;0z}%9e(u51;eISz8!P=vij1*B@>p^4Om-UN0jcIS^6QmsdHAFq}_(n+Nyj6M=UbR z_ovN+lC1haoH0rM1caynyUSW-B?004OghivVRZwl8(YG0fV-brgpedktz>ezu)|~5 z2cuEXs*OiZOG>(!V7qtD23eb4GC8okY}<;K=+_8`13Z3mdyJ?4@rpgKp1d+2qAvdX6Du=apF*32@rdQzi>RSnpvldP?>fLli%O3S|z?OIr6C|GH@ zzAr3`oMKt?RU+S~Hm=~$&IW2O0)TXCpZU%y`hpO{8#k6UYQ=8G@z{n~h2u}nca4+Q zn;cdjJSs{QZ_CieLJhkSzmXlME2AIuzv>uBJ=|oPz4~U`fYxZsN~=E3`-z%AU0;DBn(2!FA diff --git a/core/src/main/resources/assets/globaltags/textures/icons/playstation.png b/core/src/main/resources/assets/globaltags/textures/icons/playstation.png deleted file mode 100644 index 8e3dc93a466ae1dc9e2878c42d7736c51ea3e5c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3407 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 diff --git a/core/src/main/resources/assets/globaltags/textures/icons/roles/green.png b/core/src/main/resources/assets/globaltags/textures/icons/roles/green.png deleted file mode 100644 index aa7bac0839328e43b4d81fb04b01febafb639146..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19038 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 diff --git a/core/src/main/resources/assets/globaltags/textures/icons/roles/orange.png b/core/src/main/resources/assets/globaltags/textures/icons/roles/orange.png deleted file mode 100644 index 9d1d1724aaef509d76372d0ffdff474811bc8190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18707 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 Y9V<6$_|+8ruSI~4hM{`3nr+no1t@|9=>Px# diff --git a/core/src/main/resources/assets/globaltags/textures/icons/roles/purple.png b/core/src/main/resources/assets/globaltags/textures/icons/roles/purple.png deleted file mode 100644 index 5afcbdab3af5b65f45dc6de898d493889ae67653..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18578 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 VR&72yxeb6HEp>gh3KhGE{|CB1fB*mh diff --git a/core/src/main/resources/assets/globaltags/textures/icons/snapchat.png b/core/src/main/resources/assets/globaltags/textures/icons/snapchat.png deleted file mode 100644 index 3656b1d398cb448f8cd56bd22108688285bf3f8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2478 zcmbVO3se(V8lFJF0!8SShlqB=*cDKdnIt5TDF`G)2uqMhR9L|^WCk)qG9fdVkhMH) z>CqOo6r~mgQHzhV7OS8|5s_AE-69BQ1r-#;71kGU1O+_6P7pYDx4S*tIp@y3bMJS* z|NWoY9u*mCZ@bVI004VgSV#;#2bsqk*7W-;JpB$m+33RJNdT~W+dLRR@%{w>VC8}< z;;1-z1fn7|93@I5VH~4IN23A2KhUUCs!}nEm4v0>+5m9i{6&z3qXFPLfgG0WB$yfx zGwHEdQ=~#=N>zzaFmNTy--yrz8jMo1jG8npi5LUGXP)$)f1cD3(1INJU5c(8|D-wwymYr4Hh9V6#cnKvXq{(`D$>riG&_2us5>n3f`G zEO!p8Qxg+*$QNloazjgr&QBqg{NJq_w4fEKr zuL6b<9}&WZm&05HhF?MD1d1nT{s)xHN4Pvh@N+1gGN_VL{wf$%A<2YZqofVSHOdqW z(rHsb)|?v=36VzVX~DF1{MYwo5=oSvNXFCX12QI5%#ukZLasLIObAIUF2E5x&ruj|qfHY=MgJ$M%DLPkgj2)I5f6_&&kie~SJ5ULDw z3e4U||IhoY^*CLE%Cz6iV=hc{?jT_}Nk=tvrgUPl^qEx}&YDgaM5!{DK>(;S#~(w% znQi0MU(Gv+Rvt1J>?=EZXZ?6u;ah0`6w zyqs%Q^v7JY!?bjV)6=c2GsQg&0GKOfA;Ajc{wM3@sc#1_$XdEDEYdkGNK@@JbfiH1 zsd&?x$I@LF_9P6KT@+tF5HepHhzzP$Q@gtT%bZ9P}D3n9N1nhECo@4Sd;y z-mWg6q1?Qtde+?bc7j`5P)9|Sw!kw)39bnO-v9mYIO%&uIk z$wmFw4L#LcA2gkOW1wM;m{)X%-TlaQBiS}43UuhaVsR|A+1B!q+r&$UoRY+vGkkvi z(GuMlW6|>dxOq`MDz}ZY%pOKrr?F4M3=h+}AJ=)kC+@t^mt9*|H~(7A;H{31!RnHI zq`KZVPoi`8b}1S=9Yh^pTM<@%pGvH3FNheo(Up7e^cSZyDhG?OT$01ya@4TZw%nq| zqBj3X8{TndvSm%hnlIaM56!ZcbAaXEAO0*l>d_Qev7t93rxlm6yRU{kDh(fHo%mZX ziZUG6=d_1-I|IzW=D@7h_?#bxKe-IL#k;1arZ&_?1Sc~tW}W@1&@`O*?b^X-3l_K^ zJ}66OTy9tFHmPcQ$9E!EoCcpSb}qluVOkyfNdzN%Dk}Qnj)73B>Zfo!JL9n9F$J)^ zVS5J1=q$D7xs_E}9mcCRJ3d~!CvPz`@BK|jR6V9AI2Kh_)Kfr}Q}>>I+>c_8 zqu+lxKfL_2?5wi)T#&5qG=uA)iEjXp@j5RTW2I~J2->ofA&(1!`FT%VE-9{v@*e`H z!%seCmNtkVMGN-{z?=55v9V1r8^lZc-Ln2z_JzG^g~u{GcyXrdyJRlM>QCyjhi!3; zKB(&Hv$0z5n$o=`CC<-J*mw2+s2ME3JbJpm_0Y+n8Z~`-K70eysO33n3MFOYL=KR^S z?bVfW;mZ1{;Hru}c%zNmi}Ca~^WC?235xAEoa^6xps=v(Hn(wiQeMQ%?G=%Cmo`{N zx`Z)~6&Jh}1g8Kw*RMw_mO1w<|02TL)6-MaeB33F>F4@mWOP@PJp6isWx-=7t3|=}`NHJ&k%yZKe8mU7HN_KM}syp<`$)`;sB_ZtG~lDf1tdOd1*TwRq#!e*t-p BxV!)W diff --git a/core/src/main/resources/assets/globaltags/textures/icons/steam.png b/core/src/main/resources/assets/globaltags/textures/icons/steam.png deleted file mode 100644 index 01033705f674a487d0b94ae4869c59dd323f612f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5472 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 PAE@aGOH`?$d+dJ!Gc9q3 diff --git a/core/src/main/resources/assets/globaltags/textures/icons/threads.png b/core/src/main/resources/assets/globaltags/textures/icons/threads.png deleted file mode 100644 index 0966f76b7dfe20e196daf2c6a38d384e0aac6a9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1987 zcmbVN3ry5z94{{!7?h|}cD_n+ieq=}^>|(J6zn0O91uALrb9~ayQ917wYG%=Stbqz zbcCrf_yQFIbD0ansPlmjWV)!E29;>y)G?eBbxfzIi%z$e$3-`{Wj1O1_4|JR-~avZ z%CwY(0DqM~1VI5wiN?9|J65@0^Om1b&i;Aw(~nQg5+P{lNagl`Hq`_{kk3fQoGE3R zk_nn)HI#+R1)4&ZSA?KxGYWZ%wgU;y1vbWMK<>00L14yWKr$jsn29Gr9+S940O?Co z%=8jFt+yaEro+<;37LQe5(O8s4yQ;I8jwC-LS8G|C<6CEB)b8LQxw9PrZkx31OP{B zFg1-~I2@(dXd}bJqod!3aSX>$EDF_PY8)r9NFqW94_t_>O|V#rxyD%oy5uhdk|#+# zfub&#OXJdMIKhT$^?E&u;V6!)WrSKRa!OR8+9`$%G8lnK3k)wYoD)_Usa!5!G9a?0 z{VuS)o7O1~gh>t;Qg($@r$ZiY-Ge}igugcc`sx)-2w$yg|f`cJThCaj#mQnJGgOW6R*J8cN;4kJNw4o;92%hqY1 z-%ldRG=Z}+4*4KKpo-uGie)Jn*Wi7&noLBJQ6||B9Rg0 zlok#2O*&XSuyQbPU#$=nt@MBap_SwV3o@|HymAEkXjye2$#o&vUJZW`NKWwfKwiCf;`72bcX!`L7wxIjB)0? zWj$FjDPG#Z@gd$7W#gb=WHBU^ntLyM6SMuDNBvfZ1_tyLtZS&NFBuzK8XBnb@A|x_ zcIVbZM@CgPPHNF@dF1%Gb|;%Srm9;w{^QgG%Tu;REPCM61ebX~F5_|z3@1yXc)KUr z7IR{(*H@9p9=5jkETT4_?Ofk&*Lu@?wpN^QRCk{n2g?lI8x^VFWiR>(TaNFa(bat0-)|B#A z)wg*b(Y?1D%7c?2*Sz_|vwem2K^@cMTE8SuU2dyCnK9N=rS_|0x(o}>#q{_c^oiYc z@VusL*p!^QPtLTgwCyyNrPSU?O|{pgn(BAOeguuaT79OvJ_z$nel~IOP|xdpytj2* z*qqN!A<(gs3zwYt>f3@Vri?GY61X9u^V+>lYev4_3;i^%F)%o7CHE-fNYhF0#>$!a z@O2`2*MiQ?8Z<^E<2PrR`0#_TC4*hbZl`=4)-Ezq>Q1H60nUJ2c07 zn03r<=6y- z^5T+;?iE#O=PTP!Py5uEy!~i4UbS`q2o)}EX}7haJ~azZ<2P1q+|l*;*dN=k+eJz{ zWJP|94pBY5-cqS)QF6|PuG@czIaks*Y&$+@$k(x6Mn7Rqx@!*;!})GGjl%t E6CzN{zfyP>a3MeXWC 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 CW`1t~ diff --git a/core/src/main/resources/assets/globaltags/textures/icons/x.png b/core/src/main/resources/assets/globaltags/textures/icons/x.png deleted file mode 100644 index b64c49e2075bb874d350f0e7c31e94710a79a0cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2628 zcmbVO3se(V8XhDH30Q-GvTW5MDAY%iNlXG6lPV-2!Gr)tK-^M?$pl7{OiTg+L`B3G z537Py5tLE|Q9woUg^0Qe$D<;?3ceo|Sy2RW741=XCkPzd?QYL@&bf2%-22_{fB$FJ zg@()?Npq(G05DP(Bn>C$S=M1cf_(467vCc%sv&5;2>=|Nt-}T=EOG;Y;bU-BlsQTv zhfzYuLexYo#!A*1NHhS5W+odDGyyY%u~;0g7c;u+8WIbUPA)F!6sO=Z7M%kDa(_wnEiNtb- zu!eZTOqk+{|3W=<{3`*ZYZZzi8NaKGPB$dNWDZCo%@}aV@1jkr6a&T%$4o?`5yb+M zNHsmJ))-)k5kt&`QAH5i!9ax$stj_uEC~E664$E5OVYCI;yWkNnG z2!eS+m;+6PI4}f#f+`3#u1Wb1C}%p%;lOu8AePbcb;C(59CR$Tq z@V@&0ystFkWC=@SN zP^%(8hMFCwCp(;xY-Qt4dp!dH%5|C4PnBHMwV*y^s?g=*^Yia18`85fG?Aj=Ej_da zFWq~_JS`aJktvnTY4U98u{ZxMD}U`&x<}r{oce(3`onRXE`BGbW-4nQz4ZP0)yL)4KLbN|@50>@nuwes?Pfp^Zz*P9#bzkU15;}z63 z4P|$W1T*fhNOm%&W%C}?ZL&+huURRyX^0-J4r}{m?nL?Kx6OO^Wjvk|HLiCUWlOz7 zB_(r2<*iPK4Vzm5+5_zs|7oKs{2MbbZ~T@2+Zg4EtoWC*iXe!# zd-s}aBLh4~hDQGL#fuQ<40LuBR5385xg! z1CQLU;urJ?&*aNZi@4O>8Yn-!I)i?O>JdG`HL)@D<@@(qezt0XE#++R?oK?l9ddMP zTKr-LR`Rv?dbF~tiZ7VtnrrKUtnBOSt6^p_6pGnDItBi?@l7$e?##o7KP2h4iCRwC zx%jz;wAJ4#z_x0~hJ@ev(ltLE@4L1=&Nf1VBq~`9ufxF$xqpe>#^ZZrF>+5NSL=Gy zS6+K?`t*uQLa%@FVnTi%0PPq!MjJ8`>~{`4W>)J=+^ zxxI5t#c{*3CzPTcJL*PP(3|D6{(5%5<(kVyuspX*x&B5Y_#`-PzSq*sPM5fVjnysD z5mCiJaD@n}IC}KxhS#mFt%s$iy31Mq_7Cf0lrLW8aE`U^#YE#Te0{Qe#&>qnFKvL9 zt|X3|qj9f({A$(mQ*M&-Ya6>*ErryyWy^v~M~xa)^P#homL4L?DqUw-p7B-df?cN9 zmuqrN&F?N;$X3Ocbj)w>zDToD@e>LGQDd&Ms?qo-jTBQ=P25ew6tm6{BMe5_I>ZL*^-n5$h|sxduy(|vT<;y zHyzL%6r73Rzh{Og9yn)gb_&>NE=g<&vK>ERLRFrfSNF%^S{5z`r9n)f1WHLL|W~?Fyr5}L<3s@ diff --git a/core/src/main/resources/assets/globaltags/textures/icons/xbox.png b/core/src/main/resources/assets/globaltags/textures/icons/xbox.png deleted file mode 100644 index 866a174902c0cdb7ead1ac7c7d5359d7c4f26c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3253 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 R*$)cL-iBgb^sQg?zW|&qT!a7s diff --git a/core/src/main/resources/assets/globaltags/textures/icons/youtube.png b/core/src/main/resources/assets/globaltags/textures/icons/youtube.png deleted file mode 100644 index 1e82cba0bd2850f9004c6c812c9eccd72229b578..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1975 zcmbVNeNYr-7++L8Jr!xDlmu&C1jW4Dk2{XLjpOSM;nc$mG0==*Z+8z??rzuJJ@1YT zP8~0HR za0Nwjk$o;n^Byh5@J?16@CX16L8<8hfuhS<8FsRzoY#!p_~aM@bBq}&Otxco!NQht zxfLQizap=It|+HX43eG(rv^ws;9+G74tU&Ni42&LeqIucm1z`#`yq0<8Oc-(!bNrm zY~e)~HfS*ojbQ|wV$$LUz20b?2@@EBp;!uvV;X`WF$0;bg9k4JSQ8l+nQxsnXbXIq zkuq5pNEG$^{aU|H%ZsHbZZerrj6exO0}vW1=#{B}#w*1SF<4oN7CAxYcrUClQcm6{ zn-SpYKnNZoOzV{fWdees0ZKq|EvAIj4`k>tPVkBDe&Y;{vToMHdSwY<@i0~><7Hkd zAg$dVw(&?`Jf5%#NzPsd!Wb0fk!YzPD6nWgEAc*&X0w+8H{+FP1kxh1 zl+23-JntSlD94b?FhOWBczPk{Wq7}o^uPwzO3ADl0jH+dV1x!sDZnsNZz6H*1q>%K zYyfKK8O{~_2Nc(lI8N$_hoB&37)qud3ub82#fu&a1k8D;QWh1wr3f6Bk+kq`UId1L zce)4XZ5E3|`-yp!!c=mH z%;h9-s=>k1na?gA9Jx8TKV3+QR?5JP(8~F<3^F*)J+T4_8mo-$U$Qd!V?7;GknD!*HttAK_-ldO?R1K`XQPxGfMgEXQWe zEC|$h)uop|of)&{egE%p&Ou{!bhNc@Lss)Exs9!}^B3)!lNMT?by{`g1p4;*FUP}0 zyXMg9lc5b~k>?U?XgsC$XyS}Hu1e`l>OtY!ySfa2}O~{!1kzZO>yNnfs+pAQ)6~#@$^rQn5qklTzgWSFM0ekbQ=$Q2z z-x_~s^eCfh$4kA$9W@j)_S3apU1bS96Qb7|GukvIuTP%Y`9oyk_R5OFsHhTOvTaY_ z2y5CEPmd|GHZgc}!>Z6X_KQc_TQmIXxaYrUerNykjQEW11;;|SxOpp9udc6E1vp#V zh;!#ks?sYqMYW`;ZiHexr>ajheWmk7C-|1kot&j;3NsUT(v3)E&Hk9mg;Si}3uC95 z)?Chfb?T3mJyq|1SDbk30&EN(|Anb;{+>@6KXGy7*y6flo{zq+^F~50Vsj8P< zuVJ^v)^$5tYL9jd>nLxuUn0+DH&fesudVFZXzRw)+Nbq7I~p2QB_rZ$FZ%Zs-Mg^( razR8Vv}7;jgOV47$WZN-$Uf-BCHg;qJ4Jr0{90|=^_K?1*x From 7bbef10c898945670b089493d399cd58eea16bdb Mon Sep 17 00:00:00 2001 From: RappyTV Date: Sat, 27 Jul 2024 01:08:52 +0200 Subject: [PATCH 16/20] Enable showOwnTag option by default --- .../java/com/rappytv/globaltags/config/GlobalTagConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java b/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java index b9e2e2c..8a65a2b 100644 --- a/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java +++ b/core/src/main/java/com/rappytv/globaltags/config/GlobalTagConfig.java @@ -40,7 +40,7 @@ public void joinDiscord(Setting setting) { @SettingSection("display") @SwitchSetting @SpriteSlot(size = 32, x = 1) - private final ConfigProperty showOwnTag = new ConfigProperty<>(false); + private final ConfigProperty showOwnTag = new ConfigProperty<>(true); @SpriteSlot(size = 32, x = 2) @SliderSetting(min = 5, max = 10) private final ConfigProperty tagSize = new ConfigProperty<>(10); From 903840d2aad887529a29d4c8f3c10b3af806a5fb Mon Sep 17 00:00:00 2001 From: RappyTV Date: Sat, 27 Jul 2024 01:11:39 +0200 Subject: [PATCH 17/20] Update globaltagsjava again because of tag resolving issue --- api/build.gradle.kts | 2 +- core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/build.gradle.kts b/api/build.gradle.kts index e826736..45f501d 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -6,7 +6,7 @@ plugins { dependencies { labyApi("api") - maven(mavenCentral(), "com.rappytv.globaltags:GlobalTagsJava:1.0.2") + maven(mavenCentral(), "com.rappytv.globaltags:GlobalTagsJava:1.0.3") // If you want to use external libraries, you can do that here. // The dependencies that are specified here are loaded into your project but will also diff --git a/core/build.gradle.kts b/core/build.gradle.kts index bff9667..66e0c96 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -6,7 +6,7 @@ plugins { dependencies { api(project(":api")) - maven(mavenCentral(), "com.rappytv.globaltags:GlobalTagsJava:1.0.2") + maven(mavenCentral(), "com.rappytv.globaltags:GlobalTagsJava:1.0.3") // If you want to use external libraries, you can do that here. // The dependencies that are specified here are loaded into your project but will also From 5c0f66ec1efed3f0deeb0a20a65fb105baed17b2 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Sat, 27 Jul 2024 01:18:54 +0200 Subject: [PATCH 18/20] Bump version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index cbdd446..ecbfe19 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.5") + version = System.getenv().getOrDefault("VERSION", "1.2.6") } minecraft { From 4bff0a5adaa48fd74c921b2c76cdc6e8faf29d5e Mon Sep 17 00:00:00 2001 From: RappyTV Date: Sat, 27 Jul 2024 01:49:28 +0200 Subject: [PATCH 19/20] Fix position translations --- core/src/main/resources/assets/globaltags/i18n/de_de.json | 8 ++++---- core/src/main/resources/assets/globaltags/i18n/en_us.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/core/src/main/resources/assets/globaltags/i18n/de_de.json b/core/src/main/resources/assets/globaltags/i18n/de_de.json index e11e9f9..e19d0ac 100644 --- a/core/src/main/resources/assets/globaltags/i18n/de_de.json +++ b/core/src/main/resources/assets/globaltags/i18n/de_de.json @@ -61,10 +61,10 @@ "name": "Globale Position", "description": "Dein Tag ist an dieser Position für alle sichtbar.", "entries": { - "aboveName": "Über dem Namen", - "belowName": "Unten dem Namen", - "rightToName": "Rechts vom Namen", - "leftToName": "Links vom Namen" + "above": "Über dem Namen", + "below": "Unten dem Namen", + "right": "Rechts vom Namen", + "left": "Links vom Namen" } }, "globalIcon": { 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 fb771ba..a930b88 100644 --- a/core/src/main/resources/assets/globaltags/i18n/en_us.json +++ b/core/src/main/resources/assets/globaltags/i18n/en_us.json @@ -61,10 +61,10 @@ "name": "Global position", "description": "Your tag is visible in this position to everyone.", "entries": { - "aboveName": "Above name", - "belowName": "Below name", - "rightToName": "Right to name", - "leftToName": "Left to name" + "above": "Above name", + "below": "Below name", + "right": "Right to name", + "left": "Left to name" } }, "globalIcon": { From 79b98d125930055b3a951c9da174053ef6cda394 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Sat, 27 Jul 2024 01:52:09 +0200 Subject: [PATCH 20/20] Add description to globalIcon config option, reformat de_de.json --- .../assets/globaltags/i18n/de_de.json | 315 +++++++++--------- .../assets/globaltags/i18n/en_us.json | 1 + 2 files changed, 159 insertions(+), 157 deletions(-) diff --git a/core/src/main/resources/assets/globaltags/i18n/de_de.json b/core/src/main/resources/assets/globaltags/i18n/de_de.json index e19d0ac..7f574b2 100644 --- a/core/src/main/resources/assets/globaltags/i18n/de_de.json +++ b/core/src/main/resources/assets/globaltags/i18n/de_de.json @@ -1,165 +1,166 @@ { - "globaltags": { - "settings": { - "name": "Global Tags", - "header": { - "display": { - "name": "Anzeigeeinstellungen" - }, - "tags": { - "name": "Tag-Einstellungen" - } - }, - "enabled": { - "name": "Aktiviert" - }, - "localizedResponses": { - "name": "API-Antworten lokalisieren", - "description": "Wenn diese Option aktiviert ist, sendet das Addon auch deine Minecraft-Sprache an die API. Wenn die Übersetzungen vorhanden sind, erhältst du lokalisierte Antworten. Deine Minecraft-Sprache wird nirgendwo gespeichert." - }, - "joinDiscord": { - "name": "Discord Server", - "text": "Beitreten" - }, - "showOwnTag": { - "name": "Eigenen Tag anzeigen" - }, - "tagSize": { - "name": "Tag Größe" - }, - "showBackground": { - "name": "Hintergrund anzeigen", - "description": "Wenn diese Option aktiviert ist, siehst du den standard Vanilla-Hintergrund hinter den Global Tags." - }, - "tags": { - "name": "Globale Tag-Einstellungen", - "staged": { - "title": "Ausstehende Änderungen", - "description": "Klicke auf den Knopf \"Einstellungen anwenden\", um die ausstehenden Änderungen anzuwenden!" - }, - "tagPreview": { - "name": "Tag-Vorschau", - "banned": "Dein Account wurde gesperrt!\nGrund: %s", - "noInfo": "Kontoinformationen konnten nicht abgerufen werden!", - "labyConnect": "Du bist nicht mit LabyConnect verbunden!", - "empty": "", - "emptyReason": "Kein Grund angegeben", - "appeal": { - "name": "Entbannung", - "description": "⚠️ Dieser Button ist nur klickbar, wenn du Entbannungsanträge stellen darfst.", - "popup": { - "label": "Warum sollten wir dich entbannen?", - "placeholder": "Bitte gebe einen Grund an...", - "button": "Antrag senden" + "globaltags": { + "settings": { + "name": "Global Tags", + "header": { + "display": { + "name": "Anzeigeeinstellungen" + }, + "tags": { + "name": "Tag-Einstellungen" + } + }, + "enabled": { + "name": "Aktiviert" + }, + "localizedResponses": { + "name": "API-Antworten lokalisieren", + "description": "Wenn diese Option aktiviert ist, sendet das Addon auch deine Minecraft-Sprache an die API. Wenn die Übersetzungen vorhanden sind, erhältst du lokalisierte Antworten. Deine Minecraft-Sprache wird nirgendwo gespeichert." + }, + "joinDiscord": { + "name": "Discord Server", + "text": "Beitreten" + }, + "showOwnTag": { + "name": "Eigenen Tag anzeigen" + }, + "tagSize": { + "name": "Tag Größe" + }, + "showBackground": { + "name": "Hintergrund anzeigen", + "description": "Wenn diese Option aktiviert ist, siehst du den standard Vanilla-Hintergrund hinter den Global Tags." + }, + "tags": { + "name": "Globale Tag-Einstellungen", + "staged": { + "title": "Ausstehende Änderungen", + "description": "Klicke auf den Knopf \"Einstellungen anwenden\", um die ausstehenden Änderungen anzuwenden!" + }, + "tagPreview": { + "name": "Tag-Vorschau", + "banned": "Dein Account wurde gesperrt!\nGrund: %s", + "noInfo": "Kontoinformationen konnten nicht abgerufen werden!", + "labyConnect": "Du bist nicht mit LabyConnect verbunden!", + "empty": "", + "emptyReason": "Kein Grund angegeben", + "appeal": { + "name": "Entbannung", + "description": "⚠️ Dieser Button ist nur klickbar, wenn du Entbannungsanträge stellen darfst.", + "popup": { + "label": "Warum sollten wir dich entbannen?", + "placeholder": "Bitte gebe einen Grund an...", + "button": "Antrag senden" + } + } + }, + "tag": { + "name": "Global Tag" + }, + "position": { + "name": "Globale Position", + "description": "Dein Tag ist an dieser Position für alle sichtbar.", + "entries": { + "above": "Über dem Namen", + "below": "Unten dem Namen", + "right": "Rechts vom Namen", + "left": "Links vom Namen" + } + }, + "globalIcon": { + "name": "Globales Icon", + "description": "Dieses Icon wird global links neben deinem Tag angezeigt.", + "entries": { + "none": "Keins", + "discord": "Discord", + "bereal": "BeReal.", + "ebio": "e.bio", + "epicgames": "Epic Games", + "github": "GitHub", + "gitlab": "GitLab", + "instagram": "Instagram", + "kick": "Kick", + "pinterest": "Pinterest", + "playstation": "Playstation", + "snapchat": "Snapchat", + "steam": "Steam", + "threads": "Threads", + "tiktok": "TikTok", + "twitch": "Twitch", + "x": "x", + "xbox": "Xbox", + "youtube": "YouTube" + } + }, + "updateSettings": { + "name": "Einstellungen anwenden", + "text": "Aktualisieren", + "result": "Tag: %s\nPosition: %s\nIcon: %s", + "unchanged": "Unverändert" + }, + "resetTag": { + "name": "Global Tag löschen", + "text": "Löschen" + } + }, + "clearCache": { + "name": "Cache leeren", + "text": "Leeren", + "description": "Löscht den Tag-Cache manuell.\nDer Cache wird automatisch alle §b5 Minuten§f geleert.\nDu kannst den Cache auch mit §b/gt cc§f löschen." } - } }, - "tag": { - "name": "Global Tag" + "notifications": { + "success": "Erfolg!", + "error": "Es ist ein Fehler aufgetreten", + "cacheCleared": "Der Cache wurde geleert!" }, - "position": { - "name": "Globale Position", - "description": "Dein Tag ist an dieser Position für alle sichtbar.", - "entries": { - "above": "Über dem Namen", - "below": "Unten dem Namen", - "right": "Rechts vom Namen", - "left": "Links vom Namen" - } + "messages": { + "clearCache": "Cache leeren", + "hoverClearCache": "Klicke hier, um den Tag-Cache zu leeren!", + "offline": "Verbindung fehlgeschlagen!", + "code": "Der Code wurde in deine Zwischenablage kopiert!" }, - "globalIcon": { - "name": "Globales Icon", - "entries": { - "none": "Keins", - "discord": "Discord", - "bereal": "BeReal.", - "ebio": "e.bio", - "epicgames": "Epic Games", - "github": "GitHub", - "gitlab": "GitLab", - "instagram": "Instagram", - "kick": "Kick", - "pinterest": "Pinterest", - "playstation": "Playstation", - "snapchat": "Snapchat", - "steam": "Steam", - "threads": "Threads", - "tiktok": "TikTok", - "twitch": "Twitch", - "x": "x", - "xbox": "Xbox", - "youtube": "YouTube" - } - }, - "updateSettings": { - "name": "Einstellungen anwenden", - "text": "Aktualisieren", - "result": "Tag: %s\nPosition: %s\nIcon: %s", - "unchanged": "Unverändert" - }, - "resetTag": { - "name": "Global Tag löschen", - "text": "Löschen" + "context": { + "reason": "Grund", + "placeholder": "Bitte gib einen Grund an...", + "referral": { + "name": "Dieser Spieler hat mich zu GlobalTags eingeladen" + }, + "report": { + "name": "GlobalTag melden", + "title": "%s melden", + "send": "Meldung senden" + }, + "ban": { + "name": "GlobalTag-Spieler bannen", + "title": "%s bannen", + "send": "Bannen" + }, + "unban": { + "name": "GlobalTag-Spieler entbannen", + "title": "%s entbannen", + "send": "Entbannen" + }, + "editBan": { + "name": "GlobalTag-Ban bearbeiten", + "title": "Bearbeite den Ban von %s", + "send": "Änderungen speichern", + "appealable": "Darf Entbannungsantrag stellen" + }, + "changeTag": { + "name": "GlobalTag ändern", + "title": "Ändere den Tag von %s", + "label": "Neuer GlobalTag", + "placeholder": "Gib den aktualisierten GlobalTag ein...", + "send": "Tag aktualisieren" + }, + "clearTag": { + "name": "GlobalTag löschen" + }, + "admin": { + "set": "GlobalTag Admin machen", + "remove": "GlobalTag Admin entfernen" + } } - }, - "clearCache": { - "name": "Cache leeren", - "text": "Leeren", - "description": "Löscht den Tag-Cache manuell.\nDer Cache wird automatisch alle §b5 Minuten§f geleert.\nDu kannst den Cache auch mit §b/gt cc§f löschen." - } - }, - "notifications": { - "success": "Erfolg!", - "error": "Es ist ein Fehler aufgetreten", - "cacheCleared": "Der Cache wurde geleert!" - }, - "messages": { - "clearCache": "Cache leeren", - "hoverClearCache": "Klicke hier, um den Tag-Cache zu leeren!", - "offline": "Verbindung fehlgeschlagen!", - "code": "Der Code wurde in deine Zwischenablage kopiert!" - }, - "context": { - "reason": "Grund", - "placeholder": "Bitte gib einen Grund an...", - "referral": { - "name": "Dieser Spieler hat mich zu GlobalTags eingeladen" - }, - "report": { - "name": "GlobalTag melden", - "title": "%s melden", - "send": "Meldung senden" - }, - "ban": { - "name": "GlobalTag-Spieler bannen", - "title": "%s bannen", - "send": "Bannen" - }, - "unban": { - "name": "GlobalTag-Spieler entbannen", - "title": "%s entbannen", - "send": "Entbannen" - }, - "editBan": { - "name": "GlobalTag-Ban bearbeiten", - "title": "Bearbeite den Ban von %s", - "send": "Änderungen speichern", - "appealable": "Darf Entbannungsantrag stellen" - }, - "changeTag": { - "name": "GlobalTag ändern", - "title": "Ändere den Tag von %s", - "label": "Neuer GlobalTag", - "placeholder": "Gib den aktualisierten GlobalTag ein...", - "send": "Tag aktualisieren" - }, - "clearTag": { - "name": "GlobalTag löschen" - }, - "admin": { - "set": "GlobalTag Admin machen", - "remove": "GlobalTag Admin entfernen" - } } - } } 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 a930b88..24a4349 100644 --- a/core/src/main/resources/assets/globaltags/i18n/en_us.json +++ b/core/src/main/resources/assets/globaltags/i18n/en_us.json @@ -69,6 +69,7 @@ }, "globalIcon": { "name": "Global icon", + "description": "This icon will be displayed left to your tag globally.", "entries": { "none": "None", "discord": "Discord",