mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 08:57:44 +01:00
Upstream has released updates that appear to apply and compile correctly Paper Changes: 8a29f5894 [Auto] Updated Upstream (Bukkit/CraftBukkit) 8756d232c Expose server protocol version (#5416) 4492bc4cc remove l4j class no longer in existence from preload list be1370517 Updated Upstream (CraftBukkit) (#5484) d560151ec Bump mysql-connector-java to 8.0.23 (Fixes #5473) (#5474) 61f400f11 Update log4j to 2.11.2 for JDK 9+ compat (#5400) a98196585 Updated Upstream (Bukkit/CraftBukkit) de138fac4 [Auto] Updated Upstream (Bukkit) 304a216ba [CI-SKIP] Ignore gitignore when adding files in automation d8e384a16 [CI-SKIP] Drop `Allow PlayerEditBookEvent to fire for off hand` (#5471) Tuinity Changes: d5261ad29 Do not load chunks for getCubes by default da9cf9828 Don't read neighbor chunk data off disk when converting chunks a0aa5ab07 Do not load 1 radius neighbors for lighting 5ccfa52a2 Fix terrible patch times af53d703a Stop large move vectors in player packet handling from killing the server 6e56ee735 Fix OBFHELPER for flushHeaderin RegionFile 995d05c1c Do not update TE's in generating chunks Airplane Changes: 8de8e82a2 Update upstream (Tuinity)
81 lines
3.4 KiB
Diff
81 lines
3.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Mariell Hoversholm <proximyst@proximyst.com>
|
|
Date: Sat, 9 Jan 2021 21:21:27 +0100
|
|
Subject: [PATCH] Add unsafe Entity serialization API
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java
|
|
index db4b94f8a4dd49fffdcb0cd9bf0690f0770653d9..bca389b75ed072ec95beb7a5c5eb5ac93ce42ecd 100644
|
|
--- a/src/main/java/org/bukkit/UnsafeValues.java
|
|
+++ b/src/main/java/org/bukkit/UnsafeValues.java
|
|
@@ -159,4 +159,28 @@ public interface UnsafeValues {
|
|
*/
|
|
int getProtocolVersion();
|
|
// Paper end
|
|
+
|
|
+ // Purpur start
|
|
+
|
|
+ /**
|
|
+ * Serialize entity to byte array
|
|
+ *
|
|
+ * @param entity entity to serialize
|
|
+ * @return serialized entity
|
|
+ */
|
|
+ byte[] serializeEntity(org.bukkit.entity.Entity entity);
|
|
+
|
|
+ /**
|
|
+ * Deserialize an entity from byte array
|
|
+ * <p>
|
|
+ * The entity is not automatically spawned in the world. You will have to spawn
|
|
+ * the entity yourself with {@link org.bukkit.entity.Entity#spawnAt(Location)} or
|
|
+ * {@link org.bukkit.entity.Entity#spawnAt(Location, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason)}
|
|
+ *
|
|
+ * @param data serialized entity
|
|
+ * @param world world entity belongs in
|
|
+ * @return deserialized entity
|
|
+ */
|
|
+ org.bukkit.entity.Entity deserializeEntity(byte[] data, org.bukkit.World world);
|
|
+ // Purpur end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
|
|
index c51d545e137eec2017c9f2ff944db70f2fdffdfc..1e25f387e053b648477a3e9dace1a6c95e7f8cba 100644
|
|
--- a/src/main/java/org/bukkit/entity/Entity.java
|
|
+++ b/src/main/java/org/bukkit/entity/Entity.java
|
|
@@ -751,5 +751,24 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
|
|
* @return True if ridable in water
|
|
*/
|
|
boolean isRidableInWater();
|
|
+
|
|
+ /**
|
|
+ * Spawn this entity in the world at the given {@link Location} with the default spawn reason.
|
|
+ *
|
|
+ * @param location The location at which to spawn the entity.
|
|
+ * @return Whether the entity was successfully spawned.
|
|
+ */
|
|
+ default boolean spawnAt(@NotNull Location location) {
|
|
+ return spawnAt(location, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Spawn this entity in the world at the given {@link Location} with the reason given.
|
|
+ *
|
|
+ * @param location The location at which to spawn the entity.
|
|
+ * @param spawnReason The reason for which the entity was spawned.
|
|
+ * @return Whether the entity was successfully spawned.
|
|
+ */
|
|
+ boolean spawnAt(@NotNull Location location, @NotNull org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason);
|
|
// Purpur end
|
|
}
|