From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Cryptite Date: Thu, 7 Apr 2022 16:35:36 -0500 Subject: [PATCH] Set multiple Team settings with a single packet diff --git a/src/main/java/net/minecraft/world/scores/PlayerTeam.java b/src/main/java/net/minecraft/world/scores/PlayerTeam.java index defff79eb28adc52851fa781d4d4a7745a884bdc..fb48bfbce1bca47d71a0ed35af1b1296529fa2bd 100644 --- a/src/main/java/net/minecraft/world/scores/PlayerTeam.java +++ b/src/main/java/net/minecraft/world/scores/PlayerTeam.java @@ -28,6 +28,7 @@ public class PlayerTeam extends Team { private ChatFormatting color = ChatFormatting.RESET; private Team.CollisionRule collisionRule = Team.CollisionRule.ALWAYS; private final Style displayNameStyle; + private boolean updateTeamChangeInstantly = true; // Slice public PlayerTeam(Scoreboard scoreboard, String name) { this.scoreboard = scoreboard; @@ -36,6 +37,12 @@ public class PlayerTeam extends Team { this.displayNameStyle = Style.EMPTY.withInsertion(name).withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent(name))); } + // Slice start + public void setUpdateTeamChangeInstantly(boolean updateTeamChangeInstantly) { + this.updateTeamChangeInstantly = updateTeamChangeInstantly; + } + // Slice end + public Scoreboard getScoreboard() { return this.scoreboard; } @@ -64,13 +71,13 @@ public class PlayerTeam extends Team { throw new IllegalArgumentException("Name cannot be null"); } else { this.displayName = displayName; - this.scoreboard.onTeamChanged(this); + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice } } public void setPlayerPrefix(@Nullable Component prefix) { this.playerPrefix = prefix == null ? TextComponent.EMPTY : prefix; - this.scoreboard.onTeamChanged(this); + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice } public Component getPlayerPrefix() { @@ -79,7 +86,7 @@ public class PlayerTeam extends Team { public void setPlayerSuffix(@Nullable Component suffix) { this.playerSuffix = suffix == null ? TextComponent.EMPTY : suffix; - this.scoreboard.onTeamChanged(this); + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice } public Component getPlayerSuffix() { @@ -113,7 +120,7 @@ public class PlayerTeam extends Team { public void setAllowFriendlyFire(boolean friendlyFire) { this.allowFriendlyFire = friendlyFire; - this.scoreboard.onTeamChanged(this); + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice } @Override @@ -123,7 +130,7 @@ public class PlayerTeam extends Team { public void setSeeFriendlyInvisibles(boolean showFriendlyInvisible) { this.seeFriendlyInvisibles = showFriendlyInvisible; - this.scoreboard.onTeamChanged(this); + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice } @Override @@ -138,12 +145,12 @@ public class PlayerTeam extends Team { public void setNameTagVisibility(Team.Visibility nameTagVisibilityRule) { this.nameTagVisibility = nameTagVisibilityRule; - this.scoreboard.onTeamChanged(this); + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice } public void setDeathMessageVisibility(Team.Visibility deathMessageVisibilityRule) { this.deathMessageVisibility = deathMessageVisibilityRule; - this.scoreboard.onTeamChanged(this); + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice } @Override @@ -153,7 +160,7 @@ public class PlayerTeam extends Team { public void setCollisionRule(Team.CollisionRule collisionRule) { this.collisionRule = collisionRule; - this.scoreboard.onTeamChanged(this); + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice } public int packOptions() { @@ -176,7 +183,7 @@ public class PlayerTeam extends Team { public void setColor(ChatFormatting color) { this.color = color; - this.scoreboard.onTeamChanged(this); + if (updateTeamChangeInstantly) this.scoreboard.onTeamChanged(this); // Slice } @Override diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java index 67efb0d38ae369ff5254f7b1ec85d32d4eee8291..e4110e3a60242b958c9983a090b28aae540b2bdf 100644 --- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java +++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java @@ -347,6 +347,37 @@ final class CraftTeam extends CraftScoreboardComponent implements Team { } } + //Slice start + @Override + public void teamOptions(net.kyori.adventure.text.Component displayName, + net.kyori.adventure.text.Component prefix, + net.kyori.adventure.text.Component suffix, + net.kyori.adventure.text.format.NamedTextColor color, + java.util.List> options) throws IllegalStateException { + checkState(); + team.setUpdateTeamChangeInstantly(false); + + if (displayName == null) displayName = net.kyori.adventure.text.Component.empty(); + team.setDisplayName(io.papermc.paper.adventure.PaperAdventure.asVanilla(displayName)); + + if (prefix == null) prefix = net.kyori.adventure.text.Component.empty(); + team.setPlayerPrefix(io.papermc.paper.adventure.PaperAdventure.asVanilla(prefix)); + + if (suffix == null) suffix = net.kyori.adventure.text.Component.empty(); + team.setPlayerSuffix(io.papermc.paper.adventure.PaperAdventure.asVanilla(suffix)); + + if (color == null) color = net.kyori.adventure.text.format.NamedTextColor.WHITE; + team.setColor(io.papermc.paper.adventure.PaperAdventure.asVanilla(color)); + + for (org.apache.commons.lang3.tuple.Pair pair : options) { + setOption(pair.getLeft(), pair.getRight()); + } + + team.setUpdateTeamChangeInstantly(true); + team.getScoreboard().onTeamChanged(team); + } + //Slice end + // Paper start @Override public void addEntity(org.bukkit.entity.Entity entity) throws IllegalStateException, IllegalArgumentException {