mirror of
https://github.com/BX-Team/DivineMC.git
synced 2025-12-19 14:59:25 +00:00
update spectator packet impl
This commit is contained in:
@@ -6,7 +6,6 @@ private-f net.minecraft.world.level.levelgen.NoiseChunk$FlatCache noiseFiller
|
|||||||
private-f net.minecraft.world.level.levelgen.NoiseChunk$NoiseInterpolator noiseFiller
|
private-f net.minecraft.world.level.levelgen.NoiseChunk$NoiseInterpolator noiseFiller
|
||||||
private-f net.minecraft.world.level.levelgen.RandomState router
|
private-f net.minecraft.world.level.levelgen.RandomState router
|
||||||
private-f net.minecraft.world.level.levelgen.RandomState sampler
|
private-f net.minecraft.world.level.levelgen.RandomState sampler
|
||||||
public net.minecraft.server.level.ServerPlayerGameMode gameModeForPlayer
|
|
||||||
public net.minecraft.util.Mth SIN
|
public net.minecraft.util.Mth SIN
|
||||||
public net.minecraft.world.entity.ai.Brain sensors
|
public net.minecraft.world.entity.ai.Brain sensors
|
||||||
public net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities lineOfSightTest
|
public net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities lineOfSightTest
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Do not send spectator change packet
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java
|
diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||||
index 6e7ed7451a45f4525946563617ccf0a55851449b..6a2f8a798f46b337d611c14556ab5ecc1f2584cd 100644
|
index 6e7ed7451a45f4525946563617ccf0a55851449b..518d670d2f8535679d5d22cb1f15cb85e5bb50f0 100644
|
||||||
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
|
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||||
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
|
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||||
@@ -75,10 +75,18 @@ public class ServerPlayerGameMode {
|
@@ -75,10 +75,7 @@ public class ServerPlayerGameMode {
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
this.setGameModeForPlayer(gameModeForPlayer, this.gameModeForPlayer); // Paper - Fix MC-259571
|
this.setGameModeForPlayer(gameModeForPlayer, this.gameModeForPlayer); // Paper - Fix MC-259571
|
||||||
this.player.onUpdateAbilities();
|
this.player.onUpdateAbilities();
|
||||||
@@ -16,55 +16,129 @@ index 6e7ed7451a45f4525946563617ccf0a55851449b..6a2f8a798f46b337d611c14556ab5ecc
|
|||||||
- .getServer()
|
- .getServer()
|
||||||
- .getPlayerList()
|
- .getPlayerList()
|
||||||
- .broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit
|
- .broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit
|
||||||
+
|
+ this.sendGameModeUpdatePacket(gameModeForPlayer); // DivineMC - Do not send spectator change packet
|
||||||
+ // DivineMC start - Do not send spectator change packet
|
|
||||||
+ if (!org.bxteam.divinemc.config.DivineConfig.NetworkCategory.sendSpectatorChangePacket) {
|
|
||||||
+ this.level.getServer().getPlayerList().broadcastPlayerInfoWithoutSpectatorName(this.player);
|
|
||||||
+ } else {
|
|
||||||
+ this.level
|
|
||||||
+ .getServer()
|
|
||||||
+ .getPlayerList()
|
|
||||||
+ .broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player);
|
|
||||||
+ }
|
|
||||||
+ // DivineMC end - Do not send spectator change packet
|
|
||||||
+
|
|
||||||
this.level.updateSleepingPlayerList();
|
this.level.updateSleepingPlayerList();
|
||||||
if (gameModeForPlayer == GameType.CREATIVE) {
|
if (gameModeForPlayer == GameType.CREATIVE) {
|
||||||
this.player.resetCurrentImpulseContext();
|
this.player.resetCurrentImpulseContext();
|
||||||
|
@@ -571,4 +568,17 @@ public class ServerPlayerGameMode {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Purpur end - Shift right click to use exp for mending
|
||||||
|
+
|
||||||
|
+ // DivineMC start - Do not send spectator change packet
|
||||||
|
+ private void sendGameModeUpdatePacket(GameType newGameMode) {
|
||||||
|
+ ClientboundPlayerInfoUpdatePacket packet = new ClientboundPlayerInfoUpdatePacket(
|
||||||
|
+ ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player);
|
||||||
|
+
|
||||||
|
+ if (org.bxteam.divinemc.config.DivineConfig.NetworkCategory.sendSpectatorChangePacket || newGameMode != GameType.SPECTATOR) {
|
||||||
|
+ this.level.getServer().getPlayerList().broadcastAll(packet, this.player);
|
||||||
|
+ } else {
|
||||||
|
+ this.player.connection.send(packet);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // DivineMC end - Do not send spectator change packet
|
||||||
|
}
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index 96af2c75b526c59510965665da0b2ca00bf657b3..b59078273bb6214295a448d5607538557d7eb1ee 100644
|
index 96af2c75b526c59510965665da0b2ca00bf657b3..baa682c9ba48427edb10f5610a5a0a9e21da0581 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/net/minecraft/server/players/PlayerList.java
|
+++ b/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -1473,4 +1473,32 @@ public abstract class PlayerList {
|
@@ -359,6 +359,8 @@ public abstract class PlayerList {
|
||||||
|
// CraftBukkit start - sendAll above replaced with this loop
|
||||||
|
ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player)); // Paper - Add Listing API for Player
|
||||||
|
|
||||||
|
+ ClientboundPlayerInfoUpdatePacket modifiedPacket = this.createSpectatorFilteredPacket(packet); // DivineMC - Do not send spectator change packet
|
||||||
|
+
|
||||||
|
final List<ServerPlayer> onlinePlayers = Lists.newArrayListWithExpectedSize(this.players.size() - 1); // Paper - Use single player info update packet on join
|
||||||
|
for (int i = 0; i < this.players.size(); ++i) {
|
||||||
|
ServerPlayer entityplayer1 = (ServerPlayer) this.players.get(i);
|
||||||
|
@@ -367,7 +369,7 @@ public abstract class PlayerList {
|
||||||
|
// Paper start - Add Listing API for Player
|
||||||
|
if (entityplayer1.getBukkitEntity().isListed(bukkitPlayer)) {
|
||||||
|
// Paper end - Add Listing API for Player
|
||||||
|
- entityplayer1.connection.send(packet);
|
||||||
|
+ this.sendPlayerInfoPacket(entityplayer1, player, packet, modifiedPacket); // DivineMC - Do not send spectator change packet
|
||||||
|
// Paper start - Add Listing API for Player
|
||||||
|
} else {
|
||||||
|
entityplayer1.connection.send(ClientboundPlayerInfoUpdatePacket.createSinglePlayerInitializing(player, false));
|
||||||
|
@@ -383,7 +385,10 @@ public abstract class PlayerList {
|
||||||
|
}
|
||||||
|
// Paper start - Use single player info update packet on join
|
||||||
|
if (!onlinePlayers.isEmpty()) {
|
||||||
|
- player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(onlinePlayers, player)); // Paper - Add Listing API for Player
|
||||||
|
+ // DivineMC start - Do not send spectator change packet
|
||||||
|
+ ClientboundPlayerInfoUpdatePacket updatePacket = this.createFilteredPlayerListPacket(onlinePlayers, player);
|
||||||
|
+ player.connection.send(updatePacket); // Paper - Add Listing API for Player
|
||||||
|
+ // DivineMC end - Do not send spectator change packet
|
||||||
|
}
|
||||||
|
// Paper end - Use single player info update packet on join
|
||||||
|
player.sentListPacket = true;
|
||||||
|
@@ -1473,4 +1478,69 @@ public abstract class PlayerList {
|
||||||
public boolean isAllowCommandsForAllPlayers() {
|
public boolean isAllowCommandsForAllPlayers() {
|
||||||
return this.allowCommandsForAllPlayers;
|
return this.allowCommandsForAllPlayers;
|
||||||
}
|
}
|
||||||
+
|
+
|
||||||
+ // DivineMC start - Do not send spectator change packet
|
+ // DivineMC start - Do not send spectator change packet
|
||||||
+ public void broadcastPlayerInfoWithoutSpectatorName(ServerPlayer player) {
|
+ @Nullable
|
||||||
+ net.minecraft.world.level.GameType displayMode = player.gameMode.getGameModeForPlayer() == net.minecraft.world.level.GameType.SPECTATOR ? net.minecraft.world.level.GameType.SURVIVAL : player.gameMode.getGameModeForPlayer();
|
+ private ClientboundPlayerInfoUpdatePacket createSpectatorFilteredPacket(ClientboundPlayerInfoUpdatePacket originalPacket) {
|
||||||
|
+ if (org.bxteam.divinemc.config.DivineConfig.NetworkCategory.sendSpectatorChangePacket) {
|
||||||
|
+ return null;
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
+ for (ServerPlayer otherPlayer : this.players) {
|
+ ClientboundPlayerInfoUpdatePacket.Entry entry = originalPacket.entries().getFirst();
|
||||||
+ if (otherPlayer != player && otherPlayer.getBukkitEntity().canSee(player.getBukkitEntity())) {
|
+ if (entry.gameMode() != net.minecraft.world.level.GameType.SPECTATOR) {
|
||||||
+ ClientboundPlayerInfoUpdatePacket packet = createPlayerInfoPacketWithoutSpectatorName(player, displayMode);
|
+ return null;
|
||||||
+ otherPlayer.connection.send(packet);
|
+ }
|
||||||
+ }
|
+
|
||||||
|
+ ClientboundPlayerInfoUpdatePacket.Entry filteredEntry = new ClientboundPlayerInfoUpdatePacket.Entry(
|
||||||
|
+ entry.profileId(),
|
||||||
|
+ entry.profile(),
|
||||||
|
+ entry.listed(),
|
||||||
|
+ entry.latency(),
|
||||||
|
+ net.minecraft.world.level.GameType.SURVIVAL,
|
||||||
|
+ entry.displayName(),
|
||||||
|
+ entry.showHat(),
|
||||||
|
+ entry.listOrder(),
|
||||||
|
+ entry.chatSession());
|
||||||
|
+
|
||||||
|
+ return new ClientboundPlayerInfoUpdatePacket(originalPacket.actions(), List.of(filteredEntry));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private void sendPlayerInfoPacket(ServerPlayer receiver, ServerPlayer joiningPlayer,
|
||||||
|
+ ClientboundPlayerInfoUpdatePacket originalPacket,
|
||||||
|
+ @Nullable ClientboundPlayerInfoUpdatePacket filteredPacket) {
|
||||||
|
+ if (org.bxteam.divinemc.config.DivineConfig.NetworkCategory.sendSpectatorChangePacket ||
|
||||||
|
+ receiver == joiningPlayer ||
|
||||||
|
+ filteredPacket == null) {
|
||||||
|
+ receiver.connection.send(originalPacket);
|
||||||
|
+ } else {
|
||||||
|
+ receiver.connection.send(filteredPacket);
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ private ClientboundPlayerInfoUpdatePacket createPlayerInfoPacketWithoutSpectatorName(ServerPlayer player, net.minecraft.world.level.GameType displayMode) {
|
+ private ClientboundPlayerInfoUpdatePacket createFilteredPlayerListPacket(List<ServerPlayer> onlinePlayers, ServerPlayer joiningPlayer) {
|
||||||
+ net.minecraft.world.level.GameType originalMode = player.gameMode.gameModeForPlayer;
|
+ ClientboundPlayerInfoUpdatePacket updatePacket = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(onlinePlayers, joiningPlayer);
|
||||||
+
|
+
|
||||||
+ player.gameMode.gameModeForPlayer = displayMode;
|
+ if (org.bxteam.divinemc.config.DivineConfig.NetworkCategory.sendSpectatorChangePacket) {
|
||||||
|
+ return updatePacket;
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
+ ClientboundPlayerInfoUpdatePacket packet = new ClientboundPlayerInfoUpdatePacket(
|
+ List<ClientboundPlayerInfoUpdatePacket.Entry> newEntries = new java.util.ArrayList<>();
|
||||||
+ ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE,
|
+ for (ClientboundPlayerInfoUpdatePacket.Entry entry : updatePacket.entries()) {
|
||||||
+ player
|
+ ClientboundPlayerInfoUpdatePacket.Entry newEntry = new ClientboundPlayerInfoUpdatePacket.Entry(
|
||||||
+ );
|
+ entry.profileId(),
|
||||||
|
+ entry.profile(),
|
||||||
|
+ entry.listed(),
|
||||||
|
+ entry.latency(),
|
||||||
|
+ entry.gameMode() == net.minecraft.world.level.GameType.SPECTATOR ?
|
||||||
|
+ net.minecraft.world.level.GameType.SURVIVAL : entry.gameMode(),
|
||||||
|
+ entry.displayName(),
|
||||||
|
+ entry.showHat(),
|
||||||
|
+ entry.listOrder(),
|
||||||
|
+ entry.chatSession());
|
||||||
|
+ newEntries.add(newEntry);
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
+ player.gameMode.gameModeForPlayer = originalMode;
|
+ return new ClientboundPlayerInfoUpdatePacket(updatePacket.actions(), newEntries);
|
||||||
+
|
|
||||||
+ return packet;
|
|
||||||
+ }
|
+ }
|
||||||
+ // DivineMC end - Do not send spectator change packet
|
+ // DivineMC end - Do not send spectator change packet
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user