Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Object> 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.");
}
}
}
}
Original file line number Diff line number Diff line change
@@ -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<InputDataResult> 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<InputDataResult> 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<SkinProperty> 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();
Expand All @@ -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<SkinProperty> 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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Object> 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();
}
}
}


}
Original file line number Diff line number Diff line change
@@ -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<SkinProperty> 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<SkinIdentifier> tempIdentifier = playerStorage.getSkinIdOfPlayer(playerUuid);
UUID cacheUuid = cacheStorage.getUUID(playerName, true).orElseGet(() -> playerUuid);
skinIdentifier = tempIdentifier.orElseGet(() -> SkinIdentifier.ofPlayer(cacheUuid));
Optional<SkinProperty> 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;
}
}


Loading