Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions paper-api/src/main/java/org/bukkit/entity/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,31 @@ default net.kyori.adventure.identity.Identity identity() {
*/
public void setPlayerListOrder(int order);


/**
* Gets the game mode that is shown for this player on the player list.
* @return the player list game mode
*/
public GameMode getPlayerListGameMode();

/**
* Sets the game mode that is shown for this player on the in-game player list.
* @param gameMode new player list game mode
*/
public void setPlayerListGameMode(GameMode gameMode);

/**
* Gets whether the player's game mode should be updated on the player list when it changes.
* @param update true if the player's game mode should be updated on the player list, false if it should not be updated
*/
public void setUpdateGameMode(boolean update);

/**
* Gets whether the player's game mode should be updated on the player list when it changes.
* @return true if the player's game mode should be updated on the player list, false if it should not be updated
*/
public Boolean shouldUpdateGameMode();

/**
* Gets the currently displayed player list header for this player.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27778,7 +27778,7 @@ index f39d48821d728232472ebc5bd6868e6a0d644721..91d27b90a9c9c348d3f93624ff8dbff8
"Server weather",
() -> String.format(
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 2ffb9c7388e15ec3e3afd3fa50cc0149c0c8910d..41816ca8d4ef3d959d2b88cd4b2eedaaa541e612 100644
index d4ea439b51f4ebfcdcf94a97434742251fbeeaf0..1f8cc81feb8295a8fd8c03a6ae635a0d87558d69 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -203,7 +203,7 @@ import net.minecraft.world.scores.criteria.ObjectiveCriteria;
Expand All @@ -27790,7 +27790,7 @@ index 2ffb9c7388e15ec3e3afd3fa50cc0149c0c8910d..41816ca8d4ef3d959d2b88cd4b2eedaa
private static final Logger LOGGER = LogUtils.getLogger();
private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_XZ = 32;
private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_Y = 10;
@@ -449,6 +449,36 @@ public class ServerPlayer extends Player {
@@ -451,6 +451,36 @@ public class ServerPlayer extends Player {
public com.destroystokyo.paper.event.entity.@Nullable PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent
public org.bukkit.event.player.PlayerQuitEvent.@Nullable QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event

Expand Down Expand Up @@ -27827,7 +27827,7 @@ index 2ffb9c7388e15ec3e3afd3fa50cc0149c0c8910d..41816ca8d4ef3d959d2b88cd4b2eedaa
public ServerPlayer(final MinecraftServer server, final ServerLevel level, final GameProfile gameProfile, final ClientInformation clientInformation) {
super(level, gameProfile);
this.server = server;
@@ -471,7 +501,7 @@ public class ServerPlayer extends Player {
@@ -473,7 +503,7 @@ public class ServerPlayer extends Player {
@Override
public BlockPos adjustSpawnLocation(final ServerLevel level, final BlockPos spawnSuggestion) {
CompletableFuture<Vec3> future = PlayerSpawnFinder.findSpawn(level, spawnSuggestion);
Expand Down Expand Up @@ -28453,7 +28453,7 @@ index c974b6cafb1f6aa2a57cfdc8a39c887f02f42b1d..ec40f02032f965f548b0c0a29aa9d9bb
// Paper start - PlayerChunkLoadEvent
if (io.papermc.paper.event.packet.PlayerChunkLoadEvent.getHandlerList().getRegisteredListeners().length > 0) {
diff --git a/net/minecraft/server/network/config/PrepareSpawnTask.java b/net/minecraft/server/network/config/PrepareSpawnTask.java
index 83af9ee3ba150da85b9b694cd76a5fabb5b2d8ef..1fb40837bd02672850ec9adc2797190df22b33fc 100644
index b5d993095aa77bb132c513f73dbf6d2afb2e3943..8b318dd8aa918284c5fa89e990b13bec425102cb 100644
--- a/net/minecraft/server/network/config/PrepareSpawnTask.java
+++ b/net/minecraft/server/network/config/PrepareSpawnTask.java
@@ -171,7 +171,7 @@ public class PrepareSpawnTask implements ConfigurationTask {
Expand Down
12 changes: 6 additions & 6 deletions paper-server/patches/features/0030-Anti-Xray.patch
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ index a94e6ca1d396b6b0781de5d550c4a804274ee003..a1018e9ca9dfb978d6e6633577abd7d5

private ClientboundLevelChunkWithLightPacket(final RegistryFriendlyByteBuf input) {
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 4ac7ef5a1ed1fac04a9fd246212f59919deb498c..e562aec4366d7724f915e3dd5ae440a77e0947c5 100644
index bbeb0f673f2b23d1748e33364dc12ac16528d4c4..9499f4a859a5af6953c575a2980b77b6d83c22d3 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -631,7 +631,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
Expand All @@ -168,10 +168,10 @@ index 4ac7ef5a1ed1fac04a9fd246212f59919deb498c..e562aec4366d7724f915e3dd5ae440a7
this.weatherData.setLevel(this);
this.typeKey = typeKey;
diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java
index f1faa0439bf5bce583e70ce37ade4b7e66daaaa4..f7390b91fe1866c6a11beb93711d0fcde4293164 100644
index 427d6327077dd93a890e18fc45c7093d4e4dbba7..8c356700f8372cc442ee3285828af391e6eeee12 100644
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -321,6 +321,7 @@ public class ServerPlayerGameMode {
@@ -324,6 +324,7 @@ public class ServerPlayerGameMode {
org.bukkit.craftbukkit.event.CraftEventFactory.callBlockDamageAbortEvent(this.player, pos, this.player.getInventory().getSelectedItem()); // CraftBukkit
}
}
Expand All @@ -196,7 +196,7 @@ index ec40f02032f965f548b0c0a29aa9d9bbad6f439b..373da9d604cfb1614a0618d856aefd2b
if (io.papermc.paper.event.packet.PlayerChunkLoadEvent.getHandlerList().getRegisteredListeners().length > 0) {
new io.papermc.paper.event.packet.PlayerChunkLoadEvent(new org.bukkit.craftbukkit.CraftChunk(chunk), connection.getPlayer().getBukkitEntity()).callEvent();
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 5e11abcfd681d86b1c0e282cf901108822766ce2..3020a3208b14bb483b08cf59a796fb83c2403d1c 100644
index 3d62e4d275f32c8604a1bdaefb6b9b1d4ea6e21f..82748af2479b0f8f15e39d1ad1ccd2a0e583bcdd 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -331,7 +331,7 @@ public abstract class PlayerList {
Expand All @@ -209,7 +209,7 @@ index 5e11abcfd681d86b1c0e282cf901108822766ce2..3020a3208b14bb483b08cf59a796fb83
}
// Paper end - Send empty chunk
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
index 829bb616e5d72b955248bbc150254c239176ce64..4b228b5c563e40b6f301df22b5c8a7f7988cb072 100644
index 4522fde3a08637a01130ad39dc8a11a2c4f7f1cb..a920a20008cb906def77dbc50db1bb1731cc1260 100644
--- a/net/minecraft/world/level/Level.java
+++ b/net/minecraft/world/level/Level.java
@@ -145,6 +145,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
Expand Down Expand Up @@ -273,7 +273,7 @@ index c974b1c276d29610cb59566afaad19f5bcf0c602..c73b9871faa87493e081cb54e1bf1dce
}
}
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
index b5b514b292f9fdbe410aba5facec1638682c9075..595e97d2772b504eb6a08e84e4f4a138eb7c5f37 100644
index c0c212fd50cf97ae311035b370e8b4d40d82229e..a4b794781e66e6a054fb437bd0b66712b13320a4 100644
--- a/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
@@ -152,7 +152,7 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
@Override
public void dataChanged(final AbstractContainerMenu container, final int id, final int value) {
}
@@ -377,10 +_,43 @@
@@ -377,10 +_,45 @@
public void sendSystemMessage(final Component message) {
ServerPlayer.this.sendSystemMessage(message);
}
Expand Down Expand Up @@ -85,6 +85,8 @@
+ public net.kyori.adventure.text.Component adventure$displayName; // Paper
+ public @Nullable Component listName;
+ public int listOrder = 0;
+ public org.bukkit.GameMode listGameMode = org.bukkit.GameMode.SURVIVAL; // Paper - add custom player list gamemode and add shouldUpdateGameMode
+ public Boolean shouldUpdateListGameMode = true; // Paper - add custom player list gamemode and add shouldUpdateGameMode
+ public org.bukkit.Location compassTarget;
+ public int newExp = 0;
+ public int newLevel = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,21 @@
Abilities abilities = this.player.getAbilities();
this.setGameModeForPlayer(gameModeForPlayer, this.gameModeForPlayer);
if (abilities.flying && gameModeForPlayer != GameType.SPECTATOR && this.isInRangeOfGround()) {
@@ -66,13 +_,13 @@
this.level
.getServer()
.getPlayerList()
@@ -63,16 +_,19 @@
}

this.player.onUpdateAbilities();
- this.level
- .getServer()
- .getPlayerList()
- .broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player));
+ .broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit
+
+ if(this.player.shouldUpdateListGameMode) { // Paper start - add custom player list gamemode and add shouldUpdateGameMode
+ this.level
+ .getServer()
+ .getPlayerList()
+ .broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit
+ } // Paper end - add custom player list gamemode and add shouldUpdateGameMode
this.level.updateSleepingPlayerList();
if (gameModeForPlayer == GameType.CREATIVE) {
this.player.resetCurrentImpulseContext();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@
import net.minecraft.world.level.storage.ValueOutput;
import org.bukkit.BanEntry;
import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.DyeColor;
import org.bukkit.Effect;
import org.bukkit.EntityEffect;
Expand Down Expand Up @@ -188,7 +187,6 @@
import org.bukkit.craftbukkit.conversations.ConversationTracker;
import org.bukkit.craftbukkit.event.CraftEventFactory;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.craftbukkit.inventory.CraftRecipe;
import org.bukkit.craftbukkit.map.CraftMapCursor;
import org.bukkit.craftbukkit.map.CraftMapView;
import org.bukkit.craftbukkit.map.RenderData;
Expand Down Expand Up @@ -614,6 +612,39 @@ public void setPlayerListOrder(int order) {
// Paper end - Send update packet
}

// Paper start - add custom player list gamemode and add shouldUpdateGameMode

@Override
public void setPlayerListGameMode(GameMode gameMode) {
Preconditions.checkNotNull(gameMode, "gameMode cannot be null");

this.getHandle().listGameMode = gameMode;
if (getHandle().connection == null) return;

for (ServerPlayer player : server.getHandle().players) {
if (player.getBukkitEntity().canSee(this)) {
player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, getHandle()));
}
}
}

@Override
public @NonNull GameMode getPlayerListGameMode() {return this.getHandle().listGameMode;}

// Paper end - add custom player list gamemode and add shouldUpdateGameMode


// Paper start - add custom player list gamemode and add shouldUpdateGameMode
@Override
public Boolean shouldUpdateGameMode() {return this.getHandle().shouldUpdateListGameMode;}

@Override
public void setUpdateGameMode(boolean update) {
this.getHandle().shouldUpdateListGameMode = update;
}

// Paper end - add custom player list gamemode and add shouldUpdateGameMode

private net.kyori.adventure.text.Component playerListHeader; // Paper - Adventure
private net.kyori.adventure.text.Component playerListFooter; // Paper - Adventure

Expand Down
Loading