From c192afaaf2bd338e1750be95121743d40eec00bb Mon Sep 17 00:00:00 2001 From: youhavetrouble Date: Sun, 25 Jun 2023 15:01:51 +0200 Subject: [PATCH] switch to purpur api, use teleport hindered --- build.gradle.kts | 6 ++++- .../notjustnameplates/NotJustNameplates.java | 3 +++ .../nameplates/Nameplate.java | 16 ++++++++++++ .../nameplates/TeamManagementListener.java | 26 ++++++++++++++++--- 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4fb466e..095f229 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,8 +13,12 @@ java { toolchain.languageVersion.set(JavaLanguageVersion.of(17)) } +repositories { + maven("https://repo.purpurmc.org/snapshots/") +} + dependencies { - paperweight.paperDevBundle("1.20.1-R0.1-SNAPSHOT") + paperweight.paperDevBundle("1.20.1-R0.1-SNAPSHOT", "org.purpurmc.purpur") } tasks { diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java b/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java index 477f9c5..8d83ea6 100644 --- a/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java +++ b/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java @@ -2,10 +2,13 @@ package me.youhavetrouble.notjustnameplates; import me.youhavetrouble.notjustnameplates.commands.MainCommand; import me.youhavetrouble.notjustnameplates.nameplates.TeamManagementListener; +import org.bukkit.entity.Player; import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.permissions.DefaultPermissions; +import java.util.UUID; + public final class NotJustNameplates extends JavaPlugin { private static NotJustNameplates instance; diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java b/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java index d355a02..3b54fcc 100644 --- a/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java +++ b/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java @@ -6,10 +6,13 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.Color; +import org.bukkit.NamespacedKey; +import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.TextDisplay; import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.persistence.PersistentDataType; import org.bukkit.util.Transformation; import org.jetbrains.annotations.NotNull; import org.joml.AxisAngle4f; @@ -19,6 +22,9 @@ import java.util.UUID; public class Nameplate { + public static final NamespacedKey NAMEPLATE_KEY = new NamespacedKey(NotJustNameplates.getInstance(), "nameplate"); + + protected boolean forceHide = false; private DisplayContent content; private final UUID playerUuid; private final float heightOffset = 0.7f; @@ -32,6 +38,10 @@ public class Nameplate { this.content = content; } + protected TextDisplay getEntity() { + return textDisplay; + } + private void createDisplayEntity() { if (textDisplay != null && !textDisplay.isDead()) return; if (this.content == null) return; @@ -44,6 +54,7 @@ public class Nameplate { EntityType.TEXT_DISPLAY, CreatureSpawnEvent.SpawnReason.CUSTOM, entity -> { TextDisplay textDisplay = (TextDisplay) entity; + textDisplay.getPersistentDataContainer().set(NAMEPLATE_KEY, PersistentDataType.STRING, player.getName()); textDisplay.setInvulnerable(true); textDisplay.setPersistent(false); textDisplay.setAlignment(alignment); @@ -103,11 +114,16 @@ public class Nameplate { * Update the nameplate position */ public void update() { + if (forceHide) { + remove(); + return; + } Player player = Bukkit.getPlayer(playerUuid); if (player == null || player.isDead() || content.getCurrentFrame().text() == null) { remove(); return; } + createDisplayEntity(); if (textDisplay == null || textDisplay.isDead()) return; if (!player.getPassengers().contains(textDisplay)) { diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/TeamManagementListener.java b/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/TeamManagementListener.java index 5103b48..f63224a 100644 --- a/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/TeamManagementListener.java +++ b/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/TeamManagementListener.java @@ -1,20 +1,27 @@ package me.youhavetrouble.notjustnameplates.nameplates; +import io.papermc.paper.event.entity.EntityPortalReadyEvent; import me.youhavetrouble.notjustnameplates.NotJustNameplates; import me.youhavetrouble.notjustnameplates.displays.DisplayContent; import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket; import net.minecraft.world.scores.PlayerTeam; import net.minecraft.world.scores.Scoreboard; import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; import org.bukkit.entity.Player; +import org.bukkit.entity.TextDisplay; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.entity.EntityPortalEnterEvent; +import org.bukkit.event.entity.EntityPortalExitEvent; +import org.bukkit.event.player.*; +import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; +import org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent; import java.util.HashMap; @@ -54,11 +61,24 @@ public class TeamManagementListener implements Listener { @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onPlayerTeleport(PlayerTeleportEvent event) { + NotJustNameplates.getInstance().getLogger().info("Teleport event"); Nameplate nameplate = players.get(event.getPlayer().getName()); if (nameplate == null) return; nameplate.remove(); } + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void onPlayerTeleportHindered(EntityTeleportHinderedEvent event) { + if (!(event.getEntity() instanceof Player player)) return; + if (event.getReason() != EntityTeleportHinderedEvent.Reason.IS_VEHICLE) return; + NotJustNameplates.getInstance().getLogger().info("Teleport hindered event"); + Nameplate nameplate = players.get(player.getName()); + if (nameplate == null) return; + nameplate.remove(); + event.setShouldRetry(true); + + } + public void reloadTeams() { this.players.values().forEach(Nameplate::remove); this.players.clear();