From f924c4dd55c2d183313de9f9a42f390b9ce18042 Mon Sep 17 00:00:00 2001 From: youhavetrouble Date: Sun, 18 Jun 2023 02:52:23 +0200 Subject: [PATCH] add player to a clientside team removing nametags --- build.gradle.kts | 66 +++++++++---------- gradle/wrapper/gradle-wrapper.properties | 5 ++ .../notjustnameplates/NotJustNameplates.java | 8 +-- .../listeners/TeamManagementListener.java | 30 +++++---- .../nameplates/Nameplate.java | 59 ++++++++++++++++- src/main/resources/paper-plugin.yml | 4 +- 6 files changed, 114 insertions(+), 58 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c6dbd46..7ba83d5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,49 +1,45 @@ plugins { - id 'java' - id 'io.papermc.paperweight.userdev' version("1.5.5") + `java-library` + id("io.papermc.paperweight.userdev") version "1.5.5" + id("xyz.jpenilla.run-paper") version "2.1.0" // Adds runServer and runMojangMappedServer tasks for testing } -group = 'me.youhavetrouble' -version = '1.0' +group = "me.youhavetrouble" +version = "1.0.0-SNAPSHOT" +description = "Nameplates using display entities" -repositories { - mavenCentral() - maven { - name = "papermc-repo" - url = "https://repo.papermc.io/repository/maven-public/" - } - maven { - name = "sonatype" - url = "https://oss.sonatype.org/content/groups/public/" - } +java { + // Configure the java toolchain. This allows gradle to auto-provision JDK 17 on systems that only have JDK 8 installed for example. + toolchain.languageVersion.set(JavaLanguageVersion.of(17)) } dependencies { paperweight.paperDevBundle("1.20-R0.1-SNAPSHOT") - compileOnly "io.papermc.paper:paper-api:1.20-R0.1-SNAPSHOT" } -def targetJavaVersion = 17 -java { - def javaVersion = JavaVersion.toVersion(targetJavaVersion) - sourceCompatibility = javaVersion - targetCompatibility = javaVersion - if (JavaVersion.current() < javaVersion) { - toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) +tasks { + assemble { + dependsOn(reobfJar) } -} -tasks.withType(JavaCompile).configureEach { - if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { - options.release = targetJavaVersion + compileJava { + options.encoding = Charsets.UTF_8.name() + options.release.set(17) } -} - -processResources { - def props = [version: version] - inputs.properties props - filteringCharset 'UTF-8' - filesMatching('paper-plugin.yml') { - expand props + javadoc { + options.encoding = Charsets.UTF_8.name() } -} + processResources { + filteringCharset = Charsets.UTF_8.name() + val props = mapOf( + "name" to project.name, + "version" to project.version, + "description" to project.description, + "apiVersion" to "1.20" + ) + inputs.properties(props) + filesMatching("paper-plugin.yml") { + expand(props) + } + } +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 02f683e..37aef8d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java b/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java index f1024fb..7eb50d3 100644 --- a/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java +++ b/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java @@ -1,17 +1,13 @@ package me.youhavetrouble.notjustnameplates; +import me.youhavetrouble.notjustnameplates.listeners.TeamManagementListener; import org.bukkit.plugin.java.JavaPlugin; public final class NotJustNameplates extends JavaPlugin { @Override public void onEnable() { - // Plugin startup logic - + getServer().getPluginManager().registerEvents(new TeamManagementListener(), this); } - @Override - public void onDisable() { - // Plugin shutdown logic - } } diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/listeners/TeamManagementListener.java b/src/main/java/me/youhavetrouble/notjustnameplates/listeners/TeamManagementListener.java index 727e61a..839019e 100644 --- a/src/main/java/me/youhavetrouble/notjustnameplates/listeners/TeamManagementListener.java +++ b/src/main/java/me/youhavetrouble/notjustnameplates/listeners/TeamManagementListener.java @@ -1,6 +1,5 @@ package me.youhavetrouble.notjustnameplates.listeners; -import me.youhavetrouble.notjustnameplates.teams.PacketTeam; import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket; import net.minecraft.world.scores.PlayerTeam; import net.minecraft.world.scores.Scoreboard; @@ -11,16 +10,17 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.jetbrains.annotations.NotNull; import java.util.HashSet; -public class PlayerJoinLeaveListener implements Listener { +public class TeamManagementListener implements Listener { private final Scoreboard scoreboard = new Scoreboard(); private final PlayerTeam team = new PlayerTeam(scoreboard, "notjustnameplates"); private final HashSet players = new HashSet<>(); - public PlayerJoinLeaveListener() { + public TeamManagementListener() { team.setNameTagVisibility(PlayerTeam.Visibility.NEVER); } @@ -28,9 +28,10 @@ public class PlayerJoinLeaveListener implements Listener { public void onPlayerJoin(PlayerJoinEvent event) { Player joiner = event.getPlayer(); for (Player player : event.getPlayer().getServer().getOnlinePlayers()) { + if (player.equals(joiner)) continue; addPlayerToTeam(joiner, player); } - PacketTeam.sendTeamMembers(joiner); + sendTeamMembers(joiner); } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) @@ -41,27 +42,28 @@ public class PlayerJoinLeaveListener implements Listener { } } - private void addPlayerToTeam(Player player, Player target) { + private void addPlayerToTeam(@NotNull Player player, @NotNull Player target) { CraftPlayer craftPlayer = (CraftPlayer) target; players.add(player.getName()); - - ClientboundSetPlayerTeamPacket teamCreatePacket = ClientboundSetPlayerTeamPacket.createAddOrModifyPacket(team, true); + ClientboundSetPlayerTeamPacket teamCreatePacket = ClientboundSetPlayerTeamPacket + .createAddOrModifyPacket(team, true); craftPlayer.getHandle().connection.send(teamCreatePacket); - - ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket.createPlayerPacket(team, player.getName(), ClientboundSetPlayerTeamPacket.Action.ADD); - + ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket + .createPlayerPacket(team, player.getName(), ClientboundSetPlayerTeamPacket.Action.ADD); craftPlayer.getHandle().connection.send(packet); } - private void removePlayerFromTeam(Player player, Player target) { - ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket.createPlayerPacket(team, player.getName(), ClientboundSetPlayerTeamPacket.Action.REMOVE); + private void removePlayerFromTeam(@NotNull Player player, @NotNull Player target) { + ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket + .createPlayerPacket(team, player.getName(), ClientboundSetPlayerTeamPacket.Action.REMOVE); CraftPlayer craftPlayer = (CraftPlayer) target; players.remove(player.getName()); craftPlayer.getHandle().connection.send(packet); } - private void sendTeamMembers(Player target) { - ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket.createMultiplePlayerPacket(team, players, ClientboundSetPlayerTeamPacket.Action.ADD); + private void sendTeamMembers(@NotNull Player target) { + ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket + .createMultiplePlayerPacket(team, players, ClientboundSetPlayerTeamPacket.Action.ADD); CraftPlayer craftPlayer = (CraftPlayer) target; craftPlayer.getHandle().connection.send(packet); } diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java b/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java index ff96f30..4b39cee 100644 --- a/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java +++ b/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java @@ -1,2 +1,59 @@ -package me.youhavetrouble.notjustnameplates.nameplates;public class Nameplate { +package me.youhavetrouble.notjustnameplates.nameplates; + +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class Nameplate { + + private Component name; + private final UUID playerUuid; + private double heightOffset = 0.5; + + public Nameplate(@NotNull UUID playerUuid, @NotNull Component name) { + this.playerUuid = playerUuid; + this.name = name; + } + + /** + * Get content of the nameplate + * @return content of the nameplate + */ + public Component getName() { + return name; + } + + /** + * Set content of the nameplate + */ + public void setName(Component name) { + this.name = name; + } + + /** + * Set height offset from the player's eye location + */ + public void setHeightOffset(double heightOffset) { + this.heightOffset = heightOffset; + } + + /** + * Update the nameplate position + */ + public void updatePosition() { + Player player = Bukkit.getPlayer(playerUuid); + if (player == null) return; + Location location = player + .getEyeLocation() + .clone() + .add(0, heightOffset, 0); + + // TODO move fake entity to location + + } + } diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml index 50de072..8c768c0 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/paper-plugin.yml @@ -1,7 +1,7 @@ name: NotJustNameplates version: '${version}' main: me.youhavetrouble.notjustnameplates.NotJustNameplates -api-version: 1.20 -authors: [YouHaveTrouble] +api-version: "1.20" +authors: ["YouHaveTrouble"] description: Nameplates using display entities website: https://youhavetrouble.me