From c4f64365fa418c1397a4658ed8f8a7976f5b5aa1 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Sat, 25 May 2024 11:50:53 +0200 Subject: [PATCH 01/19] Oops, fixed <1.20.5 support --- CHANGES.md | 4 +++- pom.xml | 2 +- src/main/java/dev/efnilite/ip/player/ParkourPlayer.java | 6 ++++-- src/main/resources/plugin.yml | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c6f620c6..1755d273 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,8 @@ - Running Multiverse with IP now does not require VoidGen - Improved responsiveness of parkour and scoreboard +- Added update checker - Fixed leaderboards sorting being wrong - Fixed placeholders returning wrong values -- Fixed vague sorting locale in leaderboard menu \ No newline at end of file +- Fixed vague sorting locale in leaderboard menu +- Fixed MySQL causing problems in some locales \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5a79f432..7ff23b4b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ dev.efnilite IP - 5.2.4 + 5.2.5 17 diff --git a/src/main/java/dev/efnilite/ip/player/ParkourPlayer.java b/src/main/java/dev/efnilite/ip/player/ParkourPlayer.java index 8e2ee126..9dba183c 100644 --- a/src/main/java/dev/efnilite/ip/player/ParkourPlayer.java +++ b/src/main/java/dev/efnilite/ip/player/ParkourPlayer.java @@ -19,8 +19,8 @@ import dev.efnilite.vilib.util.Task; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Registry; import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffectType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -87,7 +87,9 @@ public ParkourPlayer(@NotNull Player player, @NotNull Session session, @Nullable player.setAllowFlight(false); player.setInvisible(false); - Registry.EFFECT.stream().forEach(player::removePotionEffect); + for (var effect : PotionEffectType.values()) { + player.removePotionEffect(effect); + } } private static boolean parseBoolean(String string) { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 255ab8cf..027dd9c2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: 'IP' description: 'Infinitely automatically generating parkour plugin.' author: Efnilite -version: 5.2.4 +version: 5.2.5 api-version: 1.16 main: dev.efnilite.ip.IP softdepend: [floodgate, Vault, PlaceholderAPI, Multiverse-Core, VoidGen] From 43fafc876761eb4170d65a12c691653e43ae1fbd Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Wed, 29 May 2024 19:20:35 +0200 Subject: [PATCH 02/19] Fixed checking for existing generator error --- src/main/java/dev/efnilite/ip/mode/DefaultMode.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/efnilite/ip/mode/DefaultMode.java b/src/main/java/dev/efnilite/ip/mode/DefaultMode.java index 86b20847..37b77c95 100644 --- a/src/main/java/dev/efnilite/ip/mode/DefaultMode.java +++ b/src/main/java/dev/efnilite/ip/mode/DefaultMode.java @@ -44,9 +44,10 @@ public void create(Player player) { } ParkourPlayer pp = ParkourPlayer.getPlayer(player); - if (pp != null && pp.session.generator.getMode() instanceof DefaultMode) { + if (pp != null && pp.session.generator != null && pp.session.generator.getMode() instanceof DefaultMode) { return; } + player.closeInventory(); Session.create(ParkourGenerator::new, null, null, player); From 670a438664a8f6d011adaf244f829fd0d9250351 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Wed, 26 Jun 2024 16:49:13 +0200 Subject: [PATCH 03/19] Improved Style docs --- src/main/java/dev/efnilite/ip/style/Style.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/dev/efnilite/ip/style/Style.java b/src/main/java/dev/efnilite/ip/style/Style.java index 7be5eb4a..8a8db9a8 100644 --- a/src/main/java/dev/efnilite/ip/style/Style.java +++ b/src/main/java/dev/efnilite/ip/style/Style.java @@ -2,10 +2,21 @@ import org.bukkit.Material; +/** + * Represents a parkour style. + */ public interface Style { + /** + * The material to be used for the next block. + * @return A material. + */ Material getNext(); + /** + * The name of the style. + * @return A name. + */ String getName(); } From af39bca9767224739fdc011db18fae2b1a1332a7 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Wed, 26 Jun 2024 16:52:58 +0200 Subject: [PATCH 04/19] Renamed WorldManager -> World --- src/main/java/dev/efnilite/ip/Events.java | 10 +++++----- src/main/java/dev/efnilite/ip/IP.java | 6 +++--- src/main/java/dev/efnilite/ip/world/Divider.java | 2 +- .../ip/world/{WorldManager.java => World.java} | 8 ++++---- 4 files changed, 13 insertions(+), 13 deletions(-) rename src/main/java/dev/efnilite/ip/world/{WorldManager.java => World.java} (95%) diff --git a/src/main/java/dev/efnilite/ip/Events.java b/src/main/java/dev/efnilite/ip/Events.java index 4e9d078f..b9f8dd58 100644 --- a/src/main/java/dev/efnilite/ip/Events.java +++ b/src/main/java/dev/efnilite/ip/Events.java @@ -9,7 +9,7 @@ import dev.efnilite.ip.player.ParkourPlayer; import dev.efnilite.ip.player.ParkourUser; import dev.efnilite.ip.session.Session; -import dev.efnilite.ip.world.WorldManager; +import dev.efnilite.ip.world.World; import dev.efnilite.vilib.event.EventWatcher; import dev.efnilite.vilib.particle.ParticleData; import dev.efnilite.vilib.particle.Particles; @@ -81,11 +81,11 @@ public void join(PlayerJoinEvent event) { return; } - if (!player.getWorld().equals(WorldManager.getWorld())) { + if (!player.getWorld().equals(World.getWorld())) { return; } - World fallback = Bukkit.getWorld(Config.CONFIG.getString("world.fall-back")); + org.bukkit.World fallback = Bukkit.getWorld(Config.CONFIG.getString("world.fall-back")); if (fallback != null) { PaperLib.teleportAsync(player, fallback.getSpawnLocation(), PlayerTeleportEvent.TeleportCause.PLUGIN); @@ -93,7 +93,7 @@ public void join(PlayerJoinEvent event) { } PaperLib.teleportAsync(player, Bukkit.getWorlds().stream() - .filter(world -> !world.equals(WorldManager.getWorld())) + .filter(world -> !world.equals(World.getWorld())) .findAny() .orElseThrow(() -> new NoSuchElementException("No fallback world was found!")) .getSpawnLocation()); @@ -234,7 +234,7 @@ private ItemStack getHeldItem(Player player) { public void switchWorld(PlayerChangedWorldEvent event) { Player player = event.getPlayer(); ParkourUser user = ParkourUser.getUser(player); - World parkour = WorldManager.getWorld(); + org.bukkit.World parkour = World.getWorld(); boolean isAdmin = Config.CONFIG.getBoolean("permissions.enabled") ? ParkourOption.ADMIN.mayPerform(player) : player.isOp(); diff --git a/src/main/java/dev/efnilite/ip/IP.java b/src/main/java/dev/efnilite/ip/IP.java index a8ab5552..7efaa3ff 100644 --- a/src/main/java/dev/efnilite/ip/IP.java +++ b/src/main/java/dev/efnilite/ip/IP.java @@ -12,7 +12,7 @@ import dev.efnilite.ip.player.ParkourUser; import dev.efnilite.ip.reward.Rewards; import dev.efnilite.ip.storage.Storage; -import dev.efnilite.ip.world.WorldManager; +import dev.efnilite.ip.world.World; import dev.efnilite.vilib.ViPlugin; import dev.efnilite.vilib.bstats.bukkit.Metrics; import dev.efnilite.vilib.bstats.charts.SimplePie; @@ -115,7 +115,7 @@ public void enable() { // ----- Worlds ----- if (Config.CONFIG.getBoolean("joining")) { - WorldManager.create(); + World.create(); } // ----- Events ----- @@ -149,7 +149,7 @@ public void disable() { Modes.DEFAULT.getLeaderboard().write(false); Storage.close(); - WorldManager.delete(); + World.delete(); } catch (Throwable ignored) { } diff --git a/src/main/java/dev/efnilite/ip/world/Divider.java b/src/main/java/dev/efnilite/ip/world/Divider.java index 378118be..38a44b0d 100644 --- a/src/main/java/dev/efnilite/ip/world/Divider.java +++ b/src/main/java/dev/efnilite/ip/world/Divider.java @@ -63,7 +63,7 @@ public static void remove(Session session) { public static Location toLocation(Session session) { int[] xz = spiralAt(sections.get(session)); - return new Location(WorldManager.getWorld(), + return new Location(World.getWorld(), xz[0] * Option.BORDER_SIZE, (Option.MAX_Y + Option.MIN_Y) / 2.0, xz[1] * Option.BORDER_SIZE); diff --git a/src/main/java/dev/efnilite/ip/world/WorldManager.java b/src/main/java/dev/efnilite/ip/world/World.java similarity index 95% rename from src/main/java/dev/efnilite/ip/world/WorldManager.java rename to src/main/java/dev/efnilite/ip/world/World.java index 726c8767..b9a648de 100644 --- a/src/main/java/dev/efnilite/ip/world/WorldManager.java +++ b/src/main/java/dev/efnilite/ip/world/World.java @@ -11,10 +11,10 @@ import java.util.Comparator; import java.util.stream.Stream; -public class WorldManager { +public class World { private static String name; - private static World world; + private static org.bukkit.World world; /** * Creates a new world and sets all according settings in it. @@ -48,7 +48,7 @@ private static void createWorld() { .generateStructures(false) .type(WorldType.NORMAL) .generator(VoidGenerator.getGenerator()) // to fix No keys in MapLayer etc. - .environment(World.Environment.NORMAL); + .environment(org.bukkit.World.Environment.NORMAL); world = Bukkit.createWorld(creator); } catch (Exception ex) { @@ -120,7 +120,7 @@ public static String getName() { /** * @return the Bukkit world wherein IP is currently active. */ - public static World getWorld() { + public static org.bukkit.World getWorld() { return world; } } \ No newline at end of file From 883c1b039c1b74687c878840b6d480ebe466f848 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:57:12 +0200 Subject: [PATCH 05/19] Fixed some reduced angle generations requiring jumps --- src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java b/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java index 115a1fd2..a6468307 100644 --- a/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java +++ b/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java @@ -318,7 +318,7 @@ protected Block selectNext(Block current, int distance, int height) { } double mean = 0; - double standardDeviation = generatorOptions.contains(GeneratorOption.REDUCE_RANDOM_BLOCK_SELECTION_ANGLE) ? 0.6 : 1; + double standardDeviation = generatorOptions.contains(GeneratorOption.REDUCE_RANDOM_BLOCK_SELECTION_ANGLE) ? 0.5 : 1; int randomOffset = new JumpOffsetGenerator(height, distance).getRandomOffset(mean, standardDeviation); From 0f893b3564803d9ddf5502105fe5a929fcfc88fd Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Sat, 13 Jul 2024 20:35:24 +0200 Subject: [PATCH 06/19] Fixed kicking --- src/main/java/dev/efnilite/ip/Events.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/efnilite/ip/Events.java b/src/main/java/dev/efnilite/ip/Events.java index b9f8dd58..9b6d9312 100644 --- a/src/main/java/dev/efnilite/ip/Events.java +++ b/src/main/java/dev/efnilite/ip/Events.java @@ -239,7 +239,10 @@ public void switchWorld(PlayerChangedWorldEvent event) { boolean isAdmin = Config.CONFIG.getBoolean("permissions.enabled") ? ParkourOption.ADMIN.mayPerform(player) : player.isOp(); if (player.getWorld() == parkour && user == null && !isAdmin && player.getTicksLived() > 20) { - player.kickPlayer("You can't enter the parkour world by teleporting!"); + Bukkit.getWorlds().stream() + .filter(world -> !world.equals(parkour)) + .findAny() + .ifPresent(world -> PaperLib.teleportAsync(player, world.getSpawnLocation())); return; } From bb2a2fc50c86052aa4b9ff2617780c9916a22da0 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:17:46 +0200 Subject: [PATCH 07/19] Fixed sessions not using old locations for 1 player --- src/main/java/dev/efnilite/ip/session/Session.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/dev/efnilite/ip/session/Session.java b/src/main/java/dev/efnilite/ip/session/Session.java index 61c60db6..1414d28c 100644 --- a/src/main/java/dev/efnilite/ip/session/Session.java +++ b/src/main/java/dev/efnilite/ip/session/Session.java @@ -66,11 +66,13 @@ public static Session create(Function generatorFuncti Function isAcceptingPlayers, Function isAcceptingSpectators, Player... players) { - IP.log("Creating session with players %s".formatted(Arrays.toString(players))); + IP.log("Creating session"); - Session session = new Session(); + if (players != null) { + IP.log("Players in session: %s".formatted(Arrays.stream(players).map(Player::getName).toList())); + } - var location = Divider.add(session); + Session session = new Session(); if (isAcceptingPlayers != null) session.isAcceptingPlayers = isAcceptingPlayers; if (isAcceptingSpectators != null) session.isAcceptingSpectators = isAcceptingSpectators; @@ -90,6 +92,7 @@ public static Session create(Function generatorFuncti pps.forEach(p -> p.updateGeneratorSettings(session.generator)); } + var location = Divider.add(session); session.generator.island.build(location); return session; From 0911cde3fea9d89e050fb6ea904d3a8d900d074f Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:50:12 +0200 Subject: [PATCH 08/19] reduce divider visibility --- src/main/java/dev/efnilite/ip/session/Session.java | 14 ++++++++++++-- src/main/java/dev/efnilite/ip/world/Divider.java | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/dev/efnilite/ip/session/Session.java b/src/main/java/dev/efnilite/ip/session/Session.java index 1414d28c..57748014 100644 --- a/src/main/java/dev/efnilite/ip/session/Session.java +++ b/src/main/java/dev/efnilite/ip/session/Session.java @@ -7,6 +7,7 @@ import dev.efnilite.ip.player.ParkourSpectator; import dev.efnilite.ip.player.ParkourUser; import dev.efnilite.ip.world.Divider; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -23,6 +24,8 @@ */ public class Session { + private Location location; + /** * List of muted users. */ @@ -86,14 +89,14 @@ public static Session create(Function generatorFuncti } } + session.location = Divider.add(session); session.generator = generatorFunction.apply(session); if (players != null) { pps.forEach(p -> p.updateGeneratorSettings(session.generator)); } - var location = Divider.add(session); - session.generator.island.build(location); + session.generator.island.build(session.location); return session; } @@ -201,6 +204,13 @@ public List getUsers() { return new ArrayList<>(users.values()); } + /** + * @return the spawn location for this {@link Session}. + */ + public Location getSpawnLocation() { + return location.clone(); + } + /** * Toggles mute for the specified user. * diff --git a/src/main/java/dev/efnilite/ip/world/Divider.java b/src/main/java/dev/efnilite/ip/world/Divider.java index 38a44b0d..dbe2cad6 100644 --- a/src/main/java/dev/efnilite/ip/world/Divider.java +++ b/src/main/java/dev/efnilite/ip/world/Divider.java @@ -60,7 +60,7 @@ public static void remove(Session session) { * @param session The session. * @return The location at the center of section n. */ - public static Location toLocation(Session session) { + private static Location toLocation(Session session) { int[] xz = spiralAt(sections.get(session)); return new Location(World.getWorld(), From 8b7befb43220d6df7d8c15ca624b881ff7948cfb Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Tue, 16 Jul 2024 21:29:39 +0200 Subject: [PATCH 09/19] reduce session visibility --- src/main/java/dev/efnilite/ip/Events.java | 2 +- .../dev/efnilite/ip/menu/lobby/LobbyMenu.java | 8 +-- .../ip/menu/lobby/PlayerManagementMenu.java | 2 +- .../java/dev/efnilite/ip/session/Session.java | 51 ++++++++++++++----- 4 files changed, 45 insertions(+), 18 deletions(-) diff --git a/src/main/java/dev/efnilite/ip/Events.java b/src/main/java/dev/efnilite/ip/Events.java index 9b6d9312..c08e573b 100644 --- a/src/main/java/dev/efnilite/ip/Events.java +++ b/src/main/java/dev/efnilite/ip/Events.java @@ -60,7 +60,7 @@ public void chat(AsyncPlayerChatEvent event) { Session session = user.session; - if (session.muted.contains(user)) { + if (session.isMuted(user)) { return; } diff --git a/src/main/java/dev/efnilite/ip/menu/lobby/LobbyMenu.java b/src/main/java/dev/efnilite/ip/menu/lobby/LobbyMenu.java index 81665928..82b4ead4 100644 --- a/src/main/java/dev/efnilite/ip/menu/lobby/LobbyMenu.java +++ b/src/main/java/dev/efnilite/ip/menu/lobby/LobbyMenu.java @@ -29,7 +29,7 @@ public LobbyMenu() { List values = Locales.getStringList(user.locale, "lobby.visibility.values"); - return new SliderItem().initial(switch (user.session.visibility) { + return new SliderItem().initial(switch (user.session.getVisibility()) { case PUBLIC -> 0; case ID_ONLY -> 1; case PRIVATE -> 2; @@ -37,7 +37,7 @@ public LobbyMenu() { ParkourUser u = ParkourUser.getUser(event.getPlayer()); if (u != null) { - u.session.visibility = Session.Visibility.PUBLIC; + u.session.setVisibility(Session.Visibility.PUBLIC); } return true; @@ -45,7 +45,7 @@ public LobbyMenu() { ParkourUser u = ParkourUser.getUser(event.getPlayer()); if (u != null) { - u.session.visibility = Session.Visibility.ID_ONLY; + u.session.setVisibility(Session.Visibility.ID_ONLY); } return true; @@ -53,7 +53,7 @@ public LobbyMenu() { ParkourUser u = ParkourUser.getUser(event.getPlayer()); if (u != null) { - u.session.visibility = Session.Visibility.PRIVATE; + u.session.setVisibility(Session.Visibility.PRIVATE); } return true; diff --git a/src/main/java/dev/efnilite/ip/menu/lobby/PlayerManagementMenu.java b/src/main/java/dev/efnilite/ip/menu/lobby/PlayerManagementMenu.java index a98bea54..6d131809 100644 --- a/src/main/java/dev/efnilite/ip/menu/lobby/PlayerManagementMenu.java +++ b/src/main/java/dev/efnilite/ip/menu/lobby/PlayerManagementMenu.java @@ -59,7 +59,7 @@ private void add(PagedMenu menu, ParkourUser viewer, Collection use Item item = Locales.getItem(viewer.locale, "lobby.player_management.head", other.getName()); item.material(Material.PLAYER_HEAD); - boolean muted = session.muted.contains(other); + boolean muted = session.isMuted(other); List lore = new ArrayList<>(); if (muted) { diff --git a/src/main/java/dev/efnilite/ip/session/Session.java b/src/main/java/dev/efnilite/ip/session/Session.java index 57748014..9fee9d54 100644 --- a/src/main/java/dev/efnilite/ip/session/Session.java +++ b/src/main/java/dev/efnilite/ip/session/Session.java @@ -24,27 +24,30 @@ */ public class Session { - private Location location; + /** + * The spawn location of this session. + */ + private Location spawnLocation; /** - * List of muted users. + * The generator. */ - public final List muted = new ArrayList<>(); + public ParkourGenerator generator; /** - * List of users. + * The visibility of this session. Default public. */ - protected final Map users = new HashMap<>(); + private Visibility visibility = Visibility.PUBLIC; /** - * The generator. + * List of muted users. */ - public ParkourGenerator generator; + private final List muted = new ArrayList<>(); /** - * The visibility of this session. Default public. + * List of users. */ - public Visibility visibility = Visibility.PUBLIC; + private final Map users = new HashMap<>(); /** * Function that takes the current session and returns whether new players should be accepted. @@ -89,18 +92,33 @@ public static Session create(Function generatorFuncti } } - session.location = Divider.add(session); + session.spawnLocation = Divider.add(session); session.generator = generatorFunction.apply(session); if (players != null) { pps.forEach(p -> p.updateGeneratorSettings(session.generator)); } - session.generator.island.build(session.location); + session.generator.island.build(session.spawnLocation); return session; } + /** + * Sets the visibility of this session. + * @param visibility The visibility. + */ + public void setVisibility(Visibility visibility) { + this.visibility = visibility; + } + + /** + * @return The visibility of this session. + */ + public Visibility getVisibility() { + return visibility; + } + /** * Adds provided players to this session's player list. * @@ -207,8 +225,9 @@ public List getUsers() { /** * @return the spawn location for this {@link Session}. */ + @SuppressWarnings("unused") public Location getSpawnLocation() { - return location.clone(); + return spawnLocation.clone(); } /** @@ -222,6 +241,14 @@ public void toggleMute(@NotNull ParkourUser user) { } } + /** + * @param user The user. + * @return True when the user is muted, false if not. + */ + public boolean isMuted(@NotNull ParkourUser user) { + return muted.contains(user); + } + /** * @return True when players may join this session, false if not. */ From 4fa1d97038be4faab5c7bd6facf198a1886752ad Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Tue, 30 Jul 2024 13:34:35 +0200 Subject: [PATCH 10/19] fixed npe --- .../efnilite/ip/menu/play/SpectatorMenu.java | 41 ++++++++----------- .../dev/efnilite/ip/player/ParkourUser.java | 3 +- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/main/java/dev/efnilite/ip/menu/play/SpectatorMenu.java b/src/main/java/dev/efnilite/ip/menu/play/SpectatorMenu.java index e41afe72..9576b1a7 100644 --- a/src/main/java/dev/efnilite/ip/menu/play/SpectatorMenu.java +++ b/src/main/java/dev/efnilite/ip/menu/play/SpectatorMenu.java @@ -1,17 +1,13 @@ package dev.efnilite.ip.menu.play; -import dev.efnilite.ip.IP; import dev.efnilite.ip.config.Locales; import dev.efnilite.ip.config.Option; import dev.efnilite.ip.menu.Menus; import dev.efnilite.ip.menu.ParkourOption; -import dev.efnilite.ip.mode.Modes; -import dev.efnilite.ip.player.ParkourPlayer; import dev.efnilite.ip.player.ParkourUser; import dev.efnilite.ip.session.Session; import dev.efnilite.ip.world.Divider; import dev.efnilite.vilib.inventory.PagedMenu; -import dev.efnilite.vilib.inventory.item.AutoSliderItem; import dev.efnilite.vilib.inventory.item.Item; import dev.efnilite.vilib.inventory.item.MenuItem; import dev.efnilite.vilib.util.SkullSetter; @@ -45,33 +41,32 @@ public void open(Player player) { continue; } - AutoSliderItem slider = new AutoSliderItem(1, spectator, IP.getPlugin()).initial(0); // slideritem + if (session.getPlayers().isEmpty()) { // weird but possible + continue; + } - int index = 0; - for (ParkourPlayer pp : session.getPlayers()) { - Item item = Locales.getItem(locale, "play.spectator.head", pp.getName()); - // Player head gathering - item.material(Material.PLAYER_HEAD); + var pp = session.getPlayers().get(0); - ItemStack stack = item.build(); // Updating meta requires building - stack.setType(Material.PLAYER_HEAD); + Item item = Locales.getItem(locale, "play.spectator.head", pp.getName()); + // Player head gathering + item.material(Material.PLAYER_HEAD); - // bedrock has no player skull support - if (!ParkourUser.isBedrockPlayer(player)) { - if (pp.getName() != null && !pp.getName().startsWith(".")) { // bedrock players' names with geyser start with a . - SkullMeta meta = (SkullMeta) stack.getItemMeta(); + ItemStack stack = item.build(); // Updating meta requires building + stack.setType(Material.PLAYER_HEAD); - if (meta != null) { - SkullSetter.setPlayerHead(pp.player, meta); - item.meta(meta); - } + // bedrock has no player skull support + if (!ParkourUser.isBedrockPlayer(player)) { + if (pp.getName() != null && !pp.getName().startsWith(".")) { // bedrock players' names with geyser start with a . + SkullMeta meta = (SkullMeta) stack.getItemMeta(); + + if (meta != null) { + SkullSetter.setPlayerHead(pp.player, meta); + item.meta(meta); } } - - slider.add(index, item, (event) -> Modes.SPECTATOR.create(player, session)); } - display.add(slider); + display.add(item); } spectator.displayRows(0, 1) diff --git a/src/main/java/dev/efnilite/ip/player/ParkourUser.java b/src/main/java/dev/efnilite/ip/player/ParkourUser.java index 8f3d382a..b4d35300 100644 --- a/src/main/java/dev/efnilite/ip/player/ParkourUser.java +++ b/src/main/java/dev/efnilite/ip/player/ParkourUser.java @@ -106,7 +106,6 @@ public static void unregister(@NotNull ParkourUser user, boolean restorePrevious new ParkourLeaveEvent(user).call(); IP.log("Unregistering player %s, restorePreviousData = %s, kickIfBungee = %s".formatted(user.getName(), restorePreviousData, kickIfBungee)); - Mode mode = user.session.generator.getMode(); try { user.unregister(); @@ -128,7 +127,7 @@ public static void unregister(@NotNull ParkourUser user, boolean restorePrevious user.previousData.apply(user.player, urgent); if (user instanceof ParkourPlayer player) { - user.previousData.onLeave.forEach(r -> r.execute(player, mode)); + user.previousData.onLeave.forEach(r -> r.execute(player, user.session.generator.getMode())); } } From fb2f7900f6ca104efebda100bb3bdd76d0255136 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Wed, 31 Jul 2024 15:57:00 +0200 Subject: [PATCH 11/19] fixed update being synced --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7ff23b4b..31c5ee7d 100644 --- a/pom.xml +++ b/pom.xml @@ -102,7 +102,7 @@ com.github.Efnilite vilib - e0352344d6 + d6394f7174 compile From 158024ae1051d60750de4e673a1545f56cfd887d Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Mon, 12 Aug 2024 15:47:46 +0200 Subject: [PATCH 12/19] minor fixes --- pom.xml | 2 +- src/main/java/dev/efnilite/ip/storage/StorageSQL.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 31c5ee7d..f1d3e967 100644 --- a/pom.xml +++ b/pom.xml @@ -102,7 +102,7 @@ com.github.Efnilite vilib - d6394f7174 + dd786231c3 compile diff --git a/src/main/java/dev/efnilite/ip/storage/StorageSQL.java b/src/main/java/dev/efnilite/ip/storage/StorageSQL.java index 61514771..e61b577e 100644 --- a/src/main/java/dev/efnilite/ip/storage/StorageSQL.java +++ b/src/main/java/dev/efnilite/ip/storage/StorageSQL.java @@ -82,7 +82,7 @@ public static void close() { } public static void writeScores(@NotNull String mode, @NotNull Map scores) { - scores.forEach((uuid, score) -> sendUpdate( + new HashMap<>(scores).forEach((uuid, score) -> sendUpdate( """ INSERT INTO `%s` (uuid, name, time, difficulty, score) From 8bafb34bcb5959b8bd86eab063e588fbfe8eeaf1 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Mon, 12 Aug 2024 15:56:24 +0200 Subject: [PATCH 13/19] update changes --- CHANGES.md | 13 ++++++------- .../java/dev/efnilite/ip/player/ParkourUser.java | 10 +++++++++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 1755d273..319117b5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,9 +1,8 @@ **[Infinite Elytra Parkour](https://www.spigotmc.org/resources/115322/) | [Infinite Parkour+](https://www.spigotmc.org/resources/105019/)** -- Running Multiverse with IP now does not require VoidGen -- Improved responsiveness of parkour and scoreboard -- Added update checker -- Fixed leaderboards sorting being wrong -- Fixed placeholders returning wrong values -- Fixed vague sorting locale in leaderboard menu -- Fixed MySQL causing problems in some locales \ No newline at end of file +- Added model id support (thanks **[@wilddip](https://github.com/wilddip)**) +- Added SkinsRestorer support (thanks **[@TheJCN](https://github.com/TheJCN)**) +- Fixed Chinese translation (thanks **[@jhqwqmc](https://github.com/jhqwqmc)**) +- Fixed MySQL error on score saving +- Fixed being able to take out items in the leaderboard +- Fixed error on joining spectator \ No newline at end of file diff --git a/src/main/java/dev/efnilite/ip/player/ParkourUser.java b/src/main/java/dev/efnilite/ip/player/ParkourUser.java index b4d35300..0ad8aaf4 100644 --- a/src/main/java/dev/efnilite/ip/player/ParkourUser.java +++ b/src/main/java/dev/efnilite/ip/player/ParkourUser.java @@ -14,6 +14,7 @@ import dev.efnilite.ip.leaderboard.Score; import dev.efnilite.ip.menu.ParkourOption; import dev.efnilite.ip.mode.Mode; +import dev.efnilite.ip.mode.Modes; import dev.efnilite.ip.player.data.PreviousData; import dev.efnilite.ip.session.Session; import dev.efnilite.ip.storage.Storage; @@ -126,8 +127,15 @@ public static void unregister(@NotNull ParkourUser user, boolean restorePrevious user.previousData.apply(user.player, urgent); + Mode mode = user.session.generator.getMode(); + if (mode == null) { + IP.logging().error("Mode is null for %s".formatted(user.getName())); + mode = Modes.DEFAULT; + } + if (user instanceof ParkourPlayer player) { - user.previousData.onLeave.forEach(r -> r.execute(player, user.session.generator.getMode())); + Mode finalMode = mode; + user.previousData.onLeave.forEach(r -> r.execute(player, finalMode)); } } From cf61b5a2940e4e246859cea51624735f47adf293 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Mon, 12 Aug 2024 16:04:00 +0200 Subject: [PATCH 14/19] minor fixes --- .../java/dev/efnilite/ip/generator/ParkourGenerator.java | 5 ++++- src/main/java/dev/efnilite/ip/hook/HoloHook.java | 4 ++++ src/main/java/dev/efnilite/ip/hook/PAPIHook.java | 7 ++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java b/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java index a6468307..697fc391 100644 --- a/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java +++ b/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java @@ -283,7 +283,10 @@ protected BlockData selectBlockData() { Style style = Registry.getStyle(profile.get("style").value()); if (style == null) { - profile.set("style", Registry.getStyles().stream().findFirst().get().getName()); + profile.set("style", Registry.getStyles().stream() + .findFirst() + .orElseThrow() + .getName()); return selectBlockData(); } diff --git a/src/main/java/dev/efnilite/ip/hook/HoloHook.java b/src/main/java/dev/efnilite/ip/hook/HoloHook.java index 952d2ecf..d416888f 100644 --- a/src/main/java/dev/efnilite/ip/hook/HoloHook.java +++ b/src/main/java/dev/efnilite/ip/hook/HoloHook.java @@ -40,6 +40,10 @@ public static void init() { Leaderboard leaderboard = mode.getLeaderboard(); + if (leaderboard == null) { + return "?"; + } + String type = split[1].toLowerCase(); String rank = split[2].replace("#", ""); diff --git a/src/main/java/dev/efnilite/ip/hook/PAPIHook.java b/src/main/java/dev/efnilite/ip/hook/PAPIHook.java index 8925c8e2..f09ad6b4 100644 --- a/src/main/java/dev/efnilite/ip/hook/PAPIHook.java +++ b/src/main/java/dev/efnilite/ip/hook/PAPIHook.java @@ -162,7 +162,7 @@ private String parseDifficulty(double difficulty) { private String getInfiniteScore(String rankData, Function f) { int rank; - Leaderboard leaderboard; + Leaderboard leaderboard = null; Matcher matcher = INFINITE_REGEX.matcher(rankData); // use mode-specific format @@ -174,13 +174,14 @@ private String getInfiniteScore(String rankData, Function f) { Mode mode = Registry.getMode(name); if (mode != null) { leaderboard = mode.getLeaderboard(); - } else { - leaderboard = Modes.DEFAULT.getLeaderboard(); } // use generic format // x_rank } else { rank = Integer.parseInt(rankData); + } + + if (leaderboard == null) { leaderboard = Modes.DEFAULT.getLeaderboard(); } From 636461fd5cfd5cb652dcedbcc0b1d8a1f9bcfc80 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Sat, 17 Aug 2024 00:32:28 +0200 Subject: [PATCH 15/19] fixed heading not working --- .../java/dev/efnilite/ip/config/Option.java | 19 ++++++++++++++----- .../ip/generator/ParkourGenerator.java | 15 +++++++++++---- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/main/java/dev/efnilite/ip/config/Option.java b/src/main/java/dev/efnilite/ip/config/Option.java index e3a644f6..2f286304 100644 --- a/src/main/java/dev/efnilite/ip/config/Option.java +++ b/src/main/java/dev/efnilite/ip/config/Option.java @@ -7,6 +7,7 @@ import dev.efnilite.ip.style.Style; import dev.efnilite.vilib.particle.ParticleData; import org.bukkit.*; +import org.bukkit.block.BlockFace; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.util.Vector; @@ -22,7 +23,7 @@ public class Option { public static List POSSIBLE_LEADS; // Advanced settings - public static Vector HEADING; + public static BlockFace HEADING; public static Map OPTIONS_ENABLED; public static Map OPTIONS_DEFAULTS; @@ -88,7 +89,15 @@ public static void init(boolean firstLoad) { } // Generation - HEADING = stringToVector(Config.GENERATION.getString("advanced.island.parkour.heading")); + String heading = Config.GENERATION.getString("advanced.island.parkour.heading"); + + switch (heading.toLowerCase()) { + case "north" -> HEADING = BlockFace.NORTH; + case "south" -> HEADING = BlockFace.SOUTH; + case "west" -> HEADING = BlockFace.WEST; + case "east" -> HEADING = BlockFace.EAST; + default -> IP.logging().error("Invalid heading: %s".formatted(heading)); + } // Scoring @@ -100,9 +109,9 @@ public static void init(boolean firstLoad) { private static Vector stringToVector(String direction) { return switch (direction.toLowerCase()) { - case "north" -> new org.bukkit.util.Vector(0, 0, -1); - case "south" -> new org.bukkit.util.Vector(0, 0, 1); - case "west" -> new org.bukkit.util.Vector(-1, 0, 0); + case "north" -> new Vector(0, 0, -1); + case "south" -> new Vector(0, 0, 1); + case "west" -> new Vector(-1, 0, 0); default -> new Vector(1, 0, 0); // east }; } diff --git a/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java b/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java index 697fc391..ca6986e2 100644 --- a/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java +++ b/src/main/java/dev/efnilite/ip/generator/ParkourGenerator.java @@ -110,7 +110,7 @@ public class ParkourGenerator { /** * The direction of the parkour */ - public Vector heading = Option.HEADING.clone(); + public Vector heading = Option.HEADING.getDirection(); /** * Generator options @@ -325,10 +325,17 @@ protected Block selectNext(Block current, int distance, int height) { int randomOffset = new JumpOffsetGenerator(height, distance).getRandomOffset(mean, standardDeviation); - Vector offset = new Vector(distance + 1, height, randomOffset); + Vector offset = heading.clone() + .multiply(distance + 1) + .setY(height); + if (offset.getX() == 0) { + offset.setX(randomOffset); + } else { + offset.setZ(randomOffset); + } // rotate offset to match heading - offset.rotateAroundY(angleInY(heading, Option.HEADING.clone())); + offset.rotateAroundY(angleInY(heading, Option.HEADING.getDirection())); return current.getLocation().add(offset).getBlock(); } @@ -544,7 +551,7 @@ int record = leaderboard != null ? leaderboard.get(player.getUUID()).score() : 0 score = 0; start = null; - heading = Option.HEADING; + heading = Option.HEADING.getDirection(); if (regenerate) { // generate back the blocks player.teleport(playerSpawn); From 64a23d9a885301277ec14ac866781e867d1fcedc Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Sat, 17 Aug 2024 01:11:39 +0200 Subject: [PATCH 16/19] fixed heading not working --- CHANGES.md | 3 ++- pom.xml | 2 +- src/main/java/dev/efnilite/ip/player/ParkourPlayer.java | 4 +++- src/main/resources/plugin.yml | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 319117b5..92b4bddf 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,4 +5,5 @@ - Fixed Chinese translation (thanks **[@jhqwqmc](https://github.com/jhqwqmc)**) - Fixed MySQL error on score saving - Fixed being able to take out items in the leaderboard -- Fixed error on joining spectator \ No newline at end of file +- Fixed errors on joining spectator +- Fixed heading not working on parkour \ No newline at end of file diff --git a/pom.xml b/pom.xml index f1d3e967..ebdb2588 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ dev.efnilite IP - 5.2.5 + 5.3.0 17 diff --git a/src/main/java/dev/efnilite/ip/player/ParkourPlayer.java b/src/main/java/dev/efnilite/ip/player/ParkourPlayer.java index 9dba183c..9ea70184 100644 --- a/src/main/java/dev/efnilite/ip/player/ParkourPlayer.java +++ b/src/main/java/dev/efnilite/ip/player/ParkourPlayer.java @@ -130,7 +130,9 @@ public static List getPlayers() { public void unregister() { IP.log("Unregistering player %s".formatted(player.getName())); - if (session.generator.getMode() instanceof MultiMode mode) { + if (session.generator != null && + session.generator.getMode() != null && + session.generator.getMode() instanceof MultiMode mode) { mode.leave(player, session); } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 027dd9c2..7c2a5da2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: 'IP' description: 'Infinitely automatically generating parkour plugin.' author: Efnilite -version: 5.2.5 +version: 5.3.0 api-version: 1.16 main: dev.efnilite.ip.IP softdepend: [floodgate, Vault, PlaceholderAPI, Multiverse-Core, VoidGen] From 5eabe25d0c3f226770512e7bbc19f1262ab4abe0 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Sun, 18 Aug 2024 16:42:15 +0200 Subject: [PATCH 17/19] Revert "Adding optional SkinsRetorer support for displaying skin heads in the leaderboard" This reverts commit c04b20578aab66f8acdb95a7c1f9fec0fe6a1189. --- pom.xml | 11 --- src/main/java/dev/efnilite/ip/IP.java | 7 -- .../efnilite/ip/hook/SkinsRestorerHook.java | 67 ------------------- .../menu/community/SingleLeaderboardMenu.java | 14 +--- 4 files changed, 1 insertion(+), 98 deletions(-) delete mode 100644 src/main/java/dev/efnilite/ip/hook/SkinsRestorerHook.java diff --git a/pom.xml b/pom.xml index 549639a9..ebdb2588 100644 --- a/pom.xml +++ b/pom.xml @@ -89,10 +89,6 @@ Maven Central https://repo.maven.apache.org/maven2/ - - codemc - https://repo.codemc.org/repository/maven-public/ - @@ -158,12 +154,5 @@ 5.11.0-M1 test - - - net.skinsrestorer - skinsrestorer-api - 15.2.0 - provided - \ No newline at end of file diff --git a/src/main/java/dev/efnilite/ip/IP.java b/src/main/java/dev/efnilite/ip/IP.java index 79418f2e..7efaa3ff 100644 --- a/src/main/java/dev/efnilite/ip/IP.java +++ b/src/main/java/dev/efnilite/ip/IP.java @@ -6,7 +6,6 @@ import dev.efnilite.ip.config.Option; import dev.efnilite.ip.hook.HoloHook; import dev.efnilite.ip.hook.PAPIHook; -import dev.efnilite.ip.hook.SkinsRestorerHook; import dev.efnilite.ip.mode.DefaultMode; import dev.efnilite.ip.mode.Modes; import dev.efnilite.ip.mode.SpectatorMode; @@ -93,12 +92,6 @@ public void enable() { Registry.register(new DefaultMode()); Registry.register(new SpectatorMode()); - try { - SkinsRestorerHook.initialize(); - } catch (NoClassDefFoundError e) { - getLogger().warning("SkinsRestorer is not available: " + e.getMessage()); - } - Modes.init(); Menu.init(this); diff --git a/src/main/java/dev/efnilite/ip/hook/SkinsRestorerHook.java b/src/main/java/dev/efnilite/ip/hook/SkinsRestorerHook.java deleted file mode 100644 index 0d84a953..00000000 --- a/src/main/java/dev/efnilite/ip/hook/SkinsRestorerHook.java +++ /dev/null @@ -1,67 +0,0 @@ -package dev.efnilite.ip.hook; - -import net.skinsrestorer.api.PropertyUtils; -import net.skinsrestorer.api.SkinsRestorer; -import net.skinsrestorer.api.SkinsRestorerProvider; -import net.skinsrestorer.api.exception.DataRequestException; -import net.skinsrestorer.api.property.SkinProperty; -import net.skinsrestorer.api.storage.PlayerStorage; -import org.bukkit.Bukkit; -import org.bukkit.profile.PlayerProfile; -import org.bukkit.profile.PlayerTextures; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Optional; -import java.util.UUID; - -public class SkinsRestorerHook { - private static SkinsRestorer skinsRestorer; - private static boolean isInit; - - public static void initialize() { - try { - if (Bukkit.getServer().getPluginManager().getPlugin("SkinsRestorer") != null) { - skinsRestorer = SkinsRestorerProvider.get(); - isInit = skinsRestorer != null; - if (isInit) { - Bukkit.getLogger().info("Registered SkinsRestorer hook"); - } else { - Bukkit.getLogger().warning("Failed to initialize SkinsRestorer hook"); - } - } else { - isInit = false; - Bukkit.getLogger().warning("SkinsRestorer plugin is not enabled or not present"); - } - } catch (NoClassDefFoundError e) { - isInit = false; - Bukkit.getLogger().warning("SkinsRestorer classes not found: " + e.getMessage()); - } - } - - public static PlayerProfile getPlayerHead(UUID uuid, String name) { - if (isInit) { - try { - PlayerStorage playerStorage = skinsRestorer.getPlayerStorage(); - Optional skinProperty = playerStorage.getSkinForPlayer(uuid, name); - if (skinProperty.isPresent()) { - SkinProperty property = skinProperty.get(); - String url = PropertyUtils.getSkinTextureUrl(property); - PlayerTextures textures = Bukkit.createPlayerProfile("RandomName").getTextures(); - textures.setSkin(new URL(url)); - PlayerProfile profile = Bukkit.createPlayerProfile("Random"); - profile.setTextures(textures); - return profile; - } - return null; - } catch (MalformedURLException | DataRequestException e) { - throw new RuntimeException(e); - } - } - else return null; - } - - public static boolean isInitialized() { - return isInit; - } -} diff --git a/src/main/java/dev/efnilite/ip/menu/community/SingleLeaderboardMenu.java b/src/main/java/dev/efnilite/ip/menu/community/SingleLeaderboardMenu.java index 7c831dd1..764a4dc9 100644 --- a/src/main/java/dev/efnilite/ip/menu/community/SingleLeaderboardMenu.java +++ b/src/main/java/dev/efnilite/ip/menu/community/SingleLeaderboardMenu.java @@ -4,7 +4,6 @@ import dev.efnilite.ip.api.Registry; import dev.efnilite.ip.config.Locales; import dev.efnilite.ip.config.Option; -import dev.efnilite.ip.hook.SkinsRestorerHook; import dev.efnilite.ip.leaderboard.Leaderboard; import dev.efnilite.ip.leaderboard.Score; import dev.efnilite.ip.menu.Menus; @@ -15,16 +14,13 @@ import dev.efnilite.vilib.inventory.item.Item; import dev.efnilite.vilib.inventory.item.MenuItem; import dev.efnilite.vilib.util.SkullSetter; -import net.skinsrestorer.api.exception.DataRequestException; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.profile.PlayerProfile; -import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -88,14 +84,6 @@ public void open(Player player, Mode mode, Leaderboard.Sort sort) { if (meta != null) { SkullSetter.setPlayerHead(op, meta); item.meta(meta); - } else { - if (SkinsRestorerHook.isInitialized()) { - PlayerProfile pp = SkinsRestorerHook.getPlayerHead(op.getUniqueId(), op.getName()); - if (pp != null) { - meta.setOwnerProfile(pp); - item.meta(meta); - } - } } } } @@ -147,4 +135,4 @@ public void open(Player player, Mode mode, Leaderboard.Sort sort) { })) .open(player); } -} +} \ No newline at end of file From f391dc7755941697e3bb6c4b762a1b84d5d40e3c Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Sun, 18 Aug 2024 16:42:19 +0200 Subject: [PATCH 18/19] Revert "Back 1 line" This reverts commit 944e4c0672d16a63a0a92bd906ee5bf962099ffb. --- .../dev/efnilite/ip/menu/community/SingleLeaderboardMenu.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/dev/efnilite/ip/menu/community/SingleLeaderboardMenu.java b/src/main/java/dev/efnilite/ip/menu/community/SingleLeaderboardMenu.java index 764a4dc9..e322ed68 100644 --- a/src/main/java/dev/efnilite/ip/menu/community/SingleLeaderboardMenu.java +++ b/src/main/java/dev/efnilite/ip/menu/community/SingleLeaderboardMenu.java @@ -71,7 +71,6 @@ public void open(Player player, Mode mode, Leaderboard.Sort sort) { // Player head gathering ItemStack stack = item.build(); - stack.setType(Material.PLAYER_HEAD); // if there are more than 36 players, don't show the heads to avoid server crashing // and bedrock has no player skull support From 9ef21a10494f6b7483ed5c7295074075bad8e159 Mon Sep 17 00:00:00 2001 From: Efnilite <35348263+Efnilite@users.noreply.github.com> Date: Sun, 18 Aug 2024 16:43:44 +0200 Subject: [PATCH 19/19] update changes --- CHANGES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 92b4bddf..c43f78c0 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,9 +1,9 @@ **[Infinite Elytra Parkour](https://www.spigotmc.org/resources/115322/) | [Infinite Parkour+](https://www.spigotmc.org/resources/105019/)** - Added model id support (thanks **[@wilddip](https://github.com/wilddip)**) -- Added SkinsRestorer support (thanks **[@TheJCN](https://github.com/TheJCN)**) - Fixed Chinese translation (thanks **[@jhqwqmc](https://github.com/jhqwqmc)**) - Fixed MySQL error on score saving - Fixed being able to take out items in the leaderboard - Fixed errors on joining spectator -- Fixed heading not working on parkour \ No newline at end of file +- Fixed errors on leaving +- Fixed heading not working on parkour