add player to a clientside team removing nametags

This commit is contained in:
2023-06-18 02:52:23 +02:00
parent f74658db28
commit f924c4dd55
6 changed files with 114 additions and 58 deletions
+31 -35
View File
@@ -1,49 +1,45 @@
plugins { plugins {
id 'java' `java-library`
id 'io.papermc.paperweight.userdev' version("1.5.5") 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' group = "me.youhavetrouble"
version = '1.0' version = "1.0.0-SNAPSHOT"
description = "Nameplates using display entities"
repositories { java {
mavenCentral() // Configure the java toolchain. This allows gradle to auto-provision JDK 17 on systems that only have JDK 8 installed for example.
maven { toolchain.languageVersion.set(JavaLanguageVersion.of(17))
name = "papermc-repo"
url = "https://repo.papermc.io/repository/maven-public/"
}
maven {
name = "sonatype"
url = "https://oss.sonatype.org/content/groups/public/"
}
} }
dependencies { dependencies {
paperweight.paperDevBundle("1.20-R0.1-SNAPSHOT") paperweight.paperDevBundle("1.20-R0.1-SNAPSHOT")
compileOnly "io.papermc.paper:paper-api:1.20-R0.1-SNAPSHOT"
} }
def targetJavaVersion = 17 tasks {
java { assemble {
def javaVersion = JavaVersion.toVersion(targetJavaVersion) dependsOn(reobfJar)
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
if (JavaVersion.current() < javaVersion) {
toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
} }
}
tasks.withType(JavaCompile).configureEach { compileJava {
if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { options.encoding = Charsets.UTF_8.name()
options.release = targetJavaVersion options.release.set(17)
} }
} javadoc {
options.encoding = Charsets.UTF_8.name()
processResources {
def props = [version: version]
inputs.properties props
filteringCharset 'UTF-8'
filesMatching('paper-plugin.yml') {
expand props
} }
} 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)
}
}
}
+5
View File
@@ -1 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
@@ -1,17 +1,13 @@
package me.youhavetrouble.notjustnameplates; package me.youhavetrouble.notjustnameplates;
import me.youhavetrouble.notjustnameplates.listeners.TeamManagementListener;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
public final class NotJustNameplates extends JavaPlugin { public final class NotJustNameplates extends JavaPlugin {
@Override @Override
public void onEnable() { public void onEnable() {
// Plugin startup logic getServer().getPluginManager().registerEvents(new TeamManagementListener(), this);
} }
@Override
public void onDisable() {
// Plugin shutdown logic
}
} }
@@ -1,6 +1,5 @@
package me.youhavetrouble.notjustnameplates.listeners; package me.youhavetrouble.notjustnameplates.listeners;
import me.youhavetrouble.notjustnameplates.teams.PacketTeam;
import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket; import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket;
import net.minecraft.world.scores.PlayerTeam; import net.minecraft.world.scores.PlayerTeam;
import net.minecraft.world.scores.Scoreboard; import net.minecraft.world.scores.Scoreboard;
@@ -11,16 +10,17 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet; import java.util.HashSet;
public class PlayerJoinLeaveListener implements Listener { public class TeamManagementListener implements Listener {
private final Scoreboard scoreboard = new Scoreboard(); private final Scoreboard scoreboard = new Scoreboard();
private final PlayerTeam team = new PlayerTeam(scoreboard, "notjustnameplates"); private final PlayerTeam team = new PlayerTeam(scoreboard, "notjustnameplates");
private final HashSet<String> players = new HashSet<>(); private final HashSet<String> players = new HashSet<>();
public PlayerJoinLeaveListener() { public TeamManagementListener() {
team.setNameTagVisibility(PlayerTeam.Visibility.NEVER); team.setNameTagVisibility(PlayerTeam.Visibility.NEVER);
} }
@@ -28,9 +28,10 @@ public class PlayerJoinLeaveListener implements Listener {
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
Player joiner = event.getPlayer(); Player joiner = event.getPlayer();
for (Player player : event.getPlayer().getServer().getOnlinePlayers()) { for (Player player : event.getPlayer().getServer().getOnlinePlayers()) {
if (player.equals(joiner)) continue;
addPlayerToTeam(joiner, player); addPlayerToTeam(joiner, player);
} }
PacketTeam.sendTeamMembers(joiner); sendTeamMembers(joiner);
} }
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) @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; CraftPlayer craftPlayer = (CraftPlayer) target;
players.add(player.getName()); players.add(player.getName());
ClientboundSetPlayerTeamPacket teamCreatePacket = ClientboundSetPlayerTeamPacket
ClientboundSetPlayerTeamPacket teamCreatePacket = ClientboundSetPlayerTeamPacket.createAddOrModifyPacket(team, true); .createAddOrModifyPacket(team, true);
craftPlayer.getHandle().connection.send(teamCreatePacket); craftPlayer.getHandle().connection.send(teamCreatePacket);
ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket
ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket.createPlayerPacket(team, player.getName(), ClientboundSetPlayerTeamPacket.Action.ADD); .createPlayerPacket(team, player.getName(), ClientboundSetPlayerTeamPacket.Action.ADD);
craftPlayer.getHandle().connection.send(packet); craftPlayer.getHandle().connection.send(packet);
} }
private void removePlayerFromTeam(Player player, Player target) { private void removePlayerFromTeam(@NotNull Player player, @NotNull Player target) {
ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket.createPlayerPacket(team, player.getName(), ClientboundSetPlayerTeamPacket.Action.REMOVE); ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket
.createPlayerPacket(team, player.getName(), ClientboundSetPlayerTeamPacket.Action.REMOVE);
CraftPlayer craftPlayer = (CraftPlayer) target; CraftPlayer craftPlayer = (CraftPlayer) target;
players.remove(player.getName()); players.remove(player.getName());
craftPlayer.getHandle().connection.send(packet); craftPlayer.getHandle().connection.send(packet);
} }
private void sendTeamMembers(Player target) { private void sendTeamMembers(@NotNull Player target) {
ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket.createMultiplePlayerPacket(team, players, ClientboundSetPlayerTeamPacket.Action.ADD); ClientboundSetPlayerTeamPacket packet = ClientboundSetPlayerTeamPacket
.createMultiplePlayerPacket(team, players, ClientboundSetPlayerTeamPacket.Action.ADD);
CraftPlayer craftPlayer = (CraftPlayer) target; CraftPlayer craftPlayer = (CraftPlayer) target;
craftPlayer.getHandle().connection.send(packet); craftPlayer.getHandle().connection.send(packet);
} }
@@ -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
}
} }
+2 -2
View File
@@ -1,7 +1,7 @@
name: NotJustNameplates name: NotJustNameplates
version: '${version}' version: '${version}'
main: me.youhavetrouble.notjustnameplates.NotJustNameplates main: me.youhavetrouble.notjustnameplates.NotJustNameplates
api-version: 1.20 api-version: "1.20"
authors: [YouHaveTrouble] authors: ["YouHaveTrouble"]
description: Nameplates using display entities description: Nameplates using display entities
website: https://youhavetrouble.me website: https://youhavetrouble.me