From a80a692e2b2f87827fdac55298aea3772898dd37 Mon Sep 17 00:00:00 2001 From: Riley Park Date: Tue, 8 Mar 2016 22:23:59 -0800 Subject: [PATCH] Add more complete resource pack API --- .../Complete-resource-pack-API.patch | 112 ++++++++++++++++++ .../Complete-resource-pack-API.patch | 88 ++++++++++++++ Spigot-Server-Patches/mc-dev-imports.patch | 38 ++++++ 3 files changed, 238 insertions(+) create mode 100644 Spigot-API-Patches/Complete-resource-pack-API.patch create mode 100644 Spigot-Server-Patches/Complete-resource-pack-API.patch diff --git a/Spigot-API-Patches/Complete-resource-pack-API.patch b/Spigot-API-Patches/Complete-resource-pack-API.patch new file mode 100644 index 0000000000..625de22478 --- /dev/null +++ b/Spigot-API-Patches/Complete-resource-pack-API.patch @@ -0,0 +1,112 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jedediah Smith +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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/entity/Player.java ++++ b/src/main/java/org/bukkit/entity/Player.java +@@ -0,0 +0,0 @@ public interface Player extends HumanEntity, Conversable, CommandSender, Offline + * @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. ++ * @deprecated use {@link #setResourcePack(String, String)} + */ ++ @Deprecated // Paper + public void setResourcePack(String url); + + /** +@@ -0,0 +0,0 @@ public interface Player extends HumanEntity, Conversable, CommandSender, Offline + */ + public void setViewDistance(int viewDistance); + ++ // Paper start ++ /** ++ * Request that the player's client download and switch resource packs. ++ *

++ * 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. ++ *

++ * Notes: ++ *

++ * ++ * @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. ++ */ ++ void setResourcePack(String url, String hash); ++ ++ /** ++ * @return the most recent resource pack status received from the player, ++ * or null if no status has ever been received from this player. ++ */ ++ org.bukkit.event.player.PlayerResourcePackStatusEvent.Status getResourcePackStatus(); ++ ++ /** ++ * @return the most recent resource pack hash received from the player, ++ * or null if no hash has ever been received from this player. ++ */ ++ String getResourcePackHash(); ++ ++ /** ++ * @return true if the last resource pack status received from this player ++ * was {@link org.bukkit.event.player.PlayerResourcePackStatusEvent.Status#SUCCESSFULLY_LOADED} ++ */ ++ boolean hasResourcePack(); ++ // Paper end ++ + // Spigot start + public class Spigot extends Entity.Spigot + { +diff --git a/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java b/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java ++++ b/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java +@@ -0,0 +0,0 @@ import org.bukkit.event.HandlerList; + public class PlayerResourcePackStatusEvent extends PlayerEvent { + + private static final HandlerList handlers = new HandlerList(); ++ private final String hash; // Paper + private final Status status; + ++ @Deprecated // Paper + public PlayerResourcePackStatusEvent(final Player who, Status resourcePackStatus) { + super(who); ++ this.hash = null; // Paper + this.status = resourcePackStatus; + } + ++ // Paper start ++ public PlayerResourcePackStatusEvent(final Player who, Status resourcePackStatus, String hash) { ++ super(who); ++ this.hash = hash; // Paper ++ this.status = resourcePackStatus; ++ } ++ ++ public String getHash() { ++ return this.hash; ++ } ++ // Paper end ++ + /** + * Gets the status of this pack. + * +-- \ No newline at end of file diff --git a/Spigot-Server-Patches/Complete-resource-pack-API.patch b/Spigot-Server-Patches/Complete-resource-pack-API.patch new file mode 100644 index 0000000000..8d22f2000f --- /dev/null +++ b/Spigot-Server-Patches/Complete-resource-pack-API.patch @@ -0,0 +1,88 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jedediah Smith +Date: Sat, 4 Apr 2015 23:17:52 -0400 +Subject: [PATCH] Complete resource pack API + + +diff --git a/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java b/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java ++++ b/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java +@@ -0,0 +0,0 @@ import java.io.IOException; + + public class PacketPlayInResourcePackStatus implements Packet { + +- private String a; ++ public String a; // Paper - make public + public PacketPlayInResourcePackStatus.EnumResourcePackStatus status; + + public PacketPlayInResourcePackStatus() {} +diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/PlayerConnection.java ++++ b/src/main/java/net/minecraft/server/PlayerConnection.java +@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable { + + // CraftBukkit start + public void a(PacketPlayInResourcePackStatus packetplayinresourcepackstatus) { +- this.server.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(getPlayer(), PlayerResourcePackStatusEvent.Status.values()[packetplayinresourcepackstatus.status.ordinal()])); ++ //this.server.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(getPlayer(), PlayerResourcePackStatusEvent.Status.values()[packetplayinresourcepackstatus.status.ordinal()])); // Paper - comment ++ // Paper start ++ PlayerConnectionUtils.ensureMainThread(packetplayinresourcepackstatus, this, this.player.x()); ++ final PlayerResourcePackStatusEvent.Status status = PlayerResourcePackStatusEvent.Status.values()[packetplayinresourcepackstatus.status.ordinal()]; ++ this.getPlayer().setResourcePackStatus(status, packetplayinresourcepackstatus.a); ++ this.server.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(getPlayer(), status, packetplayinresourcepackstatus.a)); ++ // paper end + } + // CraftBukkit end + +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + private double health = 20; + private boolean scaledHealth = false; + private double healthScale = 20; ++ // Paper start ++ private org.bukkit.event.player.PlayerResourcePackStatusEvent.Status resourcePackStatus; ++ private String resourcePackHash; ++ // Paper end + + public CraftPlayer(CraftServer server, EntityPlayer entity) { + super(server, entity); +@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + public void setViewDistance(int viewDistance) { + ((WorldServer) getHandle().world).getPlayerChunkMap().updateViewDistance(getHandle(), viewDistance); + } ++ ++ @Override ++ public void setResourcePack(String url, String hash) { ++ Validate.notNull(url, "Resource pack URL cannot be null"); ++ Validate.notNull(hash, "Hash cannot be null"); ++ this.getHandle().setResourcePack(url, hash); ++ } ++ ++ @Override ++ public org.bukkit.event.player.PlayerResourcePackStatusEvent.Status getResourcePackStatus() { ++ return this.resourcePackStatus; ++ } ++ ++ @Override ++ public String getResourcePackHash() { ++ return this.resourcePackHash; ++ } ++ ++ @Override ++ public boolean hasResourcePack() { ++ return this.resourcePackStatus == org.bukkit.event.player.PlayerResourcePackStatusEvent.Status.SUCCESSFULLY_LOADED; ++ } ++ ++ public void setResourcePackStatus(org.bukkit.event.player.PlayerResourcePackStatusEvent.Status status, String hash) { ++ this.resourcePackStatus = status; ++ this.resourcePackHash = hash; ++ } + // Paper end + + // Spigot start +-- \ No newline at end of file diff --git a/Spigot-Server-Patches/mc-dev-imports.patch b/Spigot-Server-Patches/mc-dev-imports.patch index 584a0bc81a..f12b1b57b0 100644 --- a/Spigot-Server-Patches/mc-dev-imports.patch +++ b/Spigot-Server-Patches/mc-dev-imports.patch @@ -4778,6 +4778,44 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + + public void b(int i, BlockPosition blockposition, int j) {} +} +diff --git a/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java b/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java +new file mode 100644 +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 +--- /dev/null ++++ b/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java +@@ -0,0 +0,0 @@ ++package net.minecraft.server; ++ ++import java.io.IOException; ++ ++public class PacketPlayInResourcePackStatus implements Packet { ++ ++ private String a; ++ public PacketPlayInResourcePackStatus.EnumResourcePackStatus status; ++ ++ public PacketPlayInResourcePackStatus() {} ++ ++ public void a(PacketDataSerializer packetdataserializer) throws IOException { ++ this.a = packetdataserializer.c(40); ++ this.status = (PacketPlayInResourcePackStatus.EnumResourcePackStatus) packetdataserializer.a(PacketPlayInResourcePackStatus.EnumResourcePackStatus.class); ++ } ++ ++ public void b(PacketDataSerializer packetdataserializer) throws IOException { ++ packetdataserializer.a(this.a); ++ packetdataserializer.a((Enum) this.status); ++ } ++ ++ public void a(PacketListenerPlayIn packetlistenerplayin) { ++ packetlistenerplayin.a(this); ++ } ++ ++ public static enum EnumResourcePackStatus { ++ ++ SUCCESSFULLY_LOADED, DECLINED, FAILED_DOWNLOAD, ACCEPTED; ++ ++ private EnumResourcePackStatus() {} ++ } ++} diff --git a/src/main/java/net/minecraft/server/PathfinderGoalFloat.java b/src/main/java/net/minecraft/server/PathfinderGoalFloat.java new file mode 100644 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000