From 7a5abd32c820d9a28dd53017c7a1e76871b4cfdf Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 13 Jun 2022 23:37:34 -0400 Subject: [PATCH] Support 1.17+ --- pom.xml | 4 +- .../java/codes/wasabi/xclaim/api/Claim.java | 4 +- .../wasabi/xclaim/api/MovementRoutine.java | 2 +- .../codes/wasabi/xclaim/api/XCPlayer.java | 226 ++---------------- .../xclaim/api/dynmap/DynmapInterface.java | 6 +- .../xclaim/command/sub/CurrentCommand.java | 4 +- .../codes/wasabi/xclaim/gui/ChunkEditor.java | 10 +- .../xclaim/gui/page/ClaimSelectorPage.java | 3 +- .../xclaim/gui/page/PermissionPage.java | 2 +- .../xclaim/gui/page/PlayerCombinatorPage.java | 7 +- .../wasabi/xclaim/gui/page/TransferPage.java | 5 +- .../xclaim/gui/page/VersionInfoPage.java | 2 +- .../codes/wasabi/xclaim/util/AutoUpdater.java | 13 +- .../wasabi/xclaim/util/NameToPlayer.java | 64 +++++ src/main/resources/plugin.yml | 2 +- 15 files changed, 120 insertions(+), 234 deletions(-) create mode 100644 src/main/java/codes/wasabi/xclaim/util/NameToPlayer.java diff --git a/pom.xml b/pom.xml index 8ab3d11..be5dd54 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ codes.wasabi xclaim - 1.3.1 + 1.4.0 jar XClaim @@ -76,7 +76,7 @@ io.papermc.paper paper-api - 1.19-R0.1-SNAPSHOT + 1.17-R0.1-SNAPSHOT provided diff --git a/src/main/java/codes/wasabi/xclaim/api/Claim.java b/src/main/java/codes/wasabi/xclaim/api/Claim.java index 0952eb1..eb3b4f9 100644 --- a/src/main/java/codes/wasabi/xclaim/api/Claim.java +++ b/src/main/java/codes/wasabi/xclaim/api/Claim.java @@ -141,7 +141,7 @@ public class Claim { } players.put(uuid, set); } - return new Claim(name, chunks, new XCPlayer(owner), global, players); + return new Claim(name, chunks, XCPlayer.of(owner), global, players); } private String name; @@ -390,7 +390,7 @@ public boolean hasPermission(@NotNull OfflinePlayer player, @NotNull Permission public void serialize(@NotNull ConfigurationSection section) { section.set("name", name); - section.set("owner", owner.getOfflinePlayer().getUniqueId().toString()); + section.set("owner", owner.getUniqueId().toString()); section.set("world", ""); ConfigurationSection sec; sec = section.getConfigurationSection("chunks"); diff --git a/src/main/java/codes/wasabi/xclaim/api/MovementRoutine.java b/src/main/java/codes/wasabi/xclaim/api/MovementRoutine.java index d94d1e0..1d41296 100644 --- a/src/main/java/codes/wasabi/xclaim/api/MovementRoutine.java +++ b/src/main/java/codes/wasabi/xclaim/api/MovementRoutine.java @@ -72,7 +72,7 @@ public void onMove(@NotNull PlayerMoveEvent event) { Player ply = event.getPlayer(); if (toSet) { if (!toClaim.equals(fromClaim)) { - OfflinePlayer claimOwner = toClaim.getOwner(); + XCPlayer claimOwner = toClaim.getOwner(); Player online = claimOwner.getPlayer(); Component name; if (online != null) { diff --git a/src/main/java/codes/wasabi/xclaim/api/XCPlayer.java b/src/main/java/codes/wasabi/xclaim/api/XCPlayer.java index e0aec42..26f9fba 100644 --- a/src/main/java/codes/wasabi/xclaim/api/XCPlayer.java +++ b/src/main/java/codes/wasabi/xclaim/api/XCPlayer.java @@ -3,16 +3,14 @@ import codes.wasabi.xclaim.XClaim; import org.bukkit.*; import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; -import org.bukkit.profile.PlayerProfile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.stream.Stream; -public class XCPlayer implements OfflinePlayer { +public class XCPlayer { public static @NotNull XCPlayer of(@NotNull OfflinePlayer ply) { if (ply instanceof XCPlayer xcp) return xcp; @@ -22,14 +20,21 @@ public class XCPlayer implements OfflinePlayer { private final String uuidString; private final OfflinePlayer op; - XCPlayer(@NotNull UUID uuid) { + protected XCPlayer(@NotNull UUID uuid) { uuidString = uuid.toString(); op = Bukkit.getOfflinePlayer(uuid); } - XCPlayer(@NotNull OfflinePlayer ply) { - uuidString = ply.getUniqueId().toString(); - op = ply; + protected XCPlayer(@NotNull OfflinePlayer ply) { + this(ply.getUniqueId()); + } + + public @NotNull OfflinePlayer getOfflinePlayer() { + return op; + } + + public @Nullable Player getPlayer() { + return op.getPlayer(); } public boolean trustPlayer(@NotNull OfflinePlayer player) { @@ -60,10 +65,6 @@ public boolean playerTrusted(@NotNull OfflinePlayer player) { return false; } - public @NotNull OfflinePlayer getOfflinePlayer() { - return op; - } - private @NotNull List getCurrentTrustedPlayers() { List entries = XClaim.trustConfig.getList(uuidString, new ArrayList()); List ret = new ArrayList<>(); @@ -182,7 +183,7 @@ public boolean remove(Object o) { @Override public boolean containsAll(@NotNull Collection c) { - return getCurrentTrustedPlayers().containsAll(c); + return new HashSet<>(getCurrentTrustedPlayers()).containsAll(c); } @Override @@ -308,209 +309,12 @@ public String toString() { return "XCPlayer[uuid=" + op.getUniqueId() + "]"; } - @Override - public boolean isOnline() { - return op.isOnline(); - } - - @Override - public @Nullable String getName() { - return op.getName(); - } - - @Override public @NotNull UUID getUniqueId() { return op.getUniqueId(); } - @Override - public @NotNull PlayerProfile getPlayerProfile() { - return op.getPlayerProfile(); - } - - @Override - public boolean isBanned() { - return op.isBanned(); - } - - @Override - public boolean isWhitelisted() { - return op.isWhitelisted(); - } - - @Override - public void setWhitelisted(boolean value) { - op.setWhitelisted(value); - } - - @Override - public @Nullable Player getPlayer() { - return op.getPlayer(); - } - - @Override - public long getFirstPlayed() { - return op.getFirstPlayed(); - } - - @Override - public long getLastPlayed() { - return op.getLastPlayed(); - } - - @Override - public boolean hasPlayedBefore() { - return op.hasPlayedBefore(); - } - - @Override - public @Nullable Location getBedSpawnLocation() { - return op.getBedSpawnLocation(); - } - - @Override - public long getLastLogin() { - return op.getLastLogin(); - } - - @Override - public long getLastSeen() { - return op.getLastSeen(); - } - - @Override - public void incrementStatistic(@NotNull Statistic statistic) throws IllegalArgumentException { - op.incrementStatistic(statistic); - } - - @Override - public void decrementStatistic(@NotNull Statistic statistic) throws IllegalArgumentException { - op.decrementStatistic(statistic); - } - - @Override - public void incrementStatistic(@NotNull Statistic statistic, int amount) throws IllegalArgumentException { - op.incrementStatistic(statistic, amount); - } - - @Override - public void decrementStatistic(@NotNull Statistic statistic, int amount) throws IllegalArgumentException { - op.decrementStatistic(statistic, amount); - } - - @Override - public void setStatistic(@NotNull Statistic statistic, int newValue) throws IllegalArgumentException { - op.setStatistic(statistic, newValue); - } - - @Override - public int getStatistic(@NotNull Statistic statistic) throws IllegalArgumentException { - return op.getStatistic(statistic); - } - - @Override - public void incrementStatistic(@NotNull Statistic statistic, @NotNull Material material) throws IllegalArgumentException { - op.incrementStatistic(statistic, material); - } - - @Override - public void decrementStatistic(@NotNull Statistic statistic, @NotNull Material material) throws IllegalArgumentException { - op.decrementStatistic(statistic, material); - } - - @Override - public int getStatistic(@NotNull Statistic statistic, @NotNull Material material) throws IllegalArgumentException { - return op.getStatistic(statistic, material); - } - - @Override - public void incrementStatistic(@NotNull Statistic statistic, @NotNull Material material, int amount) throws IllegalArgumentException { - op.incrementStatistic(statistic, material, amount); - } - - @Override - public void decrementStatistic(@NotNull Statistic statistic, @NotNull Material material, int amount) throws IllegalArgumentException { - op.decrementStatistic(statistic, material, amount); - } - - @Override - public void setStatistic(@NotNull Statistic statistic, @NotNull Material material, int newValue) throws IllegalArgumentException { - op.setStatistic(statistic, material, newValue); - } - - @Override - public void incrementStatistic(@NotNull Statistic statistic, @NotNull EntityType entityType) throws IllegalArgumentException { - op.incrementStatistic(statistic, entityType); - } - - @Override - public void decrementStatistic(@NotNull Statistic statistic, @NotNull EntityType entityType) throws IllegalArgumentException { - op.decrementStatistic(statistic, entityType); - } - - @Override - public int getStatistic(@NotNull Statistic statistic, @NotNull EntityType entityType) throws IllegalArgumentException { - return op.getStatistic(statistic, entityType); - } - - @Override - public void incrementStatistic(@NotNull Statistic statistic, @NotNull EntityType entityType, int amount) throws IllegalArgumentException { - op.incrementStatistic(statistic, entityType, amount); - } - - @Override - public void decrementStatistic(@NotNull Statistic statistic, @NotNull EntityType entityType, int amount) { - op.decrementStatistic(statistic, entityType, amount); - } - - @Override - public void setStatistic(@NotNull Statistic statistic, @NotNull EntityType entityType, int newValue) { - op.setStatistic(statistic, entityType, newValue); - } - - @Override - public @Nullable Location getLastDeathLocation() { - return op.getLastDeathLocation(); - } - - @Override - public @NotNull Map serialize() { - return op.serialize(); - } - - @Override - public boolean isOp() { - return op.isOp(); - } - - @Override - public void setOp(boolean value) { - op.setOp(value); - } - - @Override - public @NotNull BanEntry banPlayer(@Nullable String reason) { - return op.banPlayer(reason); - } - - @Override - public @NotNull BanEntry banPlayer(@Nullable String reason, @Nullable String source) { - return op.banPlayer(reason, source); - } - - @Override - public @NotNull BanEntry banPlayer(@Nullable String reason, @Nullable Date expires) { - return op.banPlayer(reason, expires); - } - - @Override - public @NotNull BanEntry banPlayer(@Nullable String reason, @Nullable Date expires, @Nullable String source) { - return op.banPlayer(reason, expires, source); - } - - @Override - public @NotNull BanEntry banPlayer(@Nullable String reason, @Nullable Date expires, @Nullable String source, boolean kickIfOnline) { - return op.banPlayer(reason, expires, source, kickIfOnline); + public @Nullable String getName() { + return op.getName(); } } diff --git a/src/main/java/codes/wasabi/xclaim/api/dynmap/DynmapInterface.java b/src/main/java/codes/wasabi/xclaim/api/dynmap/DynmapInterface.java index fe0ffaf..69f1620 100644 --- a/src/main/java/codes/wasabi/xclaim/api/dynmap/DynmapInterface.java +++ b/src/main/java/codes/wasabi/xclaim/api/dynmap/DynmapInterface.java @@ -2,12 +2,12 @@ import codes.wasabi.xclaim.XClaim; import codes.wasabi.xclaim.api.Claim; +import codes.wasabi.xclaim.api.XCPlayer; import codes.wasabi.xclaim.api.dynmap.outline.ChunkBitmap; import codes.wasabi.xclaim.api.dynmap.outline.Point; import codes.wasabi.xclaim.util.ColorUtil; import codes.wasabi.xclaim.util.hull.ConvexHull; import org.bukkit.Chunk; -import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.block.Block; import org.dynmap.bukkit.DynmapPlugin; @@ -36,8 +36,8 @@ public String getVersion() { private final Map colorMap = new HashMap<>(); public @NotNull Color getClaimColor(@NotNull Claim claim) { - OfflinePlayer op = claim.getOwner(); - UUID uuid = op.getUniqueId(); + XCPlayer ply = claim.getOwner(); + UUID uuid = ply.getUniqueId(); Color color = colorMap.get(uuid); if (color == null) { color = ColorUtil.uuidToColor(uuid); diff --git a/src/main/java/codes/wasabi/xclaim/command/sub/CurrentCommand.java b/src/main/java/codes/wasabi/xclaim/command/sub/CurrentCommand.java index 8c3f87f..1f949bd 100644 --- a/src/main/java/codes/wasabi/xclaim/command/sub/CurrentCommand.java +++ b/src/main/java/codes/wasabi/xclaim/command/sub/CurrentCommand.java @@ -1,12 +1,12 @@ package codes.wasabi.xclaim.command.sub; import codes.wasabi.xclaim.api.Claim; +import codes.wasabi.xclaim.api.XCPlayer; import codes.wasabi.xclaim.command.Command; import codes.wasabi.xclaim.command.argument.Argument; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Location; -import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -56,7 +56,7 @@ public void execute(@NotNull CommandSender sender, @NotNull Object @NotNull ... return; } Component ownerName; - OfflinePlayer owner = claim.getOwner(); + XCPlayer owner = claim.getOwner(); Player player = owner.getPlayer(); if (player != null) { ownerName = player.displayName(); diff --git a/src/main/java/codes/wasabi/xclaim/gui/ChunkEditor.java b/src/main/java/codes/wasabi/xclaim/gui/ChunkEditor.java index 88102ae..71e630d 100644 --- a/src/main/java/codes/wasabi/xclaim/gui/ChunkEditor.java +++ b/src/main/java/codes/wasabi/xclaim/gui/ChunkEditor.java @@ -232,7 +232,7 @@ public void onLeave(@NotNull PlayerQuitEvent event) { @EventHandler(priority = EventPriority.HIGHEST) public void onDeath(@NotNull PlayerDeathEvent event) { - Player ply = event.getPlayer(); + Player ply = event.getEntity(); if (stopEditing(ply)) { boolean keepInventory = false; Boolean value = ply.getWorld().getGameRuleValue(GameRule.KEEP_INVENTORY); @@ -263,9 +263,9 @@ public void onMove(@NotNull PlayerMoveEvent event) { } else { Claim cl = Claim.getByChunk(toChunk); if (cl != null) { - OfflinePlayer op = cl.getOwner().getOfflinePlayer(); - ownerName = Objects.requireNonNullElse(op.getName(), "Unknown"); - ownState = (op.getUniqueId().equals(ply.getUniqueId()) ? 2 : 3); + XCPlayer xcp = cl.getOwner(); + ownerName = Objects.requireNonNullElse(xcp.getName(), "Unknown"); + ownState = (xcp.getUniqueId().equals(ply.getUniqueId()) ? 2 : 3); } } Color color = Color.GRAY; @@ -343,7 +343,7 @@ public static void initialize() { Claim ret = null; if (!editingMap.containsKey(uuid)) { PersistentDataContainer pdc = ply.getPersistentDataContainer(); - if (pdc.has(KEY_FLAG)) { + if (pdc.has(KEY_FLAG, PersistentDataType.BYTE)) { boolean flag = pdc.getOrDefault(KEY_FLAG, PersistentDataType.BYTE, (byte) 0) != ((byte) 0); if (flag) { String name = pdc.get(KEY_NAME, PersistentDataType.STRING); diff --git a/src/main/java/codes/wasabi/xclaim/gui/page/ClaimSelectorPage.java b/src/main/java/codes/wasabi/xclaim/gui/page/ClaimSelectorPage.java index 3f9a0c2..f8200c3 100644 --- a/src/main/java/codes/wasabi/xclaim/gui/page/ClaimSelectorPage.java +++ b/src/main/java/codes/wasabi/xclaim/gui/page/ClaimSelectorPage.java @@ -1,6 +1,7 @@ package codes.wasabi.xclaim.gui.page; import codes.wasabi.xclaim.api.Claim; +import codes.wasabi.xclaim.api.XCPlayer; import codes.wasabi.xclaim.api.enums.Permission; import codes.wasabi.xclaim.gui.GUIHandler; import codes.wasabi.xclaim.gui.Page; @@ -59,7 +60,7 @@ private void populate() { if (i >= claims.size()) break outer; int idx = getPageIndex(x, y); Claim claim = claims.get(i); - OfflinePlayer owner = claim.getOwner(); + XCPlayer owner = claim.getOwner(); Component name; Player ply; if ((ply = owner.getPlayer()) != null) { diff --git a/src/main/java/codes/wasabi/xclaim/gui/page/PermissionPage.java b/src/main/java/codes/wasabi/xclaim/gui/page/PermissionPage.java index d429c3e..07afba7 100644 --- a/src/main/java/codes/wasabi/xclaim/gui/page/PermissionPage.java +++ b/src/main/java/codes/wasabi/xclaim/gui/page/PermissionPage.java @@ -109,7 +109,7 @@ private void populate() { PlayerCombinatorPage combinator = new PlayerCombinatorPage(getParent()) { @Override protected @NotNull List getList() { - return claim.getUserPermissions().keySet().stream().map((XCPlayer xcp) -> (OfflinePlayer) xcp).collect(Collectors.toList()); + return claim.getUserPermissions().keySet().stream().map(XCPlayer::getOfflinePlayer).collect(Collectors.toList()); } @Override diff --git a/src/main/java/codes/wasabi/xclaim/gui/page/PlayerCombinatorPage.java b/src/main/java/codes/wasabi/xclaim/gui/page/PlayerCombinatorPage.java index db29750..67720eb 100644 --- a/src/main/java/codes/wasabi/xclaim/gui/page/PlayerCombinatorPage.java +++ b/src/main/java/codes/wasabi/xclaim/gui/page/PlayerCombinatorPage.java @@ -3,6 +3,7 @@ import codes.wasabi.xclaim.gui.GUIHandler; import codes.wasabi.xclaim.gui.Page; import codes.wasabi.xclaim.util.DisplayItem; +import codes.wasabi.xclaim.util.NameToPlayer; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; @@ -83,7 +84,9 @@ private void populate() { meta.lore(Collections.singletonList(Component.text(realName).color(NamedTextColor.GRAY))); } }); - is.editMeta(SkullMeta.class, (SkullMeta sm) -> sm.setOwningPlayer(ply)); + is.editMeta((ItemMeta im) -> { + if (im instanceof SkullMeta sm) sm.setOwningPlayer(ply); + }); setItem(i, is); } if (pageIndex > 0) { @@ -118,7 +121,7 @@ public void onClick(int slot) { goBack(); } else if (slot == 21) { prompt("Enter player name: ", (String name) -> { - Player ply = Bukkit.getPlayer(name); + OfflinePlayer ply = NameToPlayer.getPlayer(name); if (ply == null) { getTarget().sendMessage(Component.text("* Couldn't find a player with that name.").color(NamedTextColor.RED)); return; diff --git a/src/main/java/codes/wasabi/xclaim/gui/page/TransferPage.java b/src/main/java/codes/wasabi/xclaim/gui/page/TransferPage.java index ed40a90..2f3f5ce 100644 --- a/src/main/java/codes/wasabi/xclaim/gui/page/TransferPage.java +++ b/src/main/java/codes/wasabi/xclaim/gui/page/TransferPage.java @@ -12,6 +12,7 @@ import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; import org.jetbrains.annotations.NotNull; @@ -50,7 +51,9 @@ private void populate() { ItemStack head; if (matchPlayer != null) { head = DisplayItem.create(Material.PLAYER_HEAD, matchPlayer.displayName()); - head.editMeta(SkullMeta.class, (SkullMeta sm) -> sm.setOwningPlayer(matchPlayer)); + head.editMeta((ItemMeta im) -> { + if (im instanceof SkullMeta sm) sm.setOwningPlayer(matchPlayer); + }); } else { head = DisplayItem.create(Material.PLAYER_HEAD, "Unknown Player", NamedTextColor.RED); } diff --git a/src/main/java/codes/wasabi/xclaim/gui/page/VersionInfoPage.java b/src/main/java/codes/wasabi/xclaim/gui/page/VersionInfoPage.java index ee289ee..bc17e8d 100644 --- a/src/main/java/codes/wasabi/xclaim/gui/page/VersionInfoPage.java +++ b/src/main/java/codes/wasabi/xclaim/gui/page/VersionInfoPage.java @@ -48,8 +48,8 @@ public class VersionInfoPage extends Page { meta.displayName(Component.text("Author").color(NamedTextColor.GOLD)); String name = Objects.requireNonNullElse(author.getName(), "Wasabi_Thumbs"); meta.lore(Collections.singletonList(Component.text(name).color(NamedTextColor.LIGHT_PURPLE))); + if (meta instanceof SkullMeta sm) sm.setOwningPlayer(author); }); - skull.editMeta(SkullMeta.class, (SkullMeta sm) -> sm.setOwningPlayer(author)); AUTHOR_STACK = skull; } diff --git a/src/main/java/codes/wasabi/xclaim/util/AutoUpdater.java b/src/main/java/codes/wasabi/xclaim/util/AutoUpdater.java index 43d497b..cf145b4 100644 --- a/src/main/java/codes/wasabi/xclaim/util/AutoUpdater.java +++ b/src/main/java/codes/wasabi/xclaim/util/AutoUpdater.java @@ -76,13 +76,24 @@ public void update() throws Exception { try (InputStream cfgIs = cfgConn.getInputStream()) { Map map = yaml.load(cfgIs); String api = (String) map.get("api-version"); + String[] seg = api.split("\\."); + String[] mySeg = apiVersion.split("\\."); + if (seg.length > 0 && mySeg.length > 0) { + if (!seg[0].equals(mySeg[0])) continue; + if (seg.length > 1 && mySeg.length > 1) { + int targetMinor = Integer.parseInt(seg[1]); + int curMinor = Integer.parseInt(mySeg[1]); + if (targetMinor > curMinor) continue; + } + } if (!api.equalsIgnoreCase(apiVersion)) continue; } catch (Exception ignored) { } String finalLink = assetLink; String finalName = assetName; return new UpdateOption(tagName, () -> { if (updated) return null; - File output = new File(Bukkit.getPluginsFolder(), finalName); + File pluginsFolder = XClaim.jarFile.getParentFile(); + File output = new File(pluginsFolder, finalName); if (output.exists()) { throw new IOException("File " + finalName + " already exists!"); } diff --git a/src/main/java/codes/wasabi/xclaim/util/NameToPlayer.java b/src/main/java/codes/wasabi/xclaim/util/NameToPlayer.java new file mode 100644 index 0000000..f96d127 --- /dev/null +++ b/src/main/java/codes/wasabi/xclaim/util/NameToPlayer.java @@ -0,0 +1,64 @@ +package codes.wasabi.xclaim.util; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.UUID; + +public final class NameToPlayer { + + private static final Gson gson = new Gson(); + private static final int REQUEST_TIMEOUT = 2000; + + public static @Nullable OfflinePlayer getPlayer(@NotNull String name) { + OfflinePlayer ply = Bukkit.getPlayer(name); + if (ply != null) return ply; + ply = Bukkit.getOfflinePlayerIfCached(name); + if (ply != null) return ply; + // Must make a web request to Mojang APIs now + try { + URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + URLEncoder.encode(name, StandardCharsets.UTF_8)); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setDoOutput(true); + conn.setDoOutput(false); + conn.setInstanceFollowRedirects(true); + conn.setConnectTimeout(REQUEST_TIMEOUT); + conn.connect(); + + int code = conn.getResponseCode(); + if (code == 200) { + InputStream is = conn.getInputStream(); + byte[] bytes = is.readAllBytes(); + String string = new String(bytes, StandardCharsets.UTF_8); + JsonObject ob = gson.fromJson(string, JsonObject.class); + String id = ob.get("id").getAsString(); + String uuidString = id.substring(0, 8) + "-" + + id.substring(8, 12) + "-" + + id.substring(12, 16) + "-" + + id.substring(16, 20) + "-" + + id.substring(20); + UUID uuid = UUID.fromString(uuidString); + return Bukkit.getOfflinePlayer(uuid); + } else if (code == 204 || code == 400) { + return null; + } else if (code == 405) { + throw new IllegalStateException("GET method is unsupported for this endpoint!"); + } else if (code != 429) { + throw new IllegalStateException("Unknown error " + code + " occurred during HTTP GET"); + } + } catch (IOException ignored) { } + return null; + } + +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a58d67e..d765f8a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: XClaim version: '${project.version}' main: codes.wasabi.xclaim.XClaim -api-version: 1.19 +api-version: 1.17 prefix: XC authors: [ WasabiThumbs ] softdepend: