-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
106 additions
and
2 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,53 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: SoSeDiK <[email protected]> | ||
Date: Wed, 11 Jan 2023 20:59:02 +0200 | ||
Subject: [PATCH] Expand Pose API | ||
|
||
|
||
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java | ||
index 4669037e4dc9d7bb283e0e2fb4c955bec31b916d..762cb07861ca8ff058ce8d57ea6c15df1e588bf3 100644 | ||
--- a/src/main/java/org/bukkit/entity/Entity.java | ||
+++ b/src/main/java/org/bukkit/entity/Entity.java | ||
@@ -782,6 +782,42 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent | ||
* @param sneak true if the entity should be sneaking | ||
*/ | ||
void setSneaking(boolean sneak); | ||
+ | ||
+ /** | ||
+ * Sets the entity's current {@link Pose}. | ||
+ * | ||
+ * <p>Note: While poses affect some things like hitboxes, they do not change the entity's state | ||
+ * (e.g. having {@link Pose#SNEAKING} does not guarantee {@link #isSneaking()} being {@code true}). | ||
+ * | ||
+ * <p>If applied to the {@link Player}, they might see a different pose client-side. | ||
+ * | ||
+ * @param pose a new {@link Pose} | ||
+ * @see #setPose(Pose, boolean) | ||
+ */ | ||
+ default void setPose(@NotNull Pose pose) { | ||
+ setPose(pose, false); | ||
+ } | ||
+ | ||
+ /** | ||
+ * Sets the entity's current {@link Pose}. | ||
+ * | ||
+ * <p>Note: While poses affect some things like hitboxes, they do not change the entity's state | ||
+ * (e.g. having {@link Pose#SNEAKING} does not guarantee {@link #isSneaking()} being {@code true}). | ||
+ * | ||
+ * <p>If applied to the {@link Player}, they might see a different pose client-side. | ||
+ * | ||
+ * @param pose a new {@link Pose} | ||
+ * @param fixed whether the new {@link Pose} should stay until manually changed | ||
+ */ | ||
+ void setPose(@NotNull Pose pose, boolean fixed); | ||
+ | ||
+ /** | ||
+ * Checks whether the entity has a fixed {@link Pose} | ||
+ * | ||
+ * @see #setPose(Pose, boolean) | ||
+ * @return whether the entity has a fixed {@link Pose} | ||
+ */ | ||
+ boolean hasFixedPose(); | ||
// Paper end | ||
|
||
/** |
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
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,51 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: SoSeDiK <[email protected]> | ||
Date: Wed, 11 Jan 2023 20:59:01 +0200 | ||
Subject: [PATCH] Expand Pose API | ||
|
||
|
||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java | ||
index 0ed297f189e5d21c497ac78294db6ca664c0f2c4..e8485fb900b25e911a858678a833852731cb2ace 100644 | ||
--- a/src/main/java/net/minecraft/world/entity/Entity.java | ||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java | ||
@@ -417,6 +417,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { | ||
private UUID originWorld; | ||
public boolean freezeLocked = false; // Paper - Freeze Tick Lock API | ||
public boolean collidingWithWorldBorder; // Paper | ||
+ public boolean fixedPose = false; // Paper | ||
|
||
public void setOrigin(@javax.annotation.Nonnull Location location) { | ||
this.origin = location.toVector(); | ||
@@ -701,6 +702,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { | ||
public void onClientRemoval() {} | ||
|
||
public void setPose(net.minecraft.world.entity.Pose pose) { | ||
+ if (this.fixedPose) return; // Paper | ||
// CraftBukkit start | ||
if (pose == this.getPose()) { | ||
return; | ||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java | ||
index 7e132298252d196a97c99b45e58a3ac9a1de7216..2dbe8b870fd39b4d22e9725912f443757ae70761 100644 | ||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java | ||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java | ||
@@ -1227,6 +1227,20 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { | ||
public boolean isSneaking() { | ||
return this.getHandle().isShiftKeyDown(); | ||
} | ||
+ | ||
+ @Override | ||
+ public void setPose(Pose pose, boolean fixed) { | ||
+ Preconditions.checkNotNull(pose, "Pose cannot be null"); | ||
+ final Entity handle = this.getHandle(); | ||
+ handle.fixedPose = false; | ||
+ handle.setPose(net.minecraft.world.entity.Pose.values()[pose.ordinal()]); | ||
+ handle.fixedPose = fixed; | ||
+ } | ||
+ | ||
+ @Override | ||
+ public boolean hasFixedPose() { | ||
+ return this.getHandle().fixedPose; | ||
+ } | ||
// Paper end | ||
|
||
@Override |