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 {
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
}
}
processResources {
def props = [version: version]
inputs.properties props
filteringCharset 'UTF-8'
filesMatching('paper-plugin.yml') {
expand props
compileJava {
options.encoding = Charsets.UTF_8.name()
options.release.set(17)
}
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)
}
}
}
+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
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
@@ -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
}
}
@@ -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<String> 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);
}
@@ -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
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