mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-28 15:30:19 +01:00
fe53b0e76f
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 1d522878 PR-966: Introduce getRespawnLocation as a replacement for getBedSpawnLocation cc01b745 PR-965: Add DragonBattle#setPreviouslyKilled 28e3702f SPIGOT-6921, PR-957: Add methods to remove all enchantments on an ItemStack 8872404e PR-961: Add BlockData#copyTo 4054cc7b PR-956: Add method to get an offline player's location CraftBukkit Changes: 292ec79e0 SPIGOT-7568: Call EntityChangeBlockEvent for DecoratedPot b44bf5aa8 SPIGOT-7575: SuspiciousStewMeta creates invalid PotionEffect data 161784713 PR-1340: Centralize the conversion from and to Minecraft / Bukkit registry items even more and add a test case for them b93c5a30d PR-1338: Introduce getRespawnLocation as a replacement for getBedSpawnLocation fb973486c SPIGOT-7570: PrepareItemCraftEvent#isRepair() always returns false c9c24535e PR-1337: Add DragonBattle#setPreviouslyKilled c8b4da803 SPIGOT-6921, PR-1330: Add methods to remove all enchantments on an ItemStack 95bc1c4f5 PR-1333: Add BlockData#copyTo 36e2f9ce1 PR-1329: Add method to get an offline player's location Spigot Changes: c198da22 SPIGOT-7563: Update to latest release of bungeecord-chat
212 lines
11 KiB
Diff
212 lines
11 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jedediah Smith <jedediah@silencegreys.com>
|
|
Date: Sat, 4 Apr 2015 22:59:54 -0400
|
|
Subject: [PATCH] Complete resource pack API
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
|
|
index f89d04a7bcc69523da9d702b19e29190ca048e9b..0526e1149cf4cd2ab3ee2ac9eafbaeab0c99c5ee 100644
|
|
--- a/src/main/java/org/bukkit/entity/Player.java
|
|
+++ b/src/main/java/org/bukkit/entity/Player.java
|
|
@@ -2141,6 +2141,180 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
|
void setResourcePack(@NotNull UUID uuid, @NotNull String url, byte @Nullable [] hash, net.kyori.adventure.text.@Nullable Component prompt, boolean force);
|
|
// Paper end
|
|
|
|
+ // Paper start - more resource pack API
|
|
+ /**
|
|
+ * Request that the player's client download and switch resource packs.
|
|
+ * <p>
|
|
+ * The player's client will download the new resource pack asynchronously
|
|
+ * in the background, and will automatically switch to it once the
|
|
+ * download is complete. If the client has downloaded and cached the same
|
|
+ * resource pack in the past, it will perform a quick timestamp check
|
|
+ * over the network to determine if the resource pack has changed and
|
|
+ * needs to be downloaded again. When this request is sent for the very
|
|
+ * first time from a given server, the client will first display a
|
|
+ * confirmation GUI to the player before proceeding with the download.
|
|
+ * <p>
|
|
+ * Notes:
|
|
+ * <ul>
|
|
+ * <li>Players can disable server resources on their client, in which
|
|
+ * case this method will have no affect on them.
|
|
+ * <li>To remove a resource pack you can use
|
|
+ * {@link #removeResourcePacks(UUID, UUID...)} or {@link #clearResourcePacks()}.
|
|
+ * </ul>
|
|
+ *
|
|
+ * @param url The URL from which the client will download the resource
|
|
+ * pack. The string must contain only US-ASCII characters and should
|
|
+ * be encoded as per RFC 1738.
|
|
+ * @param hash A 40 character hexadecimal and lowercase SHA-1 digest of
|
|
+ * the resource pack file.
|
|
+ * @throws IllegalArgumentException Thrown if the URL is null.
|
|
+ * @throws IllegalArgumentException Thrown if the URL is too long. The
|
|
+ * length restriction is an implementation specific arbitrary value.
|
|
+ */
|
|
+ default void setResourcePack(final @NotNull String url, final @NotNull String hash) {
|
|
+ this.setResourcePack(url, hash, false);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Request that the player's client download and switch resource packs.
|
|
+ * <p>
|
|
+ * The player's client will download the new resource pack asynchronously
|
|
+ * in the background, and will automatically switch to it once the
|
|
+ * download is complete. If the client has downloaded and cached the same
|
|
+ * resource pack in the past, it will perform a quick timestamp check
|
|
+ * over the network to determine if the resource pack has changed and
|
|
+ * needs to be downloaded again. When this request is sent for the very
|
|
+ * first time from a given server, the client will first display a
|
|
+ * confirmation GUI to the player before proceeding with the download.
|
|
+ * <p>
|
|
+ * Notes:
|
|
+ * <ul>
|
|
+ * <li>Players can disable server resources on their client, in which
|
|
+ * case this method will have no affect on them.
|
|
+ * <li>To remove a resource pack you can use
|
|
+ * {@link #removeResourcePacks(UUID, UUID...)} or {@link #clearResourcePacks()}.
|
|
+ * </ul>
|
|
+ *
|
|
+ * @param url The URL from which the client will download the resource
|
|
+ * pack. The string must contain only US-ASCII characters and should
|
|
+ * be encoded as per RFC 1738.
|
|
+ * @param hash A 40 character hexadecimal and lowercase SHA-1 digest of
|
|
+ * the resource pack file.
|
|
+ * @param required Marks if the resource pack should be required by the client
|
|
+ * @throws IllegalArgumentException Thrown if the URL is null.
|
|
+ * @throws IllegalArgumentException Thrown if the URL is too long. The
|
|
+ * length restriction is an implementation specific arbitrary value.
|
|
+ */
|
|
+ default void setResourcePack(final @NotNull String url, final @NotNull String hash, final boolean required) {
|
|
+ this.setResourcePack(url, hash, required, null);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Request that the player's client download and switch resource packs.
|
|
+ * <p>
|
|
+ * The player's client will download the new resource pack asynchronously
|
|
+ * in the background, and will automatically switch to it once the
|
|
+ * download is complete. If the client has downloaded and cached the same
|
|
+ * resource pack in the past, it will perform a quick timestamp check
|
|
+ * over the network to determine if the resource pack has changed and
|
|
+ * needs to be downloaded again. When this request is sent for the very
|
|
+ * first time from a given server, the client will first display a
|
|
+ * confirmation GUI to the player before proceeding with the download.
|
|
+ * <p>
|
|
+ * Notes:
|
|
+ * <ul>
|
|
+ * <li>Players can disable server resources on their client, in which
|
|
+ * case this method will have no affect on them.
|
|
+ * <li>To remove a resource pack you can use
|
|
+ * {@link #removeResourcePacks(UUID, UUID...)} or {@link #clearResourcePacks()}.
|
|
+ * </ul>
|
|
+ *
|
|
+ * @param url The URL from which the client will download the resource
|
|
+ * pack. The string must contain only US-ASCII characters and should
|
|
+ * be encoded as per RFC 1738.
|
|
+ * @param hash A 40 character hexadecimal and lowercase SHA-1 digest of
|
|
+ * the resource pack file.
|
|
+ * @param required Marks if the resource pack should be required by the client
|
|
+ * @param resourcePackPrompt A Prompt to be displayed in the client request
|
|
+ * @throws IllegalArgumentException Thrown if the URL is null.
|
|
+ * @throws IllegalArgumentException Thrown if the URL is too long. The
|
|
+ * length restriction is an implementation specific arbitrary value.
|
|
+ */
|
|
+ default void setResourcePack(final @NotNull String url, final @NotNull String hash, final boolean required, final net.kyori.adventure.text.@Nullable Component resourcePackPrompt) {
|
|
+ this.setResourcePack(UUID.nameUUIDFromBytes(url.getBytes(java.nio.charset.StandardCharsets.UTF_8)), url, hash, resourcePackPrompt, required);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Request that the player's client download and switch resource packs.
|
|
+ * <p>
|
|
+ * The player's client will download the new resource pack asynchronously
|
|
+ * in the background, and will automatically switch to it once the
|
|
+ * download is complete. If the client has downloaded and cached the same
|
|
+ * resource pack in the past, it will perform a quick timestamp check
|
|
+ * over the network to determine if the resource pack has changed and
|
|
+ * needs to be downloaded again. When this request is sent for the very
|
|
+ * first time from a given server, the client will first display a
|
|
+ * confirmation GUI to the player before proceeding with the download.
|
|
+ * <p>
|
|
+ * Notes:
|
|
+ * <ul>
|
|
+ * <li>Players can disable server resources on their client, in which
|
|
+ * case this method will have no affect on them.
|
|
+ * <li>To remove a resource pack you can use
|
|
+ * {@link #removeResourcePacks(UUID, UUID...)} or {@link #clearResourcePacks()}.
|
|
+ * </ul>
|
|
+ *
|
|
+ * @param uuid Unique resource pack ID.
|
|
+ * @param url The URL from which the client will download the resource
|
|
+ * pack. The string must contain only US-ASCII characters and should
|
|
+ * be encoded as per RFC 1738.
|
|
+ * @param hash A 40 character hexadecimal and lowercase SHA-1 digest of
|
|
+ * the resource pack file.
|
|
+ * @param resourcePackPrompt A Prompt to be displayed in the client request
|
|
+ * @param required Marks if the resource pack should be required by the client
|
|
+ * @throws IllegalArgumentException Thrown if the URL is null.
|
|
+ * @throws IllegalArgumentException Thrown if the URL is too long. The
|
|
+ * length restriction is an implementation specific arbitrary value.
|
|
+ */
|
|
+ default void setResourcePack(final @NotNull UUID uuid, final @NotNull String url, final @NotNull String hash, final net.kyori.adventure.text.@Nullable Component resourcePackPrompt, final boolean required) {
|
|
+ this.sendResourcePacks(net.kyori.adventure.resource.ResourcePackRequest.resourcePackRequest()
|
|
+ .required(required)
|
|
+ .replace(true)
|
|
+ .prompt(resourcePackPrompt)
|
|
+ .packs(net.kyori.adventure.resource.ResourcePackInfo.resourcePackInfo(uuid, java.net.URI.create(url), hash))
|
|
+ );
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the most recent resource pack status from the player.
|
|
+ *
|
|
+ * @return the most recent status or null
|
|
+ */
|
|
+ org.bukkit.event.player.PlayerResourcePackStatusEvent.@Nullable Status getResourcePackStatus();
|
|
+
|
|
+ /**
|
|
+ * Gets the most recent pack hash from the player.
|
|
+ *
|
|
+ * @return the most recent hash or null
|
|
+ * @deprecated This is no longer sent from the client and will always be null
|
|
+ */
|
|
+ @Deprecated(forRemoval = true)
|
|
+ @org.jetbrains.annotations.Contract("-> null")
|
|
+ default @Nullable String getResourcePackHash() {
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets if the last resource pack status from the player
|
|
+ * was {@link org.bukkit.event.player.PlayerResourcePackStatusEvent.Status#SUCCESSFULLY_LOADED}.
|
|
+ *
|
|
+ * @return true if last status was successfully loaded
|
|
+ */
|
|
+ default boolean hasResourcePack() {
|
|
+ return this.getResourcePackStatus() == org.bukkit.event.player.PlayerResourcePackStatusEvent.Status.SUCCESSFULLY_LOADED;
|
|
+ }
|
|
+ // Paper end - more resource pack API
|
|
+
|
|
/**
|
|
* Request that the player's client remove a resource pack sent by the
|
|
* server.
|
|
diff --git a/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java b/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java
|
|
index e2c4f9a0456cef345772d57b4d9c6e7d9598dd53..e4c32b21ab013703a6a1b07a1ad564d914ebe83f 100644
|
|
--- a/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java
|
|
+++ b/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java
|
|
@@ -21,6 +21,16 @@ public class PlayerResourcePackStatusEvent extends PlayerEvent {
|
|
this.status = resourcePackStatus;
|
|
}
|
|
|
|
+ // Paper start - add hash (not used anymore)
|
|
+ /**
|
|
+ * @deprecated Hash does not seem to ever be set
|
|
+ */
|
|
+ @Deprecated(forRemoval = true)
|
|
+ public String getHash() {
|
|
+ return null;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
/**
|
|
* Gets the unique ID of this pack.
|
|
*
|