mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Re-add component support to resource pack API
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Tue, 17 Aug 2021 17:39:14 -0500
|
||||
Subject: [PATCH] Add component support to resource pack api
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
|
||||
index d093d43380e09426f9430460a8626f8dcd675f22..a1d0302deb4e002d18264883f5ce1c1a17a6089d 100644
|
||||
--- a/src/main/java/org/bukkit/entity/Player.java
|
||||
+++ b/src/main/java/org/bukkit/entity/Player.java
|
||||
@@ -1570,6 +1570,50 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||
*/
|
||||
public void setResourcePack(@NotNull String url, @Nullable byte[] hash, @Nullable String prompt);
|
||||
|
||||
+ /**
|
||||
+ * 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 a
|
||||
+ * resource pack with the same hash in the past it will not download but
|
||||
+ * directly apply the cached pack. If the hash is null and the client has
|
||||
+ * downloaded and cached the same resource pack in the past, it will
|
||||
+ * perform a file size check against the response content 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. Use the
|
||||
+ * {@link PlayerResourcePackStatusEvent} to figure out whether or not
|
||||
+ * the player loaded the pack!
|
||||
+ * <li>There is no concept of resetting resource packs back to default
|
||||
+ * within Minecraft, so players will have to relog to do so or you
|
||||
+ * have to send an empty pack.
|
||||
+ * <li>The request is sent with empty string as the hash when the hash is
|
||||
+ * not provided. This might result in newer versions not loading the
|
||||
+ * pack correctly.
|
||||
+ * </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 The sha1 hash sum of the resource pack file which is used
|
||||
+ * to apply a cached version of the pack directly without downloading
|
||||
+ * if it is available. Hast to be 20 bytes long!
|
||||
+ * @param prompt The optional custom prompt message to be shown to 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.
|
||||
+ * @throws IllegalArgumentException Thrown if the hash is not 20 bytes
|
||||
+ * long.
|
||||
+ */
|
||||
+ public void setResourcePack(@NotNull String url, @Nullable byte[] hash, @Nullable net.kyori.adventure.text.Component prompt);
|
||||
+
|
||||
/**
|
||||
* Request that the player's client download and switch resource packs.
|
||||
* <p>
|
||||
@@ -1661,6 +1705,52 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||
*/
|
||||
public void setResourcePack(@NotNull String url, @Nullable byte[] hash, @Nullable String prompt, boolean force);
|
||||
|
||||
+ /**
|
||||
+ * 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 a
|
||||
+ * resource pack with the same hash in the past it will not download but
|
||||
+ * directly apply the cached pack. If the hash is null and the client has
|
||||
+ * downloaded and cached the same resource pack in the past, it will
|
||||
+ * perform a file size check against the response content 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. Use the
|
||||
+ * {@link PlayerResourcePackStatusEvent} to figure out whether or not
|
||||
+ * the player loaded the pack!
|
||||
+ * <li>There is no concept of resetting resource packs back to default
|
||||
+ * within Minecraft, so players will have to relog to do so or you
|
||||
+ * have to send an empty pack.
|
||||
+ * <li>The request is sent with empty string as the hash when the hash is
|
||||
+ * not provided. This might result in newer versions not loading the
|
||||
+ * pack correctly.
|
||||
+ * </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 The sha1 hash sum of the resource pack file which is used
|
||||
+ * to apply a cached version of the pack directly without downloading
|
||||
+ * if it is available. Hast to be 20 bytes long!
|
||||
+ * @param prompt The optional custom prompt message to be shown to client.
|
||||
+ * @param force If true, the client will be disconnected from the server
|
||||
+ * when it declines to use the resource pack.
|
||||
+ * @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.
|
||||
+ * @throws IllegalArgumentException Thrown if the hash is not 20 bytes
|
||||
+ * long.
|
||||
+ */
|
||||
+ public void setResourcePack(@NotNull String url, @Nullable byte[] hash, @Nullable net.kyori.adventure.text.Component prompt, boolean force);
|
||||
+
|
||||
/**
|
||||
* Gets the Scoreboard displayed to this player
|
||||
*
|
||||
@@ -0,0 +1,50 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Tue, 17 Aug 2021 17:39:21 -0500
|
||||
Subject: [PATCH] Add component support to resource pack api
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 2622cf83dd501b982fdd20b31d174bb0d63d1218..d6618a4ba0e830449f2cf6e60b1d6ff8747bc373 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1733,24 +1733,36 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
|
||||
@Override
|
||||
public void setResourcePack(String url, byte[] hash, String prompt) {
|
||||
+ // Purpur start
|
||||
+ this.setResourcePack(url, hash, io.papermc.paper.adventure.PaperAdventure.LEGACY_SECTION_UXRC.deserialize(prompt), false);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setResourcePack(String url, byte[] hash, net.kyori.adventure.text.Component prompt) {
|
||||
this.setResourcePack(url, hash, prompt, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setResourcePack(String url, byte[] hash, boolean force) {
|
||||
- this.setResourcePack(url, hash, null, force);
|
||||
+ this.setResourcePack(url, hash, (net.kyori.adventure.text.Component) null, force);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setResourcePack(String url, byte[] hash, String prompt, boolean force) {
|
||||
+ this.setResourcePack(url, hash, prompt == null ? null : io.papermc.paper.adventure.PaperAdventure.LEGACY_SECTION_UXRC.deserialize(prompt), force);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setResourcePack(String url, byte[] hash, net.kyori.adventure.text.Component prompt, boolean force) {
|
||||
+ // Purpur end
|
||||
Validate.notNull(url, "Resource pack URL cannot be null");
|
||||
|
||||
if (hash != null) {
|
||||
Validate.isTrue(hash.length == 20, "Resource pack hash should be 20 bytes long but was " + hash.length);
|
||||
|
||||
- this.getHandle().sendTexturePack(url, BaseEncoding.base16().lowerCase().encode(hash), force, CraftChatMessage.fromStringOrNull(prompt, true));
|
||||
+ this.getHandle().sendTexturePack(url, BaseEncoding.base16().lowerCase().encode(hash), force, io.papermc.paper.adventure.PaperAdventure.asVanilla(prompt)); // Purpur
|
||||
} else {
|
||||
- this.getHandle().sendTexturePack(url, "", force, CraftChatMessage.fromStringOrNull(prompt, true));
|
||||
+ this.getHandle().sendTexturePack(url, "", force, io.papermc.paper.adventure.PaperAdventure.asVanilla(prompt)); // Purpur
|
||||
}
|
||||
}
|
||||
|
||||
@@ -223,10 +223,10 @@ index 88bc0807e8bf66a65422f85f1112336334eb3de2..d0e822b329085b9d0a42276c3cacd6cb
|
||||
+ // Purpur end - OfflinePlayer API
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 2622cf83dd501b982fdd20b31d174bb0d63d1218..928b249faed2d79a5f74c612e5ab38ab82b0a26f 100644
|
||||
index d6618a4ba0e830449f2cf6e60b1d6ff8747bc373..eb3324f9f6ec3c90afe8cec2861feebcf0c27ee7 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1908,6 +1908,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@@ -1920,6 +1920,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
return this.getHandle().getAbilities().walkingSpeed * 2f;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user