Skip to content

Commit 9f24ddb

Browse files
committed
Update users API & support SkinRestorer v15
Closes #32
1 parent 78f717f commit 9f24ddb

File tree

10 files changed

+63
-24
lines changed

10 files changed

+63
-24
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
allprojects {
22
group 'com.azuriom'
3-
version '1.3.2'
3+
version '1.3.3'
44
}
55

66
subprojects {

bukkit/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ dependencies {
1111
compileOnly 'io.netty:netty-all:4.1.25.Final'
1212
compileOnly 'fr.xephi:authme:5.6.0-beta2'
1313
compileOnly 'me.clip:placeholderapi:2.11.1'
14-
compileOnly 'net.skinsrestorer:skinsrestorer-api:14.2.3'
14+
compileOnly 'net.skinsrestorer:skinsrestorer-api:15.0.2'
1515
}
1616

1717
// Folia is compiled with Java 17

bukkit/src/main/java/com/azuriom/azlink/bukkit/AzLinkBukkitPlugin.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,13 @@ && getServer().getPluginManager().getPlugin("AuthMe") != null) {
8787

8888
if (getConfig().getBoolean("skinrestorer-integration")
8989
&& getServer().getPluginManager().getPlugin("SkinsRestorer") != null) {
90-
getServer().getPluginManager().registerEvents(new SkinRestorerIntegration(this), this);
90+
try {
91+
Class.forName("net.skinsrestorer.api.SkinsRestorer");
92+
93+
getServer().getPluginManager().registerEvents(new SkinRestorerIntegration(this), this);
94+
} catch (ClassNotFoundException e) {
95+
getLogger().severe("SkinsRestorer integration requires SkinsRestorer v15.0.0 or higher");
96+
}
9197
}
9298

9399
if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {

bukkit/src/main/java/com/azuriom/azlink/bukkit/injector/NettyLibraryLoader.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,11 @@ private void loadLibrary(String groupId, String artifactId, String version) thro
6262
}
6363

6464
URL[] urls = {jar.toUri().toURL()};
65-
ClassLoader pluginClassLoader = plugin.getClass().getClassLoader();
66-
Field classLoaderField = pluginClassLoader.getClass().getDeclaredField("libraryLoader");
67-
ClassLoader libraryLoader = new URLClassLoader(urls, pluginClassLoader.getParent());
65+
ClassLoader classLoader = plugin.getClass().getClassLoader();
66+
Field classLoaderField = classLoader.getClass().getDeclaredField("libraryLoader");
6867

6968
classLoaderField.setAccessible(true);
70-
classLoaderField.set(pluginClassLoader, libraryLoader);
69+
classLoaderField.set(classLoader, new URLClassLoader(urls, classLoader.getParent()));
7170
}
7271

7372
private String identifyNettyVersion() {

bukkit/src/main/java/com/azuriom/azlink/bukkit/integrations/SkinRestorerIntegration.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
package com.azuriom.azlink.bukkit.integrations;
22

33
import com.azuriom.azlink.bukkit.AzLinkBukkitPlugin;
4-
import net.skinsrestorer.api.PlayerWrapper;
5-
import net.skinsrestorer.api.SkinsRestorerAPI;
6-
import net.skinsrestorer.api.exception.SkinRequestException;
7-
import net.skinsrestorer.api.property.IProperty;
4+
import net.skinsrestorer.api.SkinsRestorer;
5+
import net.skinsrestorer.api.SkinsRestorerProvider;
6+
import net.skinsrestorer.api.connections.model.MineSkinResponse;
7+
import net.skinsrestorer.api.exception.DataRequestException;
8+
import net.skinsrestorer.api.exception.MineSkinException;
89
import org.bukkit.entity.Player;
910
import org.bukkit.event.EventHandler;
1011
import org.bukkit.event.Listener;
1112
import org.bukkit.event.player.PlayerJoinEvent;
1213

1314
public class SkinRestorerIntegration implements Listener {
1415

16+
private final SkinsRestorer skinsRestorer;
1517
private final AzLinkBukkitPlugin plugin;
1618

1719
public SkinRestorerIntegration(AzLinkBukkitPlugin plugin) {
1820
this.plugin = plugin;
21+
this.skinsRestorer = SkinsRestorerProvider.get();
1922

2023
this.plugin.getLoggerAdapter().info("SkinRestorer integration enabled.");
2124
}
@@ -32,10 +35,10 @@ public void onPlayerJoin(PlayerJoinEvent e) {
3235

3336
try {
3437
String url = baseUrl + "/api/skin-api/skins/" + player.getName();
35-
IProperty skin = SkinsRestorerAPI.getApi().genSkinUrl(url, null);
38+
MineSkinResponse skin = this.skinsRestorer.getMineSkinAPI().genSkin(url, null);
3639

37-
SkinsRestorerAPI.getApi().applySkin(new PlayerWrapper(player), skin);
38-
} catch (SkinRequestException ex) {
40+
this.skinsRestorer.getSkinApplier(Player.class).applySkin(player, skin.getProperty());
41+
} catch (DataRequestException | MineSkinException ex) {
3942
this.plugin.getLoggerAdapter().warn("Unable to apply skin for " + player.getName() + ": " + ex.getMessage());
4043
}
4144
}

common/src/main/java/com/azuriom/azlink/common/command/AzLinkCommand.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.azuriom.azlink.common.AzLinkPlugin;
44
import com.azuriom.azlink.common.data.UserInfo;
5+
import com.azuriom.azlink.common.users.MoneyAction;
56

67
import java.io.IOException;
78
import java.util.Arrays;
@@ -14,7 +15,6 @@
1415
public class AzLinkCommand {
1516

1617
private static final List<String> COMPLETIONS = Arrays.asList("status", "setup", "fetch", "money", "port");
17-
private static final List<String> MONEY_ACTIONS = Arrays.asList("add", "remove", "set");
1818

1919
protected final AzLinkPlugin plugin;
2020

@@ -123,7 +123,8 @@ public List<String> tabComplete(CommandSender sender, String[] args) {
123123
}
124124

125125
if (args.length == 2 && args[0].equalsIgnoreCase("money")) {
126-
return MONEY_ACTIONS.stream()
126+
return Arrays.stream(MoneyAction.values())
127+
.map(Enum::toString)
127128
.filter(s -> startsWithIgnoreCase(s, args[1]))
128129
.collect(Collectors.toList());
129130
}
@@ -139,12 +140,13 @@ public List<String> tabComplete(CommandSender sender, String[] args) {
139140
}
140141

141142
public void editMoney(CommandSender sender, String[] args) throws NumberFormatException {
142-
if (args.length < 4 || !MONEY_ACTIONS.contains(args[1].toLowerCase())) {
143+
MoneyAction action;
144+
145+
if (args.length < 4 || (action = MoneyAction.fromString(args[1])) == null) {
143146
sender.sendMessage("&cUsage: /azlink money <add|remove|set> <player> <amount>");
144147
return;
145148
}
146149

147-
String action = args[1].toLowerCase();
148150
double amount = Double.parseDouble(args[3]);
149151
Optional<UserInfo> user = this.plugin.getUserManager().getUserByName(args[2]);
150152

common/src/main/java/com/azuriom/azlink/common/http/client/HttpClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
public class HttpClient {
2323

2424
private static final int CONNECT_TIMEOUT = 5000; // 5 seconds
25-
private static final int REQUEST_TIMEOUT = 1000; // 1 second
25+
private static final int READ_TIMEOUT = 5000; // 5 seconds
2626

2727
private final AzLinkPlugin plugin;
2828

@@ -133,7 +133,7 @@ private HttpURLConnection prepareConnection(RequestMethod method, String endpoin
133133
conn.setUseCaches(false);
134134
conn.setInstanceFollowRedirects(true);
135135
conn.setConnectTimeout(CONNECT_TIMEOUT);
136-
conn.setReadTimeout(REQUEST_TIMEOUT);
136+
conn.setReadTimeout(READ_TIMEOUT);
137137
conn.setRequestMethod(method.name());
138138
conn.addRequestProperty("Azuriom-Link-Token", token);
139139
conn.addRequestProperty("Content-Type", "application/json; charset=utf-8");

common/src/main/java/com/azuriom/azlink/common/tasks/FetcherTask.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.time.Instant;
99
import java.time.LocalDateTime;
1010
import java.util.List;
11+
import java.util.Locale;
1112
import java.util.Map;
1213
import java.util.concurrent.CompletableFuture;
1314
import java.util.concurrent.Executor;
@@ -83,7 +84,7 @@ private void dispatchCommands(Map<String, List<String>> commands) {
8384

8485
Map<String, CommandSender> players = this.plugin.getPlatform()
8586
.getOnlinePlayers()
86-
.collect(Collectors.toMap(cs -> cs.getName().toLowerCase(), p -> p, (p1, p2) -> {
87+
.collect(Collectors.toMap(cs -> cs.getName().toLowerCase(Locale.ROOT), p -> p, (p1, p2) -> {
8788
String player1 = p1.getName() + " (" + p1.getUuid() + ')';
8889
String player2 = p2.getName() + " (" + p2.getUuid() + ')';
8990
this.plugin.getLogger().warn("Duplicate players names: " + player1 + " / " + player2);
@@ -92,7 +93,7 @@ private void dispatchCommands(Map<String, List<String>> commands) {
9293

9394
for (Map.Entry<String, List<String>> entry : commands.entrySet()) {
9495
String playerName = entry.getKey();
95-
CommandSender player = players.get(playerName.toLowerCase());
96+
CommandSender player = players.get(playerName.toLowerCase(Locale.ROOT));
9697

9798
if (player != null) {
9899
playerName = player.getName();
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.azuriom.azlink.common.users;
2+
3+
import java.util.Locale;
4+
5+
public enum MoneyAction {
6+
ADD, REMOVE, SET;
7+
8+
@Override
9+
public String toString() {
10+
return name().toLowerCase(Locale.ROOT);
11+
}
12+
13+
public static MoneyAction fromString(String action) {
14+
try {
15+
return MoneyAction.valueOf(action.toUpperCase(Locale.ROOT));
16+
} catch (IllegalArgumentException e) {
17+
return null;
18+
}
19+
}
20+
}

common/src/main/java/com/azuriom/azlink/common/users/UserManager.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,19 @@ public void addUser(UserInfo user) {
2525
this.usersByName.put(user.getName(), user);
2626
}
2727

28-
public CompletableFuture<UserInfo> editMoney(UserInfo user, String action, double amount) {
29-
return this.plugin.getHttpClient().editMoney(user, action, amount)
28+
public CompletableFuture<UserInfo> editMoney(UserInfo user, MoneyAction action, double amount) {
29+
return this.plugin.getHttpClient().editMoney(user, action.toString(), amount)
3030
.thenApply(result -> {
3131
user.setMoney(result.getNewBalance());
3232
return user;
3333
});
3434
}
35+
36+
/**
37+
* @deprecated Use {@link #editMoney(UserInfo, MoneyAction, double)} instead.
38+
*/
39+
@Deprecated
40+
public CompletableFuture<UserInfo> editMoney(UserInfo user, String action, double amount) {
41+
return editMoney(user, MoneyAction.valueOf(action.toUpperCase()), amount);
42+
}
3543
}

0 commit comments

Comments
 (0)