From 7e7e6b4bab426060835fb228744fe99fda0ec6ed Mon Sep 17 00:00:00 2001 From: Andreas Prues <68807218+Lama06@users.noreply.github.com> Date: Sat, 11 Feb 2023 16:55:45 +0100 Subject: [PATCH] More Win Screen API (#8805) Adds methods to get and set whether a player has seen the win screen before. --- patches/api/0428-Win-Screen-API.patch | 33 ++++++++++++++++++++++-- patches/server/0957-Win-Screen-API.patch | 16 ++++++++++-- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/patches/api/0428-Win-Screen-API.patch b/patches/api/0428-Win-Screen-API.patch index 6027d25e3d..ba18c74e5a 100644 --- a/patches/api/0428-Win-Screen-API.patch +++ b/patches/api/0428-Win-Screen-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Win Screen API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 1604351236f748b5009eed29f6051e68092d6090..b0bd8194d263f6986e80b7d9848297a2bf27a112 100644 +index 1604351236f748b5009eed29f6051e68092d6090..d7d94b954262da0cbe11850cbc3ebd45e32c8c76 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -861,6 +861,18 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -861,6 +861,47 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ public void sendMap(@NotNull MapView map); @@ -18,10 +18,39 @@ index 1604351236f748b5009eed29f6051e68092d6090..b0bd8194d263f6986e80b7d9848297a2 + * and exits the end for the first time. + * In vanilla, the win screen starts with a poem and then continues with the credits but its content can be + * changed by using a resource pack. ++ *
++ * Calling this method does not change the value of {@link #hasSeenWinScreen()}. ++ * That means that the win screen is still displayed to a player if they leave the end for the first time, even though ++ * they have seen it before because this method was called. ++ * Note this method does not make the player invulnerable, which is normally expected when viewing credits. + * ++ * @see #hasSeenWinScreen() ++ * @see #setHasSeenWinScreen(boolean) + * @see https://minecraft.fandom.com/wiki/End_Poem#Technical_details + */ + public void showWinScreen(); ++ ++ /** ++ * Returns whether this player has seen the win screen before. ++ * When a player leaves the end the win screen is shown to them if they have not seen it before. ++ * ++ * @return Whether this player has seen the win screen before ++ * @see #setHasSeenWinScreen(boolean) ++ * @see #showWinScreen() ++ * @see https://minecraft.fandom.com/wiki/End_Poem ++ */ ++ public boolean hasSeenWinScreen(); ++ ++ /** ++ * Changes whether this player has seen the win screen before. ++ * When a player leaves the end the win screen is shown to them if they have not seen it before. ++ * ++ * @param hasSeenWinScreen Whether this player has seen the win screen before ++ * @see #hasSeenWinScreen() ++ * @see #showWinScreen() ++ * @see https://minecraft.fandom.com/wiki/End_Poem ++ */ ++ public void setHasSeenWinScreen(boolean hasSeenWinScreen); + // Paper end + // Paper start diff --git a/patches/server/0957-Win-Screen-API.patch b/patches/server/0957-Win-Screen-API.patch index 6247fb86f4..07502c9fdf 100644 --- a/patches/server/0957-Win-Screen-API.patch +++ b/patches/server/0957-Win-Screen-API.patch @@ -3,12 +3,14 @@ From: Lama06 Date: Sat, 21 Jan 2023 13:53:23 +0100 Subject: [PATCH] Win Screen API +== AT == +public net.minecraft.server.level.ServerPlayer seenCredits diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index ded1f3034da67d89efaf4b31620ea2e43002f41d..616d0c3b72c7a5fcc67981c1919a4dece904d017 100644 +index 5ec97491d6c2888e360de1d53f3edcc75ccac95a..03430916a8107c1b0f04d84e1dce494e2da06e7a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1179,6 +1179,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1179,6 +1179,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.getHandle().connection.send(packet); } @@ -19,6 +21,16 @@ index ded1f3034da67d89efaf4b31620ea2e43002f41d..616d0c3b72c7a5fcc67981c1919a4dec + var packet = new ClientboundGameEventPacket(ClientboundGameEventPacket.WIN_GAME, 1); + getHandle().connection.send(packet); + } ++ ++ @Override ++ public boolean hasSeenWinScreen() { ++ return getHandle().seenCredits; ++ } ++ ++ @Override ++ public void setHasSeenWinScreen(boolean hasSeenWinScreen) { ++ getHandle().seenCredits = hasSeenWinScreen; ++ } + // Paper end + @Override