diff --git a/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/listeners/PlayerJoinLeaveListener.java b/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/listeners/PlayerJoinLeaveListener.java index 5f82bf2..514c512 100644 --- a/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/listeners/PlayerJoinLeaveListener.java +++ b/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/listeners/PlayerJoinLeaveListener.java @@ -4,7 +4,7 @@ import com.viaversion.viaversion.api.Via; import com.xinecraft.minetrax.bukkit.MinetraxBukkit; import com.xinecraft.minetrax.bukkit.utils.PlayerUtil; -import com.xinecraft.minetrax.bukkit.utils.SkinUtil; +import com.xinecraft.minetrax.bukkit.utils.BukkitSkinUtil; import com.xinecraft.minetrax.common.utils.LoggingUtil; import com.xinecraft.minetrax.common.utils.VersionUtil; import com.xinecraft.minetrax.common.actions.FetchPlayerData; @@ -17,10 +17,7 @@ import com.xinecraft.minetrax.common.utils.WhoisUtil; import de.themoep.minedown.adventure.MineDown; import net.skinsrestorer.api.PropertyUtils; -import net.skinsrestorer.api.SkinsRestorer; -import net.skinsrestorer.api.SkinsRestorerProvider; import net.skinsrestorer.api.property.SkinProperty; -import net.skinsrestorer.api.storage.PlayerStorage; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.World; @@ -186,7 +183,7 @@ private void updateSkinDataInPlayerIntel(PlayerSessionIntelData playerSessionInt } } else { // get from SkinsRestorer API - SkinProperty skin = SkinUtil.getSkinForPlayer(player.getUniqueId(), player.getName()); + SkinProperty skin = BukkitSkinUtil.getSkinForPlayer(player.getUniqueId(), player.getName()); if (skin != null) { playerSessionIntelData.skin_property = MinetraxBukkit.getPlugin().getGson().toJson(skin); playerSessionIntelData.skin_texture_id = PropertyUtils.getSkinTextureUrlStripped(skin); diff --git a/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/utils/BukkitPlayerHandler.java b/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/utils/BukkitPlayerHandler.java new file mode 100644 index 0000000..099981b --- /dev/null +++ b/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/utils/BukkitPlayerHandler.java @@ -0,0 +1,31 @@ +package com.xinecraft.minetrax.bukkit.utils; + +import com.xinecraft.minetrax.common.utils.PlayerHandler; +import com.xinecraft.minetrax.bukkit.MinetraxBukkit; +import lombok.SneakyThrows; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.Optional; +import java.util.UUID; + +public class BukkitPlayerHandler implements PlayerHandler { + @Override + public Optional getPlayer(UUID playerUuid) { + return Optional.ofNullable(Bukkit.getPlayer(playerUuid)).map(player -> (Object) player); + } + + @SneakyThrows + @Override + public void applySkin(Object player) { + if (player instanceof Player) { + MinetraxBukkit plugin = MinetraxBukkit.getPlugin(); + if (plugin != null && plugin.getSkinsRestorerApi() != null) { + plugin.getSkinsRestorerApi().getSkinApplier(Player.class).applySkin((Player) player); + } else { + // Log an error message if the SkinsRestorer API is not available + plugin.getLogger().severe("SkinsRestorer API is not initialized."); + } + } + } +} diff --git a/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/utils/SkinUtil.java b/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/utils/BukkitSkinUtil.java similarity index 53% rename from bukkit/src/main/java/com/xinecraft/minetrax/bukkit/utils/SkinUtil.java rename to bukkit/src/main/java/com/xinecraft/minetrax/bukkit/utils/BukkitSkinUtil.java index e6f6593..d88898d 100644 --- a/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/utils/SkinUtil.java +++ b/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/utils/BukkitSkinUtil.java @@ -1,96 +1,56 @@ package com.xinecraft.minetrax.bukkit.utils; import com.xinecraft.minetrax.bukkit.MinetraxBukkit; +import com.xinecraft.minetrax.common.utils.CommonSkinUtil; import com.xinecraft.minetrax.common.utils.LoggingUtil; +import com.xinecraft.minetrax.common.utils.PlayerHandler; import net.skinsrestorer.api.PropertyUtils; import net.skinsrestorer.api.SkinsRestorer; import net.skinsrestorer.api.SkinsRestorerProvider; -import net.skinsrestorer.api.exception.DataRequestException; -import net.skinsrestorer.api.exception.MineSkinException; -import net.skinsrestorer.api.property.InputDataResult; import net.skinsrestorer.api.property.SkinIdentifier; import net.skinsrestorer.api.property.SkinProperty; import net.skinsrestorer.api.storage.CacheStorage; import net.skinsrestorer.api.storage.PlayerStorage; import net.skinsrestorer.api.storage.SkinStorage; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import java.util.Optional; import java.util.UUID; -public class SkinUtil { - public static void setPlayerSkinUsingUrlOrName(String playerUuid, String value) throws MineSkinException, DataRequestException { - SkinsRestorer skinsRestorerApi = MinetraxBukkit.getPlugin().getSkinsRestorerApi(); - SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - Optional result = skinStorage.findOrCreateSkinData(value); - if (result.isEmpty()) { - return; - } +public class BukkitSkinUtil { + private static final CommonSkinUtil commonSkinUtil = new CommonSkinUtil(SkinsRestorerProvider.get(), new BukkitPlayerHandler()); - // Assign the skin to player. - playerStorage.setSkinIdOfPlayer(UUID.fromString(playerUuid), result.get().getIdentifier()); - - // Instantly apply skin to the player without requiring the player to rejoin, if online - Player player = Bukkit.getPlayer(UUID.fromString(playerUuid)); - if (player != null) { - skinsRestorerApi.getSkinApplier(Player.class).applySkin(player); - } + public static void setPlayerSkinUsingUrlOrName(String playerUuid, String value) { + commonSkinUtil.setPlayerSkinUsingUrlOrName(playerUuid, value); } - public static void setPlayerSkinUsingCustom(String playerUuid, String value) throws DataRequestException { - SkinsRestorer skinsRestorerApi = MinetraxBukkit.getPlugin().getSkinsRestorerApi(); - SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - - // Split the value into skin value and signature separated by ::: - String[] valueParts = value.split(":::"); - String skinValue = valueParts[0]; - String skinSignature = valueParts[1]; - - skinStorage.setCustomSkinData(playerUuid, SkinProperty.of(skinValue, skinSignature)); - Optional result = skinStorage.findSkinData(playerUuid); - if (result.isEmpty()) { - return; - } - - // Assign the skin to player. - playerStorage.setSkinIdOfPlayer(UUID.fromString(playerUuid), result.get().getIdentifier()); - - // Instantly apply skin to the player without requiring the player to rejoin, if online - Player player = Bukkit.getPlayer(UUID.fromString(playerUuid)); - if (player != null) { - skinsRestorerApi.getSkinApplier(Player.class).applySkin(player); - } + public static void setPlayerSkinUsingCustom(String playerUuid, String value) { + commonSkinUtil.setPlayerSkinUsingCustom(playerUuid, value); } - public static void clearPlayerSkin(String playerUuid) throws DataRequestException { - SkinsRestorer skinsRestorerApi = MinetraxBukkit.getPlugin().getSkinsRestorerApi(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - playerStorage.removeSkinIdOfPlayer(UUID.fromString(playerUuid)); - - // Instantly apply skin to the player without requiring the player to rejoin, if online - Player player = Bukkit.getPlayer(UUID.fromString(playerUuid)); - if (player != null) { - skinsRestorerApi.getSkinApplier(Player.class).applySkin(player); - } + public static void clearPlayerSkin(String playerUuid) { + commonSkinUtil.clearPlayerSkin(playerUuid); } - public static SkinProperty getSkinForPlayer(UUID playerUuid, String playerName) { - SkinsRestorer skinsRestorerAPI = MinetraxBukkit.getPlugin().getSkinsRestorerApi(); - PlayerStorage playerStorage = skinsRestorerAPI.getPlayerStorage(); + public static String getSkinTextureId(UUID playerUuid, String playerName) { try { - Optional skin = playerStorage.getSkinForPlayer(playerUuid, playerName); - if (skin.isPresent()) { - return skin.get(); + if (MinetraxBukkit.getPlugin().getHasSkinsRestorerInProxyMode()) { + // get from playerSkinCache (from Bungee) + String[] skinArr = MinetraxBukkit.getPlugin().getPlayerSkinCache().get(playerUuid.toString()); + if (skinArr != null) { + return skinArr[1]; + } + } else { + // get from SkinsRestorer API + SkinProperty skin = getSkinOfPlayerFromCache(playerUuid, playerName); + if (skin != null) { + return PropertyUtils.getSkinTextureUrlStripped(skin); + } } } catch (Exception e) { - LoggingUtil.warntrace(e); + LoggingUtil.info("[SkinUtil -> getSkinTextureId] Error getting skin for player: " + e.getMessage()); } return null; } - public static SkinProperty getSkinOfPlayerFromCache(UUID playerUuid, String playerName) { SkinsRestorer skinsRestorerApi = MinetraxBukkit.getPlugin().getSkinsRestorerApi(); PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); @@ -110,24 +70,16 @@ public static SkinProperty getSkinOfPlayerFromCache(UUID playerUuid, String play } return null; } - - public static String getSkinTextureId(UUID playerUuid, String playerName) { + public static SkinProperty getSkinForPlayer(UUID playerUuid, String playerName) { + SkinsRestorer skinsRestorerAPI = MinetraxBukkit.getPlugin().getSkinsRestorerApi(); + PlayerStorage playerStorage = skinsRestorerAPI.getPlayerStorage(); try { - if (MinetraxBukkit.getPlugin().getHasSkinsRestorerInProxyMode()) { - // get from playerSkinCache (from Bungee) - String[] skinArr = MinetraxBukkit.getPlugin().getPlayerSkinCache().get(playerUuid.toString()); - if (skinArr != null) { - return skinArr[1]; - } - } else { - // get from SkinsRestorer API - SkinProperty skin = getSkinOfPlayerFromCache(playerUuid, playerName); - if (skin != null) { - return PropertyUtils.getSkinTextureUrlStripped(skin); - } + Optional skin = playerStorage.getSkinForPlayer(playerUuid, playerName); + if (skin.isPresent()) { + return skin.get(); } } catch (Exception e) { - LoggingUtil.info("[SkinUtil -> getSkinTextureId] Error getting skin for player: " + e.getMessage()); + LoggingUtil.warntrace(e); } return null; } diff --git a/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/webquery/BukkitWebQuery.java b/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/webquery/BukkitWebQuery.java index 116cde5..a095e8f 100644 --- a/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/webquery/BukkitWebQuery.java +++ b/bukkit/src/main/java/com/xinecraft/minetrax/bukkit/webquery/BukkitWebQuery.java @@ -4,16 +4,11 @@ import com.google.gson.JsonObject; import com.xinecraft.minetrax.bukkit.MinetraxBukkit; import com.xinecraft.minetrax.bukkit.utils.PlayerUtil; -import com.xinecraft.minetrax.bukkit.utils.SkinUtil; +import com.xinecraft.minetrax.bukkit.utils.BukkitSkinUtil; import com.xinecraft.minetrax.common.data.PlayerData; import com.xinecraft.minetrax.common.interfaces.webquery.CommonWebQuery; -import com.xinecraft.minetrax.common.utils.LoggingUtil; -import net.skinsrestorer.api.PropertyUtils; -import net.skinsrestorer.api.SkinsRestorer; import net.skinsrestorer.api.exception.DataRequestException; import net.skinsrestorer.api.exception.MineSkinException; -import net.skinsrestorer.api.property.SkinProperty; -import net.skinsrestorer.api.storage.PlayerStorage; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -55,7 +50,7 @@ public String handleStatus() { // If SkinRestorer is enabled, then add skin data if (this.plugin.getHasSkinsRestorer()) { - String skinTextureId = SkinUtil.getSkinTextureId(player.getUniqueId(), player.getName()); + String skinTextureId = BukkitSkinUtil.getSkinTextureId(player.getUniqueId(), player.getName()); if (skinTextureId != null) { playerJsonObject.addProperty("skin_texture_id", skinTextureId); } @@ -133,13 +128,13 @@ public String handleSetPlayerSkin(String playerUuid, String commandType, String switch (commandType) { case "url": case "username": - SkinUtil.setPlayerSkinUsingUrlOrName(playerUuid, value); + BukkitSkinUtil.setPlayerSkinUsingUrlOrName(playerUuid, value); break; case "upload": - SkinUtil.setPlayerSkinUsingCustom(playerUuid, value); + BukkitSkinUtil.setPlayerSkinUsingCustom(playerUuid, value); break; case "clear": - SkinUtil.clearPlayerSkin(playerUuid); + BukkitSkinUtil.clearPlayerSkin(playerUuid); break; default: break; diff --git a/bungee/src/main/java/com/xinecraft/minetrax/bungee/listeners/ServerConnectedListener.java b/bungee/src/main/java/com/xinecraft/minetrax/bungee/listeners/ServerConnectedListener.java index 7c49e4a..c0d720f 100644 --- a/bungee/src/main/java/com/xinecraft/minetrax/bungee/listeners/ServerConnectedListener.java +++ b/bungee/src/main/java/com/xinecraft/minetrax/bungee/listeners/ServerConnectedListener.java @@ -3,7 +3,7 @@ import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; import com.xinecraft.minetrax.bungee.MinetraxBungee; -import com.xinecraft.minetrax.bungee.utils.SkinUtil; +import com.xinecraft.minetrax.bungee.utils.BungeeSkinUtil; import com.xinecraft.minetrax.common.MinetraxCommon; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.ServerConnectedEvent; @@ -21,7 +21,7 @@ public void sendUpdateSkinMessageOnServerConnected(ServerConnectedEvent event) { ProxiedPlayer player = event.getPlayer(); MinetraxBungee.getPlugin().getProxy().getScheduler().runAsync(MinetraxBungee.getPlugin(), () -> { - SkinProperty skinProperty = SkinUtil.getSkinForPlayer(player.getUniqueId(), player.getName()); + SkinProperty skinProperty = BungeeSkinUtil.getSkinForPlayer(player.getUniqueId(), player.getName()); if (skinProperty != null) { String skinPropertyJson = MinetraxBungee.getPlugin().getGson().toJson(skinProperty); String skinTextureId = PropertyUtils.getSkinTextureUrlStripped(skinProperty); diff --git a/bungee/src/main/java/com/xinecraft/minetrax/bungee/utils/BungeePlayerHandler.java b/bungee/src/main/java/com/xinecraft/minetrax/bungee/utils/BungeePlayerHandler.java new file mode 100644 index 0000000..839d200 --- /dev/null +++ b/bungee/src/main/java/com/xinecraft/minetrax/bungee/utils/BungeePlayerHandler.java @@ -0,0 +1,37 @@ +package com.xinecraft.minetrax.bungee.utils; + +import com.xinecraft.minetrax.bungee.MinetraxBungee; +import com.xinecraft.minetrax.common.utils.PlayerHandler; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.skinsrestorer.api.SkinsRestorer; +import net.skinsrestorer.api.exception.DataRequestException; + +import java.util.Optional; +import java.util.UUID; + +public class BungeePlayerHandler implements PlayerHandler { + private final SkinsRestorer skinsRestorerApi; + + public BungeePlayerHandler() { + this.skinsRestorerApi = MinetraxBungee.getPlugin().getSkinsRestorerApi(); + } + + @Override + public Optional getPlayer(UUID playerUuid) { + return Optional.ofNullable(ProxyServer.getInstance().getPlayer(playerUuid)); + } + + @Override + public void applySkin(Object player) { + if (player instanceof ProxiedPlayer) { + try { + skinsRestorerApi.getSkinApplier(ProxiedPlayer.class).applySkin((ProxiedPlayer) player); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + +} diff --git a/bungee/src/main/java/com/xinecraft/minetrax/bungee/utils/BungeeSkinUtil.java b/bungee/src/main/java/com/xinecraft/minetrax/bungee/utils/BungeeSkinUtil.java new file mode 100644 index 0000000..8040be7 --- /dev/null +++ b/bungee/src/main/java/com/xinecraft/minetrax/bungee/utils/BungeeSkinUtil.java @@ -0,0 +1,69 @@ +package com.xinecraft.minetrax.bungee.utils; + +import com.xinecraft.minetrax.common.utils.CommonSkinUtil; +import com.xinecraft.minetrax.common.utils.LoggingUtil; +import com.xinecraft.minetrax.common.utils.PlayerHandler; +import com.xinecraft.minetrax.bungee.MinetraxBungee; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.ProxyServer; +import net.skinsrestorer.api.SkinsRestorer; +import net.skinsrestorer.api.SkinsRestorerProvider; +import net.skinsrestorer.api.exception.DataRequestException; +import net.skinsrestorer.api.property.SkinIdentifier; +import net.skinsrestorer.api.property.SkinProperty; +import net.skinsrestorer.api.storage.CacheStorage; +import net.skinsrestorer.api.storage.PlayerStorage; +import net.skinsrestorer.api.storage.SkinStorage; + +import java.util.Optional; +import java.util.UUID; + +public class BungeeSkinUtil { + private static final CommonSkinUtil commonSkinUtil = new CommonSkinUtil(SkinsRestorerProvider.get(), new BungeePlayerHandler()); + + public static void setPlayerSkinUsingUrlOrName(String playerUuid, String value) { + commonSkinUtil.setPlayerSkinUsingUrlOrName(playerUuid, value); + } + + public static void setPlayerSkinUsingCustom(String playerUuid, String value) { + commonSkinUtil.setPlayerSkinUsingCustom(playerUuid, value); + } + + public static void clearPlayerSkin(String playerUuid) { + commonSkinUtil.clearPlayerSkin(playerUuid); + } + public static SkinProperty getSkinForPlayer(UUID playerUuid, String playerName) { + SkinsRestorer skinsRestorerAPI = MinetraxBungee.getPlugin().getSkinsRestorerApi(); + PlayerStorage playerStorage = skinsRestorerAPI.getPlayerStorage(); + try { + Optional skin = playerStorage.getSkinForPlayer(playerUuid, playerName); + if (skin.isPresent()) { + return skin.get(); + } + } catch (Exception e) { + LoggingUtil.warntrace(e); + } + return null; + } + public static SkinProperty getSkinOfPlayerFromCache(UUID playerUuid, String playerName) { + SkinsRestorer skinsRestorerApi = MinetraxBungee.getPlugin().getSkinsRestorerApi(); + PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); + SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); + CacheStorage cacheStorage = skinsRestorerApi.getCacheStorage(); + try { + SkinIdentifier skinIdentifier; + Optional tempIdentifier = playerStorage.getSkinIdOfPlayer(playerUuid); + UUID cacheUuid = cacheStorage.getUUID(playerName, true).orElseGet(() -> playerUuid); + skinIdentifier = tempIdentifier.orElseGet(() -> SkinIdentifier.ofPlayer(cacheUuid)); + Optional skin = skinStorage.getSkinDataByIdentifier(skinIdentifier); + if (skin.isPresent()) { + return skin.get(); + } + } catch (Exception e) { + LoggingUtil.debug("[SkinUtil] Error getting cached skin for player: " + playerName + " : " + e.getMessage()); + } + return null; + } +} + + diff --git a/bungee/src/main/java/com/xinecraft/minetrax/bungee/utils/SkinUtil.java b/bungee/src/main/java/com/xinecraft/minetrax/bungee/utils/SkinUtil.java deleted file mode 100644 index cc70e3a..0000000 --- a/bungee/src/main/java/com/xinecraft/minetrax/bungee/utils/SkinUtil.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.xinecraft.minetrax.bungee.utils; - -import com.xinecraft.minetrax.bungee.MinetraxBungee; -import com.xinecraft.minetrax.common.utils.LoggingUtil; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.skinsrestorer.api.SkinsRestorer; -import net.skinsrestorer.api.SkinsRestorerProvider; -import net.skinsrestorer.api.exception.DataRequestException; -import net.skinsrestorer.api.exception.MineSkinException; -import net.skinsrestorer.api.property.InputDataResult; -import net.skinsrestorer.api.property.SkinIdentifier; -import net.skinsrestorer.api.property.SkinProperty; -import net.skinsrestorer.api.storage.CacheStorage; -import net.skinsrestorer.api.storage.PlayerStorage; -import net.skinsrestorer.api.storage.SkinStorage; - -import java.util.Optional; -import java.util.UUID; - -public class SkinUtil { - public static void setPlayerSkinUsingUrlOrName(String playerUuid, String value) throws MineSkinException, DataRequestException { - SkinsRestorer skinsRestorerApi = MinetraxBungee.getPlugin().getSkinsRestorerApi(); - SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - Optional result = skinStorage.findOrCreateSkinData(value); - if (result.isEmpty()) { - return; - } - - // Assign the skin to player. - playerStorage.setSkinIdOfPlayer(UUID.fromString(playerUuid), result.get().getIdentifier()); - - // Instantly apply skin to the player without requiring the player to rejoin, if online - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(UUID.fromString(playerUuid)); - if (player != null) { - skinsRestorerApi.getSkinApplier(ProxiedPlayer.class).applySkin(player); - } - } - - public static void setPlayerSkinUsingCustom(String playerUuid, String value) throws DataRequestException { - SkinsRestorer skinsRestorerApi = MinetraxBungee.getPlugin().getSkinsRestorerApi(); - SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - - // Split the value into skin value and signature separated by ::: - String[] valueParts = value.split(":::"); - String skinValue = valueParts[0]; - String skinSignature = valueParts[1]; - - skinStorage.setCustomSkinData(playerUuid, SkinProperty.of(skinValue, skinSignature)); - Optional result = skinStorage.findSkinData(playerUuid); - if (result.isEmpty()) { - return; - } - - // Assign the skin to player. - playerStorage.setSkinIdOfPlayer(UUID.fromString(playerUuid), result.get().getIdentifier()); - - // Instantly apply skin to the player without requiring the player to rejoin, if online - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(UUID.fromString(playerUuid)); - if (player != null) { - skinsRestorerApi.getSkinApplier(ProxiedPlayer.class).applySkin(player); - } - } - - public static void clearPlayerSkin(String playerUuid) throws DataRequestException { - SkinsRestorer skinsRestorerApi = MinetraxBungee.getPlugin().getSkinsRestorerApi(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - playerStorage.removeSkinIdOfPlayer(UUID.fromString(playerUuid)); - - // Instantly apply skin to the player without requiring the player to rejoin, if online - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(UUID.fromString(playerUuid)); - if (player != null) { - skinsRestorerApi.getSkinApplier(ProxiedPlayer.class).applySkin(player); - } - } - - public static SkinProperty getSkinForPlayer(UUID playerUuid, String playerName) { - SkinsRestorer skinsRestorerAPI = MinetraxBungee.getPlugin().getSkinsRestorerApi(); - PlayerStorage playerStorage = skinsRestorerAPI.getPlayerStorage(); - try { - Optional skin = playerStorage.getSkinForPlayer(playerUuid, playerName); - if (skin.isPresent()) { - return skin.get(); - } - } catch (Exception e) { - LoggingUtil.warntrace(e); - } - return null; - } - - public static SkinProperty getSkinOfPlayerFromCache(UUID playerUuid, String playerName) { - SkinsRestorer skinsRestorerApi = MinetraxBungee.getPlugin().getSkinsRestorerApi(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); - CacheStorage cacheStorage = skinsRestorerApi.getCacheStorage(); - try { - SkinIdentifier skinIdentifier; - Optional tempIdentifier = playerStorage.getSkinIdOfPlayer(playerUuid); - UUID cacheUuid = cacheStorage.getUUID(playerName, true).orElseGet(() -> playerUuid); - skinIdentifier = tempIdentifier.orElseGet(() -> SkinIdentifier.ofPlayer(cacheUuid)); - Optional skin = skinStorage.getSkinDataByIdentifier(skinIdentifier); - if (skin.isPresent()) { - return skin.get(); - } - } catch (Exception e) { - LoggingUtil.debug("[SkinUtil] Error getting cached skin for player: " + playerName + " : " + e.getMessage()); - } - return null; - } -} diff --git a/bungee/src/main/java/com/xinecraft/minetrax/bungee/webquery/BungeeWebQuery.java b/bungee/src/main/java/com/xinecraft/minetrax/bungee/webquery/BungeeWebQuery.java index b6395d2..d02b94a 100644 --- a/bungee/src/main/java/com/xinecraft/minetrax/bungee/webquery/BungeeWebQuery.java +++ b/bungee/src/main/java/com/xinecraft/minetrax/bungee/webquery/BungeeWebQuery.java @@ -3,17 +3,14 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.xinecraft.minetrax.bungee.MinetraxBungee; -import com.xinecraft.minetrax.bungee.utils.SkinUtil; +import com.xinecraft.minetrax.bungee.utils.BungeeSkinUtil; import com.xinecraft.minetrax.common.interfaces.webquery.CommonWebQuery; -import com.xinecraft.minetrax.common.utils.LoggingUtil; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.skinsrestorer.api.PropertyUtils; -import net.skinsrestorer.api.SkinsRestorer; import net.skinsrestorer.api.property.SkinProperty; -import net.skinsrestorer.api.storage.PlayerStorage; import java.util.*; @@ -47,7 +44,7 @@ public String handleStatus() throws Exception { playerJsonObject.addProperty("ip_address", Objects.requireNonNull(player.getAddress()).getHostString()); if (this.plugin.getHasSkinsRestorer()) { - SkinProperty skin = SkinUtil.getSkinOfPlayerFromCache(player.getUniqueId(), player.getName()); + SkinProperty skin = BungeeSkinUtil.getSkinOfPlayerFromCache(player.getUniqueId(), player.getName()); if (skin != null) { playerJsonObject.addProperty("skin_texture_id", PropertyUtils.getSkinTextureUrlStripped(skin)); } @@ -121,13 +118,13 @@ public String handleSetPlayerSkin(String playerUuid, String commandType, String switch (commandType) { case "url": case "username": - SkinUtil.setPlayerSkinUsingUrlOrName(playerUuid, value); + BungeeSkinUtil.setPlayerSkinUsingUrlOrName(playerUuid, value); break; case "upload": - SkinUtil.setPlayerSkinUsingCustom(playerUuid, value); + BungeeSkinUtil.setPlayerSkinUsingCustom(playerUuid, value); break; case "clear": - SkinUtil.clearPlayerSkin(playerUuid); + BungeeSkinUtil.clearPlayerSkin(playerUuid); break; default: break; diff --git a/common/src/main/java/com/xinecraft/minetrax/common/MinetraxCommon.java b/common/src/main/java/com/xinecraft/minetrax/common/MinetraxCommon.java index 6e91d15..bebd942 100644 --- a/common/src/main/java/com/xinecraft/minetrax/common/MinetraxCommon.java +++ b/common/src/main/java/com/xinecraft/minetrax/common/MinetraxCommon.java @@ -25,4 +25,5 @@ public class MinetraxCommon { public MinetraxCommon() { instance = this; } + } diff --git a/common/src/main/java/com/xinecraft/minetrax/common/utils/CommonSkinUtil.java b/common/src/main/java/com/xinecraft/minetrax/common/utils/CommonSkinUtil.java new file mode 100644 index 0000000..f30c0cd --- /dev/null +++ b/common/src/main/java/com/xinecraft/minetrax/common/utils/CommonSkinUtil.java @@ -0,0 +1,90 @@ +package com.xinecraft.minetrax.common.utils; + +import net.skinsrestorer.api.PropertyUtils; +import net.skinsrestorer.api.SkinsRestorer; +import net.skinsrestorer.api.exception.DataRequestException; +import net.skinsrestorer.api.exception.MineSkinException; +import net.skinsrestorer.api.property.InputDataResult; +import net.skinsrestorer.api.property.SkinProperty; +import net.skinsrestorer.api.storage.PlayerStorage; +import net.skinsrestorer.api.storage.SkinStorage; + +import java.util.Optional; +import java.util.UUID; + +public class CommonSkinUtil { + private final SkinsRestorer skinsRestorerApi; + private final PlayerHandler playerHandler; + + public CommonSkinUtil(SkinsRestorer skinsRestorerApi, PlayerHandler playerHandler) { + this.skinsRestorerApi = skinsRestorerApi; + this.playerHandler = playerHandler; + } + + + public void setPlayerSkinUsingUrlOrName(String playerUuid, String value) { + try { + SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); + PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); + Optional result = skinStorage.findOrCreateSkinData(value); + if (result.isEmpty()) { + return; + } + + playerStorage.setSkinIdOfPlayer(UUID.fromString(playerUuid), result.get().getIdentifier()); + + Optional player = playerHandler.getPlayer(UUID.fromString(playerUuid)); + player.ifPresent(playerHandler::applySkin); + } catch (MineSkinException | DataRequestException e) { + e.printStackTrace(); + } + } + + public void setPlayerSkinUsingCustom(String playerUuid, String value) { + try { + SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); + PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); + + String[] valueParts = value.split(":::"); + String skinValue = valueParts[0]; + String skinSignature = valueParts[1]; + + skinStorage.setCustomSkinData(playerUuid, SkinProperty.of(skinValue, skinSignature)); + Optional result = skinStorage.findSkinData(playerUuid); + if (result.isEmpty()) { + return; + } + + playerStorage.setSkinIdOfPlayer(UUID.fromString(playerUuid), result.get().getIdentifier()); + + Optional player = playerHandler.getPlayer(UUID.fromString(playerUuid)); + player.ifPresent(playerHandler::applySkin); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + public void clearPlayerSkin(String playerUuid) { + PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); + playerStorage.removeSkinIdOfPlayer(UUID.fromString(playerUuid)); + + Optional player = playerHandler.getPlayer(UUID.fromString(playerUuid)); + player.ifPresent(playerHandler::applySkin); + } + + + public SkinProperty getSkinForPlayer(UUID playerUuid, String playerName) { + PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); + try { + Optional skin = playerStorage.getSkinForPlayer(playerUuid, playerName); + return skin.orElse(null); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + +} diff --git a/common/src/main/java/com/xinecraft/minetrax/common/utils/PlayerHandler.java b/common/src/main/java/com/xinecraft/minetrax/common/utils/PlayerHandler.java new file mode 100644 index 0000000..c378e5a --- /dev/null +++ b/common/src/main/java/com/xinecraft/minetrax/common/utils/PlayerHandler.java @@ -0,0 +1,9 @@ +package com.xinecraft.minetrax.common.utils; + +import java.util.Optional; +import java.util.UUID; + +public interface PlayerHandler { + Optional getPlayer(UUID playerUuid); + void applySkin(Object player); +} diff --git a/velocity/src/main/java/com/xinecraft/minetrax/velocity/listeners/ServerConnectedListener.java b/velocity/src/main/java/com/xinecraft/minetrax/velocity/listeners/ServerConnectedListener.java index 84749c1..b7d2ddc 100644 --- a/velocity/src/main/java/com/xinecraft/minetrax/velocity/listeners/ServerConnectedListener.java +++ b/velocity/src/main/java/com/xinecraft/minetrax/velocity/listeners/ServerConnectedListener.java @@ -7,7 +7,7 @@ import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.server.RegisteredServer; import com.xinecraft.minetrax.velocity.MinetraxVelocity; -import com.xinecraft.minetrax.velocity.utils.SkinUtil; +import com.xinecraft.minetrax.velocity.utils.VelocitySkinUtil; import net.skinsrestorer.api.PropertyUtils; import net.skinsrestorer.api.property.SkinProperty; @@ -21,7 +21,7 @@ public void sendUpdateSkinMessageOnServerConnected(ServerConnectedEvent event) { Player player = event.getPlayer(); RegisteredServer server = event.getServer(); MinetraxVelocity.getPlugin().getProxyServer().getScheduler().buildTask(MinetraxVelocity.getPlugin(), () -> { - SkinProperty skinProperty = SkinUtil.getSkinForPlayer(player.getUniqueId(), player.getUsername()); + SkinProperty skinProperty = VelocitySkinUtil.getSkinForPlayer(player.getUniqueId(), player.getUsername()); if (skinProperty != null) { String skinPropertyJson = MinetraxVelocity.getPlugin().getGson().toJson(skinProperty); String skinTextureId = PropertyUtils.getSkinTextureUrlStripped(skinProperty); diff --git a/velocity/src/main/java/com/xinecraft/minetrax/velocity/utils/SkinUtil.java b/velocity/src/main/java/com/xinecraft/minetrax/velocity/utils/SkinUtil.java deleted file mode 100644 index e52d05f..0000000 --- a/velocity/src/main/java/com/xinecraft/minetrax/velocity/utils/SkinUtil.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.xinecraft.minetrax.velocity.utils; - -import com.velocitypowered.api.proxy.Player; -import com.xinecraft.minetrax.common.utils.LoggingUtil; -import com.xinecraft.minetrax.velocity.MinetraxVelocity; -import net.skinsrestorer.api.PropertyUtils; -import net.skinsrestorer.api.SkinsRestorer; -import net.skinsrestorer.api.SkinsRestorerProvider; -import net.skinsrestorer.api.exception.DataRequestException; -import net.skinsrestorer.api.exception.MineSkinException; -import net.skinsrestorer.api.property.InputDataResult; -import net.skinsrestorer.api.property.SkinIdentifier; -import net.skinsrestorer.api.property.SkinProperty; -import net.skinsrestorer.api.storage.CacheStorage; -import net.skinsrestorer.api.storage.PlayerStorage; -import net.skinsrestorer.api.storage.SkinStorage; - -import java.util.Optional; -import java.util.UUID; - -public class SkinUtil { - public static void setPlayerSkinUsingUrlOrName(String playerUuid, String value) throws MineSkinException, DataRequestException { - SkinsRestorer skinsRestorerApi = SkinsRestorerProvider.get(); - SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - Optional result = skinStorage.findOrCreateSkinData(value); - if (result.isEmpty()) { - return; - } - - // Assign the skin to player. - playerStorage.setSkinIdOfPlayer(UUID.fromString(playerUuid), result.get().getIdentifier()); - - // Instantly apply skin to the player without requiring the player to rejoin, if online - Optional player = MinetraxVelocity.getPlugin().getProxyServer().getPlayer(UUID.fromString(playerUuid)); - if (player.isPresent()) { - skinsRestorerApi.getSkinApplier(Player.class).applySkin(player.get()); - } - } - - public static void setPlayerSkinUsingCustom(String playerUuid, String value) throws DataRequestException { - SkinsRestorer skinsRestorerApi = SkinsRestorerProvider.get(); - SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - - // Split the value into skin value and signature separated by ::: - String[] valueParts = value.split(":::"); - String skinValue = valueParts[0]; - String skinSignature = valueParts[1]; - - skinStorage.setCustomSkinData(playerUuid, SkinProperty.of(skinValue, skinSignature)); - Optional result = skinStorage.findSkinData(playerUuid); - if (result.isEmpty()) { - return; - } - - // Assign the skin to player. - playerStorage.setSkinIdOfPlayer(UUID.fromString(playerUuid), result.get().getIdentifier()); - - // Instantly apply skin to the player without requiring the player to rejoin, if online - Optional player = MinetraxVelocity.getPlugin().getProxyServer().getPlayer(UUID.fromString(playerUuid)); - if (player.isPresent()) { - skinsRestorerApi.getSkinApplier(Player.class).applySkin(player.get()); - } - } - - public static void clearPlayerSkin(String playerUuid) throws DataRequestException { - SkinsRestorer skinsRestorerApi = SkinsRestorerProvider.get(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - playerStorage.removeSkinIdOfPlayer(UUID.fromString(playerUuid)); - - // Instantly apply skin to the player without requiring the player to rejoin, if online - Optional player = MinetraxVelocity.getPlugin().getProxyServer().getPlayer(UUID.fromString(playerUuid)); - if (player.isPresent()) { - skinsRestorerApi.getSkinApplier(Player.class).applySkin(player.get()); - } - } - - public static SkinProperty getSkinForPlayer(UUID playerUuid, String playerName) { - SkinsRestorer skinsRestorerAPI = SkinsRestorerProvider.get(); - PlayerStorage playerStorage = skinsRestorerAPI.getPlayerStorage(); - try { - Optional skin = playerStorage.getSkinForPlayer(playerUuid, playerName); - if (skin.isPresent()) { - return skin.get(); - } - } catch (Exception e) { - LoggingUtil.warntrace(e); - } - return null; - } - - public static SkinProperty getSkinOfPlayerFromCache(UUID playerUuid, String playerName) { - SkinsRestorer skinsRestorerApi = SkinsRestorerProvider.get(); - PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); - SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); - CacheStorage cacheStorage = skinsRestorerApi.getCacheStorage(); - try { - SkinIdentifier skinIdentifier; - Optional tempIdentifier = playerStorage.getSkinIdOfPlayer(playerUuid); - UUID cacheUuid = cacheStorage.getUUID(playerName, true).orElseGet(() -> playerUuid); - skinIdentifier = tempIdentifier.orElseGet(() -> SkinIdentifier.ofPlayer(cacheUuid)); - Optional skin = skinStorage.getSkinDataByIdentifier(skinIdentifier); - if (skin.isPresent()) { - return skin.get(); - } - } catch (Exception e) { - LoggingUtil.debug("[SkinUtil] Error getting cached skin for player: " + playerName + " : " + e.getMessage()); - } - return null; - } -} diff --git a/velocity/src/main/java/com/xinecraft/minetrax/velocity/utils/VelocityPlayerHandler.java b/velocity/src/main/java/com/xinecraft/minetrax/velocity/utils/VelocityPlayerHandler.java new file mode 100644 index 0000000..28565be --- /dev/null +++ b/velocity/src/main/java/com/xinecraft/minetrax/velocity/utils/VelocityPlayerHandler.java @@ -0,0 +1,38 @@ +package com.xinecraft.minetrax.velocity.utils; + +import com.velocitypowered.api.proxy.Player; +import com.xinecraft.minetrax.common.utils.PlayerHandler; +import com.xinecraft.minetrax.velocity.MinetraxVelocity; +import net.skinsrestorer.api.SkinsRestorer; +import net.skinsrestorer.api.SkinsRestorerProvider; + +import java.util.Optional; +import java.util.UUID; + +public class VelocityPlayerHandler implements PlayerHandler { + private final SkinsRestorer skinsRestorerApi; + + public VelocityPlayerHandler() { + this.skinsRestorerApi = SkinsRestorerProvider.get(); + } + + @Override + public Optional getPlayer(UUID playerUuid) { + return MinetraxVelocity.getPlugin().getProxyServer().getPlayer(playerUuid).map(player -> (Object) player); + } + + @Override + public void applySkin(Object player) { + if (player instanceof Player) { + try { + skinsRestorerApi.getSkinApplier(Player.class).applySkin((Player) player); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + + + +} diff --git a/velocity/src/main/java/com/xinecraft/minetrax/velocity/utils/VelocitySkinUtil.java b/velocity/src/main/java/com/xinecraft/minetrax/velocity/utils/VelocitySkinUtil.java new file mode 100644 index 0000000..db8a223 --- /dev/null +++ b/velocity/src/main/java/com/xinecraft/minetrax/velocity/utils/VelocitySkinUtil.java @@ -0,0 +1,68 @@ +package com.xinecraft.minetrax.velocity.utils; + +import com.velocitypowered.api.proxy.Player; +import com.xinecraft.minetrax.common.utils.CommonSkinUtil; +import com.xinecraft.minetrax.common.utils.LoggingUtil; +import com.xinecraft.minetrax.common.utils.PlayerHandler; +import com.xinecraft.minetrax.velocity.MinetraxVelocity; +import net.skinsrestorer.api.SkinsRestorer; +import net.skinsrestorer.api.SkinsRestorerProvider; +import net.skinsrestorer.api.property.SkinIdentifier; +import net.skinsrestorer.api.property.SkinProperty; +import net.skinsrestorer.api.storage.CacheStorage; +import net.skinsrestorer.api.storage.PlayerStorage; +import net.skinsrestorer.api.storage.SkinStorage; + +import java.util.Optional; +import java.util.UUID; + +public class VelocitySkinUtil { + private static final CommonSkinUtil commonSkinUtil = new CommonSkinUtil(SkinsRestorerProvider.get(), new VelocityPlayerHandler()); + + public static void setPlayerSkinUsingUrlOrName(String playerUuid, String value) { + commonSkinUtil.setPlayerSkinUsingUrlOrName(playerUuid, value); + } + + public static void setPlayerSkinUsingCustom(String playerUuid, String value) { + commonSkinUtil.setPlayerSkinUsingCustom(playerUuid, value); + } + + public static void clearPlayerSkin(String playerUuid) { + commonSkinUtil.clearPlayerSkin(playerUuid); + } + public static SkinProperty getSkinForPlayer(UUID playerUuid, String playerName) { + SkinsRestorer skinsRestorerAPI = SkinsRestorerProvider.get(); + PlayerStorage playerStorage = skinsRestorerAPI.getPlayerStorage(); + try { + Optional skin = playerStorage.getSkinForPlayer(playerUuid, playerName); + if (skin.isPresent()) { + return skin.get(); + } + } catch (Exception e) { + LoggingUtil.warntrace(e); + } + return null; + } + + public static SkinProperty getSkinOfPlayerFromCache(UUID playerUuid, String playerName) { + SkinsRestorer skinsRestorerApi = SkinsRestorerProvider.get(); + PlayerStorage playerStorage = skinsRestorerApi.getPlayerStorage(); + SkinStorage skinStorage = skinsRestorerApi.getSkinStorage(); + CacheStorage cacheStorage = skinsRestorerApi.getCacheStorage(); + try { + SkinIdentifier skinIdentifier; + Optional tempIdentifier = playerStorage.getSkinIdOfPlayer(playerUuid); + UUID cacheUuid = cacheStorage.getUUID(playerName, true).orElseGet(() -> playerUuid); + skinIdentifier = tempIdentifier.orElseGet(() -> SkinIdentifier.ofPlayer(cacheUuid)); + Optional skin = skinStorage.getSkinDataByIdentifier(skinIdentifier); + if (skin.isPresent()) { + return skin.get(); + } + } catch (Exception e) { + LoggingUtil.debug("[SkinUtil] Error getting cached skin for player: " + playerName + " : " + e.getMessage()); + } + return null; + } +} + + diff --git a/velocity/src/main/java/com/xinecraft/minetrax/velocity/webquery/VelocityWebQuery.java b/velocity/src/main/java/com/xinecraft/minetrax/velocity/webquery/VelocityWebQuery.java index b33639f..ae4b839 100644 --- a/velocity/src/main/java/com/xinecraft/minetrax/velocity/webquery/VelocityWebQuery.java +++ b/velocity/src/main/java/com/xinecraft/minetrax/velocity/webquery/VelocityWebQuery.java @@ -6,7 +6,7 @@ import com.velocitypowered.api.proxy.ProxyServer; import com.xinecraft.minetrax.common.interfaces.webquery.CommonWebQuery; import com.xinecraft.minetrax.velocity.MinetraxVelocity; -import com.xinecraft.minetrax.velocity.utils.SkinUtil; +import com.xinecraft.minetrax.velocity.utils.VelocitySkinUtil; import net.kyori.adventure.text.Component; import net.skinsrestorer.api.PropertyUtils; import net.skinsrestorer.api.property.SkinProperty; @@ -42,7 +42,7 @@ public String handleStatus() throws Exception { playerJsonObject.addProperty("ip_address", Objects.requireNonNull(player.getRemoteAddress()).getHostString()); if (this.plugin.getHasSkinsRestorer()) { - SkinProperty skin = SkinUtil.getSkinOfPlayerFromCache(player.getUniqueId(), player.getUsername()); + SkinProperty skin = VelocitySkinUtil.getSkinOfPlayerFromCache(player.getUniqueId(), player.getUsername()); if (skin != null) { playerJsonObject.addProperty("skin_texture_id", PropertyUtils.getSkinTextureUrlStripped(skin)); } @@ -116,13 +116,13 @@ public String handleSetPlayerSkin(String playerUuid, String commandType, String switch (commandType) { case "url": case "username": - SkinUtil.setPlayerSkinUsingUrlOrName(playerUuid, value); + VelocitySkinUtil.setPlayerSkinUsingUrlOrName(playerUuid, value); break; case "upload": - SkinUtil.setPlayerSkinUsingCustom(playerUuid, value); + VelocitySkinUtil.setPlayerSkinUsingCustom(playerUuid, value); break; case "clear": - SkinUtil.clearPlayerSkin(playerUuid); + VelocitySkinUtil.clearPlayerSkin(playerUuid); break; default: break;