Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-16 11:30:06 +01:00
bffb08c2f9
The Paper method was chosen for deprecation because it was more restrictive in that it has an isGliding check.
127 Zeilen
6.0 KiB
Diff
127 Zeilen
6.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Cryptite <cryptite@gmail.com>
|
|
Date: Tue, 21 Sep 2021 18:17:33 -0500
|
|
Subject: [PATCH] Multiple Entries with Scoreboards
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetPlayerTeamPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetPlayerTeamPacket.java
|
|
index ee37ec0de1ca969144824427ae42b0c81434a1b4..4ebe22ac20f1a98694cc3bec570ef5bbf06f00aa 100644
|
|
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetPlayerTeamPacket.java
|
|
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetPlayerTeamPacket.java
|
|
@@ -42,6 +42,12 @@ public class ClientboundSetPlayerTeamPacket implements Packet<ClientGamePacketLi
|
|
return new ClientboundSetPlayerTeamPacket(team.getName(), operation == ClientboundSetPlayerTeamPacket.Action.ADD ? 3 : 4, Optional.empty(), ImmutableList.of(playerName));
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public static ClientboundSetPlayerTeamPacket createMultiplePlayerPacket(PlayerTeam team, Collection<String> players, ClientboundSetPlayerTeamPacket.Action operation) {
|
|
+ return new ClientboundSetPlayerTeamPacket(team.getName(), operation == ClientboundSetPlayerTeamPacket.Action.ADD ? 3 : 4, Optional.empty(), players);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public ClientboundSetPlayerTeamPacket(FriendlyByteBuf buf) {
|
|
this.name = buf.readUtf();
|
|
this.method = buf.readByte();
|
|
diff --git a/src/main/java/net/minecraft/server/ServerScoreboard.java b/src/main/java/net/minecraft/server/ServerScoreboard.java
|
|
index e84332b6f031e83283c1b6e90bb82a6053ff46d7..03d13c2425170a6513ea7442a4a12fc9aa6e211d 100644
|
|
--- a/src/main/java/net/minecraft/server/ServerScoreboard.java
|
|
+++ b/src/main/java/net/minecraft/server/ServerScoreboard.java
|
|
@@ -95,6 +95,25 @@ public class ServerScoreboard extends Scoreboard {
|
|
}
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public boolean addPlayersToTeam(java.util.Collection<String> players, PlayerTeam team) {
|
|
+ boolean anyAdded = false;
|
|
+ for (String playerName : players) {
|
|
+ if (super.addPlayerToTeam(playerName, team)) {
|
|
+ anyAdded = true;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (anyAdded) {
|
|
+ this.broadcastAll(ClientboundSetPlayerTeamPacket.createMultiplePlayerPacket(team, players, ClientboundSetPlayerTeamPacket.Action.ADD));
|
|
+ this.setDirty();
|
|
+ return true;
|
|
+ } else {
|
|
+ return false;
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public void removePlayerFromTeam(String playerName, PlayerTeam team) {
|
|
super.removePlayerFromTeam(playerName, team);
|
|
@@ -102,6 +121,17 @@ public class ServerScoreboard extends Scoreboard {
|
|
this.setDirty();
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public void removePlayersFromTeam(java.util.Collection<String> players, PlayerTeam team) {
|
|
+ for (String playerName : players) {
|
|
+ super.removePlayerFromTeam(playerName, team);
|
|
+ }
|
|
+
|
|
+ this.broadcastAll(ClientboundSetPlayerTeamPacket.createMultiplePlayerPacket(team, players, ClientboundSetPlayerTeamPacket.Action.REMOVE));
|
|
+ this.setDirty();
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public void onObjectiveAdded(Objective objective) {
|
|
super.onObjectiveAdded(objective);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java
|
|
index f0b59dd4b7c3d857f7aa7c8263c760f7a46c6e34..c25ab8baf2eb66f85a60280e32a134c99f21b40c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java
|
|
@@ -229,6 +229,21 @@ final class CraftTeam extends CraftScoreboardComponent implements Team {
|
|
scoreboard.board.addPlayerToTeam(entry, this.team);
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public void addEntities(java.util.Collection<org.bukkit.entity.Entity> entities) throws IllegalStateException, IllegalArgumentException {
|
|
+ this.addEntries(entities.stream().map(entity -> ((org.bukkit.craftbukkit.entity.CraftEntity) entity).getHandle().getScoreboardName()).toList());
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void addEntries(java.util.Collection<String> entries) throws IllegalStateException, IllegalArgumentException {
|
|
+ Preconditions.checkArgument(entries != null, "Entries cannot be null");
|
|
+ CraftScoreboard scoreboard = this.checkState();
|
|
+
|
|
+ ((net.minecraft.server.ServerScoreboard) scoreboard.board).addPlayersToTeam(entries, this.team);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public boolean removePlayer(OfflinePlayer player) {
|
|
Preconditions.checkArgument(player != null, "OfflinePlayer cannot be null");
|
|
@@ -248,6 +263,28 @@ final class CraftTeam extends CraftScoreboardComponent implements Team {
|
|
return true;
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public boolean removeEntities(java.util.Collection<org.bukkit.entity.Entity> entities) throws IllegalStateException, IllegalArgumentException {
|
|
+ return this.removeEntries(entities.stream().map(entity -> ((org.bukkit.craftbukkit.entity.CraftEntity) entity).getHandle().getScoreboardName()).toList());
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean removeEntries(java.util.Collection<String> entries) throws IllegalStateException, IllegalArgumentException {
|
|
+ Preconditions.checkArgument(entries != null, "Entry cannot be null");
|
|
+ CraftScoreboard scoreboard = this.checkState();
|
|
+
|
|
+ for (String entry : entries) {
|
|
+ if (this.team.getPlayers().contains(entry)) {
|
|
+ ((net.minecraft.server.ServerScoreboard) scoreboard.board).removePlayersFromTeam(entries, this.team);
|
|
+ return true;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return false;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public boolean hasPlayer(OfflinePlayer player) throws IllegalArgumentException, IllegalStateException {
|
|
Preconditions.checkArgument(player != null, "OfflinePlayer cannot be null");
|