2022-01-23 14:35:07 +01:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
|
|
|
|
Date: Sun, 26 Dec 2021 20:27:43 -0500
|
|
|
|
Subject: [PATCH] Freeze Tick Lock API
|
|
|
|
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
2024-12-03 19:54:10 +01:00
|
|
|
index 17c8a369e5a09276a3918dfb2bb004441e35a8e0..4784bfb23a7e0004287f89213d50bcfaaaed9e38 100644
|
2022-01-23 14:35:07 +01:00
|
|
|
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
2024-11-04 18:42:38 +01:00
|
|
|
@@ -415,6 +415,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
2022-01-23 14:35:07 +01:00
|
|
|
private org.bukkit.util.Vector origin;
|
|
|
|
@javax.annotation.Nullable
|
|
|
|
private UUID originWorld;
|
|
|
|
+ public boolean freezeLocked = false; // Paper - Freeze Tick Lock API
|
|
|
|
|
|
|
|
public void setOrigin(@javax.annotation.Nonnull Location location) {
|
|
|
|
this.origin = location.toVector();
|
2024-12-03 19:54:10 +01:00
|
|
|
@@ -764,7 +765,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
2024-10-23 22:52:43 +02:00
|
|
|
this.setRemainingFireTicks(this.remainingFireTicks - 1);
|
|
|
|
}
|
2022-01-23 14:35:07 +01:00
|
|
|
|
2024-10-23 22:52:43 +02:00
|
|
|
- if (this.getTicksFrozen() > 0) {
|
|
|
|
+ if (this.getTicksFrozen() > 0 && !freezeLocked) { // Paper - Freeze Tick Lock API
|
|
|
|
this.setTicksFrozen(0);
|
|
|
|
this.level().levelEvent((Player) null, 1009, this.blockPosition, 1);
|
|
|
|
}
|
2024-12-03 19:54:10 +01:00
|
|
|
@@ -2452,6 +2453,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
2022-01-23 14:35:07 +01:00
|
|
|
if (fromNetherPortal) {
|
2023-12-06 19:36:49 +01:00
|
|
|
nbttagcompound.putBoolean("Paper.FromNetherPortal", true);
|
2022-01-23 14:35:07 +01:00
|
|
|
}
|
|
|
|
+ if (freezeLocked) {
|
2023-12-06 19:36:49 +01:00
|
|
|
+ nbttagcompound.putBoolean("Paper.FreezeLock", true);
|
2022-01-23 14:35:07 +01:00
|
|
|
+ }
|
|
|
|
// Paper end
|
2023-12-06 17:00:26 +01:00
|
|
|
return nbttagcompound;
|
2022-01-23 14:35:07 +01:00
|
|
|
} catch (Throwable throwable) {
|
2024-12-03 19:54:10 +01:00
|
|
|
@@ -2599,6 +2603,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
2022-01-23 14:35:07 +01:00
|
|
|
if (spawnReason == null) {
|
|
|
|
spawnReason = org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT;
|
|
|
|
}
|
|
|
|
+ if (nbt.contains("Paper.FreezeLock")) {
|
|
|
|
+ freezeLocked = nbt.getBoolean("Paper.FreezeLock");
|
|
|
|
+ }
|
|
|
|
// Paper end
|
|
|
|
|
|
|
|
} catch (Throwable throwable) {
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
2024-12-03 19:54:10 +01:00
|
|
|
index dfa1e3548f9b48c20f28712ecb06310fe9c856f5..bb96b962439aa62954352f193b44f97d2e826373 100644
|
2022-01-23 14:35:07 +01:00
|
|
|
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
2024-12-03 19:54:10 +01:00
|
|
|
@@ -3621,7 +3621,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
2024-10-23 22:52:43 +02:00
|
|
|
this.calculateEntityAnimation(this instanceof FlyingAnimal);
|
|
|
|
gameprofilerfiller.pop();
|
|
|
|
gameprofilerfiller.push("freezing");
|
2023-06-08 10:08:08 +02:00
|
|
|
- if (!this.level().isClientSide && !this.isDeadOrDying()) {
|
2023-12-06 17:00:26 +01:00
|
|
|
+ if (!this.level().isClientSide && !this.isDeadOrDying() && !this.freezeLocked) { // Paper - Freeze Tick Lock API
|
2023-03-14 21:55:49 +01:00
|
|
|
int i = this.getTicksFrozen();
|
|
|
|
|
2022-01-23 14:35:07 +01:00
|
|
|
if (this.isInPowderSnow && this.canFreeze()) {
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
Rework async chunk api implementation
Firstly, the old methods all routed to the CompletableFuture method.
However, the CF method could not guarantee that if the caller
was off-main that the future would be "completed" on-main. Since
the callback methods used the CF one, this meant that the callback
methods did not guarantee that the callbacks were to be called on
the main thread.
Now, all methods route to getChunkAtAsync(x, z, gen, urgent, cb)
so that the methods with the callback are guaranteed to invoke
the callback on the main thread. The CF behavior remains unchanged;
it may still appear to complete on main if invoked off-main.
Secondly, remove the scheduleOnMain invocation in the async
chunk completion. This unnecessarily delays the callback
by 1 tick.
Thirdly, add getChunksAtAsync(minX, minZ, maxX, maxZ, ...) which
will load chunks within an area. This method is provided as a helper
as keeping all chunks loaded within an area can be complicated to
implement for plugins (due to the lacking ticket API), and is
already implemented internally anyways.
Fourthly, remove the ticket addition that occured with getChunkAt
and getChunkAtAsync. The ticket addition may delay the unloading
of the chunk unnecessarily. It also fixes a very rare timing bug
where the future/callback would be completed after the chunk
unloads.
2024-11-19 07:34:32 +01:00
|
|
|
index 442b5f13e976dd63bf1dccc12eb8c3f16314c581..10fb64df10820974d11f142c102a11a5bd0f317c 100644
|
2022-01-23 14:35:07 +01:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
2024-10-23 22:52:43 +02:00
|
|
|
@@ -324,6 +324,17 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
2022-01-23 14:35:07 +01:00
|
|
|
return this.getHandle().isFullyFrozen();
|
|
|
|
}
|
|
|
|
|
2024-01-19 22:13:42 +01:00
|
|
|
+ // Paper start - Freeze Tick Lock API
|
2022-01-23 14:35:07 +01:00
|
|
|
+ @Override
|
|
|
|
+ public boolean isFreezeTickingLocked() {
|
|
|
|
+ return this.entity.freezeLocked;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void lockFreezeTicks(boolean locked) {
|
|
|
|
+ this.entity.freezeLocked = locked;
|
|
|
|
+ }
|
|
|
|
+ // Paper end - Freeze Tick Lock API
|
|
|
|
@Override
|
|
|
|
public void remove() {
|
2023-12-06 17:00:26 +01:00
|
|
|
this.entity.pluginRemoved = true;
|