From 1d6a457aa4d2e9492865bb6bfe5be4a28a600eed Mon Sep 17 00:00:00 2001 From: Onno Date: Mon, 17 Jun 2024 17:38:49 +0200 Subject: [PATCH 1/5] Fixed multiverse teleportation problems on multiworld server --- .../classic/arena/PluginArenaManager.java | 59 ++++++------ .../classic/arena/PluginArenaUtils.java | 91 ++++++++++--------- .../arena/states/PluginStartingState.java | 3 +- .../events/spectator/SpectatorEvents.java | 3 +- .../classic/utils/version/VersionUtils.java | 9 +- 5 files changed, 85 insertions(+), 80 deletions(-) diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/PluginArenaManager.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/PluginArenaManager.java index 16b21332..8f181554 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/PluginArenaManager.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/PluginArenaManager.java @@ -78,42 +78,43 @@ public void joinAttempt(@NotNull Player player, @NotNull PluginArena arena) { new MessageBuilder("IN_GAME_SPECTATOR_BLOCKED").asKey().player(player).arena(arena).sendPlayer(); return; } - PluginArenaUtils.preparePlayerForGame(arena, player, arena.getSpectatorLocation(), true); - new MessageBuilder("IN_GAME_SPECTATOR_YOU_ARE_SPECTATOR").asKey().player(player).arena(arena).sendPlayer(); - PluginArenaUtils.hidePlayer(player, arena); - for(Player spectator : arena.getPlayers()) { - if(plugin.getUserManager().getUser(spectator).isSpectator()) { - VersionUtils.hidePlayer(plugin, player, spectator); - } else { - VersionUtils.showPlayer(plugin, player, spectator); + PluginArenaUtils.preparePlayerForGame(arena, player, arena.getSpectatorLocation(), true).thenAccept(act -> { + new MessageBuilder("IN_GAME_SPECTATOR_YOU_ARE_SPECTATOR").asKey().player(player).arena(arena).sendPlayer(); + PluginArenaUtils.hidePlayer(player, arena); + for (Player spectator : arena.getPlayers()) { + if (plugin.getUserManager().getUser(spectator).isSpectator()) { + VersionUtils.hidePlayer(plugin, player, spectator); + } else { + VersionUtils.showPlayer(plugin, player, spectator); + } } - } - additionalSpectatorSettings(player, arena); - plugin.getDebugger().debug("[{0}] Final join attempt as spectator for {1} took {2}ms", arena.getId(), player.getName(), System.currentTimeMillis() - start); + additionalSpectatorSettings(player, arena); + plugin.getDebugger().debug("[{0}] Final join attempt as spectator for {1} took {2}ms", arena.getId(), player.getName(), System.currentTimeMillis() - start); + }); return; } - PluginArenaUtils.preparePlayerForGame(arena, player, arena.getLobbyLocation(), false); - - new MessageBuilder(MessageBuilder.ActionType.JOIN).arena(arena).player(player).sendArena(); - new TitleBuilder("IN_GAME_JOIN_TITLE").asKey().arena(arena).player(player).sendPlayer(); + PluginArenaUtils.preparePlayerForGame(arena, player, arena.getLobbyLocation(), false).thenAccept(act -> { + new MessageBuilder(MessageBuilder.ActionType.JOIN).arena(arena).player(player).sendArena(); + new TitleBuilder("IN_GAME_JOIN_TITLE").asKey().arena(arena).player(player).sendPlayer(); - if(plugin.getConfigPreferences().getOption("KITS")) { - plugin.getUserManager().getUser(player).setKit(plugin.getKitRegistry().getDefaultKit()); - } - plugin.getSpecialItemManager().addSpecialItemsOfStage(player, SpecialItem.DisplayStage.LOBBY); - if(arena.getArenaState() == ArenaState.WAITING_FOR_PLAYERS) { - plugin.getSpecialItemManager().addSpecialItemsOfStage(player, SpecialItem.DisplayStage.WAITING_FOR_PLAYERS); - } else if(arena.getArenaState().isStartingStage(arena)) { - plugin.getSpecialItemManager().addSpecialItemsOfStage(player, SpecialItem.DisplayStage.ENOUGH_PLAYERS_TO_START); - } + if(plugin.getConfigPreferences().getOption("KITS")) { + plugin.getUserManager().getUser(player).setKit(plugin.getKitRegistry().getDefaultKit()); + } + plugin.getSpecialItemManager().addSpecialItemsOfStage(player, SpecialItem.DisplayStage.LOBBY); + if(arena.getArenaState() == ArenaState.WAITING_FOR_PLAYERS) { + plugin.getSpecialItemManager().addSpecialItemsOfStage(player, SpecialItem.DisplayStage.WAITING_FOR_PLAYERS); + } else if(arena.getArenaState().isStartingStage(arena)) { + plugin.getSpecialItemManager().addSpecialItemsOfStage(player, SpecialItem.DisplayStage.ENOUGH_PLAYERS_TO_START); + } - for(Player arenaPlayer : arena.getPlayers()) { - PluginArenaUtils.showPlayer(arenaPlayer, arena); - } + for(Player arenaPlayer : arena.getPlayers()) { + PluginArenaUtils.showPlayer(arenaPlayer, arena); + } - plugin.getSignManager().updateSigns(); - plugin.getDebugger().debug("[{0}] Final join attempt as player for {1} took {2}ms", arena.getId(), player.getName(), System.currentTimeMillis() - start); + plugin.getSignManager().updateSigns(); + plugin.getDebugger().debug("[{0}] Final join attempt as player for {1} took {2}ms", arena.getId(), player.getName(), System.currentTimeMillis() - start); + }); } private boolean joinAsParty(@NotNull Player player, @NotNull PluginArena arena) { diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/PluginArenaUtils.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/PluginArenaUtils.java index 27b52fe2..95a8c79c 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/PluginArenaUtils.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/PluginArenaUtils.java @@ -32,6 +32,8 @@ import plugily.projects.minigamesbox.classic.utils.serialization.InventorySerializer; import plugily.projects.minigamesbox.classic.utils.version.VersionUtils; +import java.util.concurrent.CompletableFuture; + /** * @author Tigerpanzer_02 *

Created at 01.11.2021 @@ -69,51 +71,52 @@ public static void hidePlayersOutsideTheGame(Player player, PluginArena arena) { } } - public static void preparePlayerForGame( + public static CompletableFuture preparePlayerForGame( PluginArena arena, Player player, Location location, boolean spectator) { - User user = plugin.getUserManager().getUser(player); - if(plugin.getConfigPreferences().getOption("INVENTORY_MANAGER")) { - InventorySerializer.saveInventoryToFile(plugin, player); - } - VersionUtils.teleport(player, location); - player.getInventory().clear(); - player - .getActivePotionEffects() - .forEach(potionEffect -> player.removePotionEffect(potionEffect.getType())); - VersionUtils.setMaxHealth(player, VersionUtils.getMaxHealth(player)); - player.setHealth(VersionUtils.getMaxHealth(player)); - player.setFoodLevel(20); - player.setGameMode(GameMode.SURVIVAL); - player - .getInventory() - .setArmorContents( - new ItemStack[]{ - new ItemStack(Material.AIR), - new ItemStack(Material.AIR), - new ItemStack(Material.AIR), - new ItemStack(Material.AIR) - }); - player.setExp(1); - player.setLevel(0); - player.setWalkSpeed(0.2f); - player.setFlySpeed(0.1f); - - if(spectator) { - player.setAllowFlight(true); - player.setFlying(true); - user.setSpectator(true); - player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 0)); - plugin - .getSpecialItemManager() - .addSpecialItemsOfStage(player, SpecialItem.DisplayStage.SPECTATOR); - } else { - player.setAllowFlight(false); - player.setFlying(false); - user.setSpectator(false); - } - player.updateInventory(); - arena.getBossbarManager().doBarAction(PluginArena.BarAction.ADD, player); - arena.getScoreboardManager().createScoreboard(user); + return VersionUtils.teleport(player, location).thenAccept(bo -> { + User user = plugin.getUserManager().getUser(player); + if (plugin.getConfigPreferences().getOption("INVENTORY_MANAGER")) { + InventorySerializer.saveInventoryToFile(plugin, player); + } + player.getInventory().clear(); + player + .getActivePotionEffects() + .forEach(potionEffect -> player.removePotionEffect(potionEffect.getType())); + VersionUtils.setMaxHealth(player, VersionUtils.getMaxHealth(player)); + player.setHealth(VersionUtils.getMaxHealth(player)); + player.setFoodLevel(20); + player.setGameMode(GameMode.SURVIVAL); + player + .getInventory() + .setArmorContents( + new ItemStack[]{ + new ItemStack(Material.AIR), + new ItemStack(Material.AIR), + new ItemStack(Material.AIR), + new ItemStack(Material.AIR) + }); + player.setExp(1); + player.setLevel(0); + player.setWalkSpeed(0.2f); + player.setFlySpeed(0.1f); + + if (spectator) { + player.setAllowFlight(true); + player.setFlying(true); + user.setSpectator(true); + player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 0)); + plugin + .getSpecialItemManager() + .addSpecialItemsOfStage(player, SpecialItem.DisplayStage.SPECTATOR); + } else { + player.setAllowFlight(false); + player.setFlying(false); + user.setSpectator(false); + } + player.updateInventory(); + arena.getBossbarManager().doBarAction(PluginArena.BarAction.ADD, player); + arena.getScoreboardManager().createScoreboard(user); + }); } public static void resetPlayerAfterGame(PluginArena arena, Player player) { diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/states/PluginStartingState.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/states/PluginStartingState.java index 07c808c4..cd433d81 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/states/PluginStartingState.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/arena/states/PluginStartingState.java @@ -100,7 +100,7 @@ public void handleCall(PluginArena arena) { arena.getBossbarManager().setProgress(1.0); org.bukkit.Location arenaLoc = arena.getStartLocation(); for(Player player : arena.getPlayers()) { - VersionUtils.teleport(player, arenaLoc); + VersionUtils.teleport(player, arenaLoc).thenAccept(bol -> { PluginArenaUtils.hidePlayersOutsideTheGame(player, arena); player.setExp(0); player.setLevel(0); @@ -116,6 +116,7 @@ public void handleCall(PluginArena arena) { plugin.getSpecialItemManager().addSpecialItemsOfStage(player, SpecialItem.DisplayStage.IN_GAME); plugin.getRewardsHandler().performReward(player, arena, plugin.getRewardsHandler().getRewardType("START_GAME")); plugin.getUserManager().addStat(user, plugin.getStatsStorage().getStatisticType("GAMES_PLAYED")); + }); } arenaTimer = plugin.getConfig().getInt("Time-Manager.In-Game", 270); plugin.getDebugger().performance("ArenaUpdate", "Arena {0} current timer set to {1}", arena.getId(), arenaTimer); diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/spectator/SpectatorEvents.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/spectator/SpectatorEvents.java index 6b5c8455..437de7ae 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/spectator/SpectatorEvents.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/spectator/SpectatorEvents.java @@ -146,8 +146,7 @@ public void onDamage(EntityDamageEvent event) { return; } if(player.getLocation().getY() < VersionUtils.getWorldMinHeight(player.getWorld())) { - VersionUtils.teleport(player, arena.getStartLocation()); - event.setDamage(0); + VersionUtils.teleport(player, arena.getStartLocation()).thenAccept(bol -> event.setDamage(0)); } event.setCancelled(true); } diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/version/VersionUtils.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/version/VersionUtils.java index 203dcedf..b70c84f3 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/version/VersionUtils.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/version/VersionUtils.java @@ -62,6 +62,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.CancellationException; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -170,20 +171,19 @@ public static SkullMeta setPlayerHead(Player player, SkullMeta meta) { private static JavaPlugin plugin; - public static void teleport(Entity entity, Location location) { + public static CompletableFuture teleport(Entity entity, Location location) { if(isPaper) { // Avoid Future.get() method to be called from the main thread if(Bukkit.isPrimaryThread()) { // Checks if the current thread is not async - PaperLib.teleportAsync(entity, location); - return; + return PaperLib.teleportAsync(entity, location); } if(plugin == null) plugin = JavaPlugin.getPlugin(PluginMain.class); try { - Bukkit.getScheduler().callSyncMethod(plugin, () -> PaperLib.teleportAsync(entity, location)).get(); + return Bukkit.getScheduler().callSyncMethod(plugin, () -> PaperLib.teleportAsync(entity, location)).get(); } catch(InterruptedException | ExecutionException e) { e.printStackTrace(); } catch(CancellationException e) { @@ -192,6 +192,7 @@ public static void teleport(Entity entity, Location location) { } else { entity.teleport(location); } + return new CompletableFuture<>(); } public static void sendParticles(String particleName, Player player, Location location, int count) { From 2c2ffb28cea6bd4cf4229d42c2c5ba3b2f67ed0e Mon Sep 17 00:00:00 2001 From: Onno Date: Thu, 27 Jun 2024 13:39:08 +0200 Subject: [PATCH 2/5] Fixed Craftingtable cannot be destroyed in BuildBattle after it is placed. --- .../plugily/projects/minigamesbox/classic/events/Events.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/Events.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/Events.java index 8837fe65..bf0f1628 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/Events.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/Events.java @@ -186,7 +186,9 @@ public void onCraft(PlugilyPlayerInteractEvent event) { return; } if(event.getPlayer().getTargetBlock(null, 7).getType() == XMaterial.CRAFTING_TABLE.parseMaterial()) { - event.setCancelled(true); + if(event.getAction().isRightClick()) { + event.setCancelled(true); + } } if(event.getClickedBlock() == null) { return; From da0691d543044beaf999df2900f42505544d8a51 Mon Sep 17 00:00:00 2001 From: Onno Date: Tue, 2 Jul 2024 15:54:32 +0200 Subject: [PATCH 3/5] Implemented that players leaving during a game will respawn at the arena endpoint on join instead of inside the arena. --- .../projects/minigamesbox/api/user/IUserManager.java | 6 ++++++ .../minigamesbox/classic/events/JoinEvent.java | 6 ++++++ .../minigamesbox/classic/events/QuitEvent.java | 2 ++ .../minigamesbox/classic/user/UserManager.java | 11 +++++++++++ 4 files changed, 25 insertions(+) diff --git a/MiniGamesBox API/src/main/java/plugily/projects/minigamesbox/api/user/IUserManager.java b/MiniGamesBox API/src/main/java/plugily/projects/minigamesbox/api/user/IUserManager.java index 70592e03..bec86d6a 100644 --- a/MiniGamesBox API/src/main/java/plugily/projects/minigamesbox/api/user/IUserManager.java +++ b/MiniGamesBox API/src/main/java/plugily/projects/minigamesbox/api/user/IUserManager.java @@ -5,7 +5,9 @@ import plugily.projects.minigamesbox.api.stats.IStatisticType; import plugily.projects.minigamesbox.api.user.data.UserDatabase; +import java.util.HashMap; import java.util.List; +import java.util.UUID; /** * @author Lagggpixel @@ -26,6 +28,10 @@ public interface IUserManager { void updateLevelStat(IUser user, IPluginArena arena); + void storeUserQuitDuringGame(Player player, IPluginArena arena); + + HashMap getUsersQuitDuringGame(); + void saveAllStatistic(IUser user); void loadStatistics(IUser user); diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/JoinEvent.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/JoinEvent.java index 2f099c32..58efee28 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/JoinEvent.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/JoinEvent.java @@ -23,6 +23,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; +import plugily.projects.minigamesbox.api.arena.IPluginArena; import plugily.projects.minigamesbox.classic.PluginMain; import plugily.projects.minigamesbox.classic.handlers.items.SpecialItem; import plugily.projects.minigamesbox.classic.utils.serialization.InventorySerializer; @@ -45,6 +46,11 @@ public JoinEvent(PluginMain plugin) { @EventHandler public void onJoin(PlayerJoinEvent event) { + IPluginArena arena = plugin.getUserManager().getUsersQuitDuringGame().get(event.getPlayer().getUniqueId()); + if(arena != null) { + VersionUtils.teleport(event.getPlayer(), arena.getEndLocation()); + plugin.getUserManager().getUsersQuitDuringGame().remove(event.getPlayer().getUniqueId()); + } plugin.getUserManager().loadStatistics(plugin.getUserManager().getUser(event.getPlayer())); //load player inventory in case of server crash, file is deleted once loaded so if file was already //deleted player won't receive his backup, in case of crash he will get it back diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/QuitEvent.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/QuitEvent.java index 0f6c596d..28f32512 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/QuitEvent.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/events/QuitEvent.java @@ -17,6 +17,7 @@ */ package plugily.projects.minigamesbox.classic.events; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -58,6 +59,7 @@ private void onQuit(Player player) { IPluginArena arena = plugin.getArenaRegistry().getArena(player); if (arena != null) { plugin.getArenaManager().leaveAttempt(player, arena); + plugin.getUserManager().storeUserQuitDuringGame(player, arena); } IUser user = plugin.getUserManager().getUser(player); plugin.getUserManager().saveAllStatistic(user); diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/user/UserManager.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/user/UserManager.java index ba7867fb..521c7861 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/user/UserManager.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/user/UserManager.java @@ -44,6 +44,7 @@ public class UserManager implements IUserManager { private final UserDatabase database; private final HashMap users = new HashMap<>(); + private final HashMap usersQuitDuringGame = new HashMap<>(); private final PluginMain plugin; public UserManager(PluginMain plugin) { @@ -129,6 +130,16 @@ public void updateLevelStat(IUser user, IPluginArena arena) { } } + @Override + public void storeUserQuitDuringGame(Player player, IPluginArena arena) { + usersQuitDuringGame.put(player.getUniqueId(), arena); + } + + @Override + public HashMap getUsersQuitDuringGame() { + return usersQuitDuringGame; + } + @Override public void saveAllStatistic(IUser user) { database.saveAllStatistic(user); From cc900d5af564454c2f013246f5a092d5ef7db2dc Mon Sep 17 00:00:00 2001 From: Onno Date: Sun, 14 Jul 2024 00:27:06 +0200 Subject: [PATCH 4/5] Fixed mistake in the merge --- .../classic/utils/version/VersionUtils.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/version/VersionUtils.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/version/VersionUtils.java index 5bdb2dfd..26269f28 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/version/VersionUtils.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/version/VersionUtils.java @@ -184,25 +184,14 @@ public static CompletableFuture teleport(Entity entity, Location locati try { return Bukkit.getScheduler().callSyncMethod(plugin, () -> PaperLib.teleportAsync(entity, location)).get(); -<<<<<<< HEAD - } catch(InterruptedException | ExecutionException e) { - e.printStackTrace(); - } catch(CancellationException e) { - // ignored -======= } catch(InterruptedException | ExecutionException | CancellationException e) { Thread.currentThread().interrupt(); ->>>>>>> upstream/master } } else { entity.teleport(location); return CompletableFuture.completedFuture(Boolean.TRUE); } -<<<<<<< HEAD - return new CompletableFuture<>(); -======= return CompletableFuture.completedFuture(Boolean.FALSE); ->>>>>>> upstream/master } public static void sendParticles(String particleName, Player player, Location location, int count) { From 6f0b2104edfd0e423d855a44b2a7ccb3666e59b8 Mon Sep 17 00:00:00 2001 From: Onno Date: Sun, 13 Oct 2024 15:41:05 +0200 Subject: [PATCH 5/5] Updated getSkull function to make playerheads work in 1.21 --- .../classic/utils/helper/ItemUtils.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/helper/ItemUtils.java b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/helper/ItemUtils.java index 4e486247..6eac7c09 100644 --- a/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/helper/ItemUtils.java +++ b/MiniGamesBox Classic/src/main/java/plugily/projects/minigamesbox/classic/utils/helper/ItemUtils.java @@ -19,8 +19,10 @@ package plugily.projects.minigamesbox.classic.utils.helper; import com.cryptomorin.xseries.XMaterial; -import com.mojang.authlib.GameProfile; +import com.destroystokyo.paper.profile.PlayerProfile; +import com.destroystokyo.paper.profile.ProfileProperty; import com.mojang.authlib.properties.Property; +import org.bukkit.Bukkit; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; @@ -65,16 +67,16 @@ public static ItemStack getSkull(String url) { SkullMeta headMeta = (SkullMeta) head.getItemMeta(); - GameProfile profile; - if(ServerVersion.Version.isCurrentEqualOrHigher(ServerVersion.Version.v1_20)) { - profile = new GameProfile(UUID.randomUUID(), "Plugily"); + PlayerProfile profile; + if(ServerVersion.Version.isCurrentEqualOrHigher(ServerVersion.Version.v1_21)) { + profile = Bukkit.getServer().createProfile(UUID.randomUUID(), "Plugily"); } else { - profile = new GameProfile(UUID.randomUUID(), null); + profile = Bukkit.getServer().createProfile(UUID.randomUUID(), null); } - profile.getProperties().put("textures", new Property("textures", url)); - if(ServerVersion.Version.isCurrentEqualOrHigher(ServerVersion.Version.v1_15)) { + profile.setProperty(new ProfileProperty("textures", url)); + if(ServerVersion.Version.isCurrentEqualOrHigher(ServerVersion.Version.v1_21)) { try { - Method mtd = headMeta.getClass().getDeclaredMethod("setProfile", GameProfile.class); + Method mtd = headMeta.getClass().getDeclaredMethod("setPlayerProfile", PlayerProfile.class); mtd.setAccessible(true); mtd.invoke(headMeta, profile); } catch(Exception ignored) {