forked from PaperMC/Paper
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Lock Frozen Ticks API (PaperMC#7207)
- Loading branch information
1 parent
0a9602c
commit 9a19308
Showing
2 changed files
with
119 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Owen1212055 <[email protected]> | ||
Date: Sun, 26 Dec 2021 20:27:49 -0500 | ||
Subject: [PATCH] Freeze Tick Lock API | ||
|
||
|
||
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java | ||
index 51ec2e4ec4239659272bba3d6ba2ad73926ebb88..c2c45a93887f99466a8ac4275355ac75c7f901c4 100644 | ||
--- a/src/main/java/org/bukkit/entity/Entity.java | ||
+++ b/src/main/java/org/bukkit/entity/Entity.java | ||
@@ -278,6 +278,26 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent | ||
*/ | ||
boolean isFrozen(); | ||
|
||
+ // Paper Start - Freeze Tick Lock API | ||
+ /** | ||
+ * Gets if the entity currently has its freeze ticks locked | ||
+ * to a set amount. | ||
+ * <p> | ||
+ * This is only set by plugins | ||
+ * | ||
+ * @return locked or not | ||
+ */ | ||
+ boolean isFreezeTickingLocked(); | ||
+ | ||
+ /** | ||
+ * Sets if the entity currently has its freeze ticks locked, | ||
+ * preventing default vanilla freeze tick modification. | ||
+ * | ||
+ * @param locked prevent vanilla modification or not | ||
+ */ | ||
+ void lockFreezeTicks(boolean locked); | ||
+ // Paper End - Freeze Tick Lock API | ||
+ | ||
/** | ||
* Mark the entity's removal. | ||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Owen1212055 <[email protected]> | ||
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 | ||
index eac13465c8c1827953a8b1bb2feb4d7f92c773fb..4584dcec835f97e94dcf12788b66703075dafe45 100644 | ||
--- a/src/main/java/net/minecraft/world/entity/Entity.java | ||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java | ||
@@ -332,6 +332,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i | ||
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(); | ||
@@ -758,7 +759,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i | ||
this.setRemainingFireTicks(this.remainingFireTicks - 1); | ||
} | ||
|
||
- 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); | ||
} | ||
@@ -2158,6 +2159,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i | ||
if (fromNetherPortal) { | ||
nbt.putBoolean("Paper.FromNetherPortal", true); | ||
} | ||
+ if (freezeLocked) { | ||
+ nbt.putBoolean("Paper.FreezeLock", true); | ||
+ } | ||
// Paper end | ||
return nbt; | ||
} catch (Throwable throwable) { | ||
@@ -2326,6 +2330,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i | ||
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 | ||
index 44a32fd2c08a09af0bba01547847b8594a7cd077..25338fe4cfdc683ca4c01487e166a1649c6f640b 100644 | ||
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java | ||
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java | ||
@@ -3299,7 +3299,7 @@ public abstract class LivingEntity extends Entity { | ||
boolean flag1 = this.getType().is(EntityTypeTags.FREEZE_HURTS_EXTRA_TYPES); | ||
int i; | ||
|
||
- if (!this.level.isClientSide && !this.isDeadOrDying()) { | ||
+ if (!this.level.isClientSide && !this.isDeadOrDying() && !freezeLocked) { // Paper - Freeze Tick Lock API | ||
i = this.getTicksFrozen(); | ||
if (this.isInPowderSnow && this.canFreeze()) { | ||
this.setTicksFrozen(Math.min(this.getTicksRequiredToFreeze(), i + 1)); | ||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java | ||
index 69223b13e894d86d9529f2ef8b60a08a1f7a9267..a3673e2943f251e056ecf84a9bff2de12efdb52a 100644 | ||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java | ||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java | ||
@@ -660,6 +660,17 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { | ||
return this.getHandle().isFullyFrozen(); | ||
} | ||
|
||
+ // Paper Start - Freeze Tick Lock API | ||
+ @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() { | ||
this.entity.discard(); |