7
7
import de .bluecolored .bluemap .api .plugin .SkinProvider ;
8
8
import org .bstats .bukkit .Metrics ;
9
9
import org .bukkit .plugin .java .JavaPlugin ;
10
- import org .geysermc .floodgate .api .FloodgateApi ;
11
- import org .geysermc .floodgate .api .player .FloodgatePlayer ;
12
10
import org .jetbrains .annotations .NotNull ;
13
11
import org .jetbrains .annotations .Nullable ;
14
12
23
21
import java .util .Optional ;
24
22
import java .util .UUID ;
25
23
import java .util .function .Consumer ;
24
+ import java .util .logging .Level ;
26
25
27
26
public final class Main extends JavaPlugin {
28
- private final boolean VERBOSE_LOGGING = false ;
27
+ private final boolean VERBOSE_LOGGING = true ;
29
28
private void verboseLog (String message ) {
30
29
if (VERBOSE_LOGGING ) getLogger ().info (message );
31
30
}
@@ -41,22 +40,20 @@ public void onEnable() {
41
40
42
41
private final Consumer <BlueMapAPI > blueMapOnEnableListener = blueMapAPI -> {
43
42
SkinProvider floodgateSkinProvider = new SkinProvider () {
44
- private final FloodgateApi floodgateApi = FloodgateApi .getInstance ();
45
43
private final SkinProvider defaultSkinProvider = blueMapAPI .getPlugin ().getSkinProvider ();
46
44
47
45
@ Override
48
46
public Optional <BufferedImage > load (UUID playerUUID ) throws IOException {
49
- if (floodgateApi .isFloodgatePlayer (playerUUID )) {
50
- FloodgatePlayer floodgatePlayer = floodgateApi .getPlayer (playerUUID );
51
- String xuid = floodgatePlayer .getXuid ();
47
+ if (isFloodgatePlayer (playerUUID )) {
48
+ long xuid = getXuid (playerUUID );
52
49
@ Nullable String textureID = textureIDFromXUID (xuid );
53
50
if (textureID == null ) {
54
- verboseLog ("TextureID for " + playerUUID + " is null" );
51
+ getLogger (). warning ("TextureID for " + playerUUID + " is null" );
55
52
return Optional .empty ();
56
53
}
57
54
@ Nullable BufferedImage skin = skinFromTextureID (textureID );
58
55
if (skin == null ) {
59
- verboseLog ("Skin for " + playerUUID + " is null" );
56
+ getLogger (). warning ("Skin for " + playerUUID + " is null" );
60
57
return Optional .empty ();
61
58
}
62
59
verboseLog ("Skin for " + playerUUID + " successfully gotten!" );
@@ -68,7 +65,6 @@ public Optional<BufferedImage> load(UUID playerUUID) throws IOException {
68
65
};
69
66
70
67
blueMapAPI .getPlugin ().setSkinProvider (floodgateSkinProvider );
71
-
72
68
};
73
69
74
70
@ Override
@@ -82,11 +78,19 @@ public void onDisable() {
82
78
// ===============================================Util Methods=====================================================
83
79
// ================================================================================================================
84
80
81
+ private boolean isFloodgatePlayer (UUID playerUUID ) {
82
+ return playerUUID .version () == 0 ;
83
+ }
84
+
85
+ private long getXuid (UUID playerUUID ) {
86
+ return playerUUID .getLeastSignificantBits ();
87
+ }
88
+
85
89
/**
86
90
* @param xuid XUID of the floodgate player
87
91
* @return the texture ID of the player, or null if it could not be found
88
92
*/
89
- private @ Nullable String textureIDFromXUID (@ NotNull String xuid ) {
93
+ private @ Nullable String textureIDFromXUID (long xuid ) {
90
94
try {
91
95
URL url = new URL ("https://api.geysermc.org/v2/skin/" + xuid );
92
96
verboseLog ("Getting textureID from " + url );
@@ -96,30 +100,29 @@ public void onDisable() {
96
100
97
101
JsonObject joRoot = JsonParser .parseReader (new InputStreamReader ((InputStream ) request .getContent ())).getAsJsonObject ();
98
102
if (joRoot == null ) {
99
- verboseLog ( "joRoot is null!" );
103
+ getLogger (). log ( Level . WARNING , "joRoot is null!" );
100
104
return null ;
101
105
}
102
106
103
107
JsonElement jeTextureID = joRoot .get ("texture_id" );
104
108
if (jeTextureID == null ) {
105
- verboseLog ( "jeTextureID is null!" );
109
+ getLogger (). log ( Level . WARNING , "jeTextureID is null!" );
106
110
return null ;
107
111
}
108
112
109
113
String textureID = jeTextureID .getAsString ();
110
114
if (textureID == null ) {
111
- verboseLog ( "textureID is null!" );
115
+ getLogger (). log ( Level . WARNING , "textureID is null!" );
112
116
return null ;
113
117
}
114
118
115
119
return textureID ;
116
120
} catch (IOException e ) {
117
- getLogger ().warning ("Failed to get the textureID for " + xuid + " from " + url );
118
- e .printStackTrace ();
121
+ getLogger ().log (Level .WARNING , "Failed to get the textureID for " + xuid + " from " + url , e );
119
122
return null ;
120
123
}
121
124
} catch (MalformedURLException e ) {
122
- e . printStackTrace ( );
125
+ getLogger (). log ( Level . SEVERE , "Geyser API URL is malformed" , e );
123
126
return null ;
124
127
}
125
128
}
@@ -147,12 +150,11 @@ public void onDisable() {
147
150
result = ImageIO .read (in );
148
151
in .close ();
149
152
} catch (IOException e ) {
150
- getLogger ().warning ("Failed to get the image from " + url );
151
- e .printStackTrace ();
153
+ getLogger ().log (Level .SEVERE , "Failed to get the image from " + url , e );
152
154
return null ;
153
155
}
154
156
} catch (MalformedURLException e ) {
155
- e . printStackTrace ( );
157
+ getLogger (). log ( Level . SEVERE , "URL is malformed: " + url , e );
156
158
return null ;
157
159
}
158
160
return result ;
0 commit comments