From 7512a974611ece8dcc82c5d0313b06fef5ece72f Mon Sep 17 00:00:00 2001 From: XiaoMoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Fri, 11 Oct 2024 03:15:44 +0800 Subject: [PATCH] fix teleport --- ...hangeListener.java => PlayerListener.java} | 16 ++++++++- .../api/feature/RespawnListener.java | 33 ------------------- .../feature/tag/UnlimitedTagManagerImpl.java | 25 ++++++++++---- bukkit/build.gradle.kts | 2 +- .../bukkit/BukkitCustomNameplates.java | 28 +++++++++------- 5 files changed, 50 insertions(+), 54 deletions(-) rename api/src/main/java/net/momirealms/customnameplates/api/feature/{WorldChangeListener.java => PlayerListener.java} (75%) delete mode 100644 api/src/main/java/net/momirealms/customnameplates/api/feature/RespawnListener.java diff --git a/api/src/main/java/net/momirealms/customnameplates/api/feature/WorldChangeListener.java b/api/src/main/java/net/momirealms/customnameplates/api/feature/PlayerListener.java similarity index 75% rename from api/src/main/java/net/momirealms/customnameplates/api/feature/WorldChangeListener.java rename to api/src/main/java/net/momirealms/customnameplates/api/feature/PlayerListener.java index 8638410..a328453 100644 --- a/api/src/main/java/net/momirealms/customnameplates/api/feature/WorldChangeListener.java +++ b/api/src/main/java/net/momirealms/customnameplates/api/feature/PlayerListener.java @@ -22,7 +22,7 @@ import net.momirealms.customnameplates.api.CNPlayer; /** * Listener for handling player change worlds */ -public interface WorldChangeListener { +public interface PlayerListener { /** * Called when a player changes the world @@ -30,4 +30,18 @@ public interface WorldChangeListener { * @param player the player who changes the world */ void onChangeWorld(CNPlayer player); + + /** + * Called when a player respawns + * + * @param player the player who respawns + */ + void onRespawn(CNPlayer player); + + /** + * Called when a player teleports + * + * @param player the player who respawns + */ + void onTeleport(CNPlayer player); } diff --git a/api/src/main/java/net/momirealms/customnameplates/api/feature/RespawnListener.java b/api/src/main/java/net/momirealms/customnameplates/api/feature/RespawnListener.java deleted file mode 100644 index 9c31a8b..0000000 --- a/api/src/main/java/net/momirealms/customnameplates/api/feature/RespawnListener.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) <2024> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.momirealms.customnameplates.api.feature; - -import net.momirealms.customnameplates.api.CNPlayer; - -/** - * Listener for handling player respawn - */ -public interface RespawnListener { - - /** - * Called when a player respawns - * - * @param player the player who respawns - */ - void onRespawn(CNPlayer player); -} diff --git a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/UnlimitedTagManagerImpl.java b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/UnlimitedTagManagerImpl.java index 5cba195..070deb6 100644 --- a/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/UnlimitedTagManagerImpl.java +++ b/backend/src/main/java/net/momirealms/customnameplates/backend/feature/tag/UnlimitedTagManagerImpl.java @@ -33,8 +33,7 @@ import net.momirealms.customnameplates.api.ConfigManager; import net.momirealms.customnameplates.api.CustomNameplates; import net.momirealms.customnameplates.api.feature.CarouselText; import net.momirealms.customnameplates.api.feature.JoinQuitListener; -import net.momirealms.customnameplates.api.feature.RespawnListener; -import net.momirealms.customnameplates.api.feature.WorldChangeListener; +import net.momirealms.customnameplates.api.feature.PlayerListener; import net.momirealms.customnameplates.api.feature.tag.NameTagConfig; import net.momirealms.customnameplates.api.feature.tag.TagRenderer; import net.momirealms.customnameplates.api.feature.tag.UnlimitedTagManager; @@ -53,7 +52,7 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; -public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitListener, WorldChangeListener, RespawnListener { +public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitListener, PlayerListener { private final CustomNameplates plugin; private final LinkedHashMap configs = new LinkedHashMap<>(); @@ -106,10 +105,12 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis @Override public void onChangeWorld(CNPlayer player) { - if (player.isTempPreviewing() || player.isToggleablePreviewing()) { - onRemovePlayer(player, player); - onAddPlayer(player, player); - } + plugin.getScheduler().async().execute(() -> { + if (player.isOnline() && (player.isTempPreviewing() || player.isToggleablePreviewing())) { + onRemovePlayer(player, player); + onAddPlayer(player, player); + } + }); } @Override @@ -122,6 +123,16 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis }, 50, TimeUnit.MILLISECONDS); } + @Override + public void onTeleport(CNPlayer player) { + plugin.getScheduler().asyncLater(() -> { + if (player.isOnline() && (player.isTempPreviewing() || player.isToggleablePreviewing())) { + onRemovePlayer(player, player); + onAddPlayer(player, player); + } + }, 50, TimeUnit.MILLISECONDS); + } + @Override public int previewDuration() { return previewDuration; diff --git a/bukkit/build.gradle.kts b/bukkit/build.gradle.kts index 138e6cb..05a8380 100644 --- a/bukkit/build.gradle.kts +++ b/bukkit/build.gradle.kts @@ -46,7 +46,7 @@ dependencies { tasks { shadowJar { - archiveFileName = "CustomNameplates-Bukkit-${rootProject.properties["project_version"]}.jar" + archiveFileName = "CustomNameplates-${rootProject.properties["project_version"]}.jar" destinationDirectory.set(file("$rootDir/target")) relocate("net.kyori", "net.momirealms.customnameplates.libraries") relocate("org.incendo", "net.momirealms.customnameplates.libraries") diff --git a/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCustomNameplates.java b/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCustomNameplates.java index 85915bf..539f877 100644 --- a/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCustomNameplates.java +++ b/bukkit/src/main/java/net/momirealms/customnameplates/bukkit/BukkitCustomNameplates.java @@ -21,8 +21,7 @@ import net.momirealms.customnameplates.api.*; import net.momirealms.customnameplates.api.event.NameplatesReloadEvent; import net.momirealms.customnameplates.api.feature.ChatListener; import net.momirealms.customnameplates.api.feature.JoinQuitListener; -import net.momirealms.customnameplates.api.feature.RespawnListener; -import net.momirealms.customnameplates.api.feature.WorldChangeListener; +import net.momirealms.customnameplates.api.feature.PlayerListener; import net.momirealms.customnameplates.api.helper.AdventureHelper; import net.momirealms.customnameplates.api.helper.VersionHelper; import net.momirealms.customnameplates.backend.feature.actionbar.ActionBarManagerImpl; @@ -57,10 +56,7 @@ import org.bukkit.Location; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.*; import org.bukkit.plugin.java.JavaPlugin; import java.io.InputStream; @@ -83,8 +79,7 @@ public class BukkitCustomNameplates extends CustomNameplates implements Listener private final JavaPlugin bootstrap; private final List joinQuitListeners = new ArrayList<>(); - private final List worldChangeListeners = new ArrayList<>(); - private final List respawnListeners = new ArrayList<>(); + private final List playerListeners = new ArrayList<>(); private boolean loaded = false; @@ -168,8 +163,7 @@ public class BukkitCustomNameplates extends CustomNameplates implements Listener this.joinQuitListeners.add((JoinQuitListener) actionBarManager); this.joinQuitListeners.add((JoinQuitListener) bossBarManager); this.joinQuitListeners.add((JoinQuitListener) unlimitedTagManager); - this.worldChangeListeners.add((WorldChangeListener) unlimitedTagManager); - this.respawnListeners.add((RespawnListener) unlimitedTagManager); + this.playerListeners.add((PlayerListener) unlimitedTagManager); this.chatManager.registerListener((ChatListener) bubbleManager); Bukkit.getPluginManager().registerEvents(this, getBootstrap()); @@ -367,7 +361,7 @@ public class BukkitCustomNameplates extends CustomNameplates implements Listener public void onChangeWorld(PlayerChangedWorldEvent event) { CNPlayer cnPlayer = getPlayer(event.getPlayer().getUniqueId()); if (cnPlayer != null) { - for (WorldChangeListener listener : worldChangeListeners) { + for (PlayerListener listener : playerListeners) { listener.onChangeWorld(cnPlayer); } } @@ -377,12 +371,22 @@ public class BukkitCustomNameplates extends CustomNameplates implements Listener public void onRespawn(PlayerRespawnEvent event) { CNPlayer cnPlayer = getPlayer(event.getPlayer().getUniqueId()); if (cnPlayer != null) { - for (RespawnListener listener : respawnListeners) { + for (PlayerListener listener : playerListeners) { listener.onRespawn(cnPlayer); } } } + @EventHandler(ignoreCancelled = true) + public void onTeleport(PlayerTeleportEvent event) { + CNPlayer cnPlayer = getPlayer(event.getPlayer().getUniqueId()); + if (cnPlayer != null) { + for (PlayerListener listener : playerListeners) { + listener.onTeleport(cnPlayer); + } + } + } + public BukkitSenderFactory getSenderFactory() { return senderFactory; }