Skip to content

Commit ed0dfa9

Browse files
committed
Goodbye floodgate!
Removed dependency on floodgate's API, and now implement custom methods for both functions I was using (`isFloodgatePlayer` & `getXuid`) This is to make the `SkinProvider#load` method work even on offline players, which is of course very useful for my other plugin, BlueMapOfflinePlayerMarkers Also reverted back to previous method of logging, because the fancy, "proper" way doesn't actually work...
1 parent 26641db commit ed0dfa9

File tree

2 files changed

+23
-35
lines changed

2 files changed

+23
-35
lines changed

pom.xml

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.technicjelle</groupId>
88
<artifactId>BlueMapFloodgate</artifactId>
9-
<version>2.0.0</version>
9+
<version>3</version>
1010
<packaging>jar</packaging>
1111

1212
<name>BlueMapFloodgate</name>
@@ -75,14 +75,6 @@
7575
<id>jitpack.io</id>
7676
<url>https://jitpack.io</url>
7777
</repository>
78-
<repository>
79-
<id>opencollab-snapshot</id>
80-
<url>https://repo.opencollab.dev/maven-snapshots/</url>
81-
</repository>
82-
<!-- <repository>-->
83-
<!-- <id>opencollab-release</id>-->
84-
<!-- <url>https://repo.opencollab.dev/maven-releases/</url>-->
85-
<!-- </repository>-->
8678
</repositories>
8779

8880
<dependencies>
@@ -98,12 +90,6 @@
9890
<version>v2.4.0</version>
9991
<scope>provided</scope>
10092
</dependency>
101-
<dependency>
102-
<groupId>org.geysermc.floodgate</groupId>
103-
<artifactId>api</artifactId>
104-
<version>2.2.0-SNAPSHOT</version>
105-
<scope>provided</scope>
106-
</dependency>
10793
<dependency>
10894
<groupId>org.bstats</groupId>
10995
<artifactId>bstats-bukkit</artifactId>

src/main/java/com/technicjelle/bluemapfloodgate/Main.java

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
import de.bluecolored.bluemap.api.plugin.SkinProvider;
88
import org.bstats.bukkit.Metrics;
99
import org.bukkit.plugin.java.JavaPlugin;
10-
import org.geysermc.floodgate.api.FloodgateApi;
11-
import org.geysermc.floodgate.api.player.FloodgatePlayer;
1210
import org.jetbrains.annotations.NotNull;
1311
import org.jetbrains.annotations.Nullable;
1412

@@ -23,9 +21,10 @@
2321
import java.util.Optional;
2422
import java.util.UUID;
2523
import java.util.function.Consumer;
24+
import java.util.logging.Level;
2625

2726
public final class Main extends JavaPlugin {
28-
private final boolean VERBOSE_LOGGING = false;
27+
private final boolean VERBOSE_LOGGING = true;
2928
private void verboseLog(String message) {
3029
if (VERBOSE_LOGGING) getLogger().info(message);
3130
}
@@ -41,22 +40,20 @@ public void onEnable() {
4140

4241
private final Consumer<BlueMapAPI> blueMapOnEnableListener = blueMapAPI -> {
4342
SkinProvider floodgateSkinProvider = new SkinProvider() {
44-
private final FloodgateApi floodgateApi = FloodgateApi.getInstance();
4543
private final SkinProvider defaultSkinProvider = blueMapAPI.getPlugin().getSkinProvider();
4644

4745
@Override
4846
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);
5249
@Nullable String textureID = textureIDFromXUID(xuid);
5350
if (textureID == null) {
54-
verboseLog("TextureID for " + playerUUID + " is null");
51+
getLogger().warning("TextureID for " + playerUUID + " is null");
5552
return Optional.empty();
5653
}
5754
@Nullable BufferedImage skin = skinFromTextureID(textureID);
5855
if (skin == null) {
59-
verboseLog("Skin for " + playerUUID + " is null");
56+
getLogger().warning("Skin for " + playerUUID + " is null");
6057
return Optional.empty();
6158
}
6259
verboseLog("Skin for " + playerUUID + " successfully gotten!");
@@ -68,7 +65,6 @@ public Optional<BufferedImage> load(UUID playerUUID) throws IOException {
6865
};
6966

7067
blueMapAPI.getPlugin().setSkinProvider(floodgateSkinProvider);
71-
7268
};
7369

7470
@Override
@@ -82,11 +78,19 @@ public void onDisable() {
8278
// ===============================================Util Methods=====================================================
8379
// ================================================================================================================
8480

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+
8589
/**
8690
* @param xuid XUID of the floodgate player
8791
* @return the texture ID of the player, or null if it could not be found
8892
*/
89-
private @Nullable String textureIDFromXUID(@NotNull String xuid) {
93+
private @Nullable String textureIDFromXUID(long xuid) {
9094
try {
9195
URL url = new URL("https://api.geysermc.org/v2/skin/" + xuid);
9296
verboseLog("Getting textureID from " + url);
@@ -96,30 +100,29 @@ public void onDisable() {
96100

97101
JsonObject joRoot = JsonParser.parseReader(new InputStreamReader((InputStream) request.getContent())).getAsJsonObject();
98102
if (joRoot == null) {
99-
verboseLog("joRoot is null!");
103+
getLogger().log(Level.WARNING, "joRoot is null!");
100104
return null;
101105
}
102106

103107
JsonElement jeTextureID = joRoot.get("texture_id");
104108
if (jeTextureID == null) {
105-
verboseLog("jeTextureID is null!");
109+
getLogger().log(Level.WARNING, "jeTextureID is null!");
106110
return null;
107111
}
108112

109113
String textureID = jeTextureID.getAsString();
110114
if (textureID == null) {
111-
verboseLog("textureID is null!");
115+
getLogger().log(Level.WARNING, "textureID is null!");
112116
return null;
113117
}
114118

115119
return textureID;
116120
} 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);
119122
return null;
120123
}
121124
} catch (MalformedURLException e) {
122-
e.printStackTrace();
125+
getLogger().log(Level.SEVERE, "Geyser API URL is malformed", e);
123126
return null;
124127
}
125128
}
@@ -147,12 +150,11 @@ public void onDisable() {
147150
result = ImageIO.read(in);
148151
in.close();
149152
} 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);
152154
return null;
153155
}
154156
} catch (MalformedURLException e) {
155-
e.printStackTrace();
157+
getLogger().log(Level.SEVERE, "URL is malformed: " + url, e);
156158
return null;
157159
}
158160
return result;

0 commit comments

Comments
 (0)