aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0218-Allow-disabling-armor-stand-ticking.patch
diff options
context:
space:
mode:
authorSpottedleaf <[email protected]>2024-07-17 10:24:53 -0700
committerSpottedleaf <[email protected]>2024-07-17 10:28:32 -0700
commit00b949f1bbbf444e2b5e7b8de7c9b14fbd2133c6 (patch)
tree82639515bc5e9ae00c1e639e72137ed51e1ac688 /patches/server/0218-Allow-disabling-armor-stand-ticking.patch
parent967f98aa81da851740aeb429778e46159fd188df (diff)
downloadPaper-00b949f1bbbf444e2b5e7b8de7c9b14fbd2133c6.tar.gz
Paper-00b949f1bbbf444e2b5e7b8de7c9b14fbd2133c6.zip
Remove Moonrise utils to MCUtils, remove duplicated/unused utils
Diffstat (limited to 'patches/server/0218-Allow-disabling-armor-stand-ticking.patch')
-rw-r--r--patches/server/0218-Allow-disabling-armor-stand-ticking.patch145
1 files changed, 145 insertions, 0 deletions
diff --git a/patches/server/0218-Allow-disabling-armor-stand-ticking.patch b/patches/server/0218-Allow-disabling-armor-stand-ticking.patch
new file mode 100644
index 0000000000..bf0bbc008e
--- /dev/null
+++ b/patches/server/0218-Allow-disabling-armor-stand-ticking.patch
@@ -0,0 +1,145 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: kashike <[email protected]>
+Date: Wed, 15 Aug 2018 01:26:09 -0700
+Subject: [PATCH] Allow disabling armor stand ticking
+
+
+diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+index 1057679ceec86898a3e62bd183c6944f561aa7fd..ee3902cbada46ffb78c42dbf6f00c859546c76e1 100644
+--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
++++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+@@ -96,9 +96,16 @@ public class ArmorStand extends LivingEntity {
+ public Rotations leftLegPose;
+ public Rotations rightLegPose;
+ public boolean canMove = true; // Paper
++ // Paper start - Allow ArmorStands not to tick
++ public boolean canTick = true;
++ public boolean canTickSetByAPI = false;
++ private boolean noTickPoseDirty = false;
++ private boolean noTickEquipmentDirty = false;
++ // Paper end - Allow ArmorStands not to tick
+
+ public ArmorStand(EntityType<? extends ArmorStand> type, Level world) {
+ super(type, world);
++ if (world != null) this.canTick = world.paperConfig().entities.armorStands.tick; // Paper - Allow ArmorStands not to tick
+ this.handItems = NonNullList.withSize(2, ItemStack.EMPTY);
+ this.armorItems = NonNullList.withSize(4, ItemStack.EMPTY);
+ this.headPose = ArmorStand.DEFAULT_HEAD_POSE;
+@@ -201,6 +208,7 @@ public class ArmorStand extends LivingEntity {
+ this.onEquipItem(enumitemslot, (ItemStack) this.armorItems.set(enumitemslot.getIndex(), itemstack), itemstack, silent); // CraftBukkit
+ }
+
++ this.noTickEquipmentDirty = true; // Paper - Allow ArmorStands not to tick; Still update equipment
+ }
+
+ @Override
+@@ -243,6 +251,7 @@ public class ArmorStand extends LivingEntity {
+ }
+
+ nbt.put("Pose", this.writePose());
++ if (this.canTickSetByAPI) nbt.putBoolean("Paper.CanTickOverride", this.canTick); // Paper - Allow ArmorStands not to tick
+ }
+
+ @Override
+@@ -277,6 +286,12 @@ public class ArmorStand extends LivingEntity {
+ this.setNoBasePlate(nbt.getBoolean("NoBasePlate"));
+ this.setMarker(nbt.getBoolean("Marker"));
+ this.noPhysics = !this.hasPhysics();
++ // Paper start - Allow ArmorStands not to tick
++ if (nbt.contains("Paper.CanTickOverride")) {
++ this.canTick = nbt.getBoolean("Paper.CanTickOverride");
++ this.canTickSetByAPI = true;
++ }
++ // Paper end - Allow ArmorStands not to tick
+ CompoundTag nbttagcompound2 = nbt.getCompound("Pose");
+
+ this.readPose(nbttagcompound2);
+@@ -664,7 +679,29 @@ public class ArmorStand extends LivingEntity {
+
+ @Override
+ public void tick() {
++ // Paper start - Allow ArmorStands not to tick
++ if (!this.canTick) {
++ if (this.noTickPoseDirty) {
++ this.noTickPoseDirty = false;
++ this.updatePose();
++ }
++
++ if (this.noTickEquipmentDirty) {
++ this.noTickEquipmentDirty = false;
++ this.detectEquipmentUpdatesPublic();
++ }
++
++ return;
++ }
++ // Paper end - Allow ArmorStands not to tick
++
+ super.tick();
++ // Paper start - Allow ArmorStands not to tick
++ updatePose();
++ }
++
++ public void updatePose() {
++ // Paper end - Allow ArmorStands not to tick
+ Rotations vector3f = (Rotations) this.entityData.get(ArmorStand.DATA_HEAD_POSE);
+
+ if (!this.headPose.equals(vector3f)) {
+@@ -799,31 +836,37 @@ public class ArmorStand extends LivingEntity {
+ public void setHeadPose(Rotations angle) {
+ this.headPose = angle;
+ this.entityData.set(ArmorStand.DATA_HEAD_POSE, angle);
++ this.noTickPoseDirty = true; // Paper - Allow updates when not ticking
+ }
+
+ public void setBodyPose(Rotations angle) {
+ this.bodyPose = angle;
+ this.entityData.set(ArmorStand.DATA_BODY_POSE, angle);
++ this.noTickPoseDirty = true; // Paper - Allow updates when not ticking
+ }
+
+ public void setLeftArmPose(Rotations angle) {
+ this.leftArmPose = angle;
+ this.entityData.set(ArmorStand.DATA_LEFT_ARM_POSE, angle);
++ this.noTickPoseDirty = true; // Paper - Allow updates when not ticking
+ }
+
+ public void setRightArmPose(Rotations angle) {
+ this.rightArmPose = angle;
+ this.entityData.set(ArmorStand.DATA_RIGHT_ARM_POSE, angle);
++ this.noTickPoseDirty = true; // Paper - Allow updates when not ticking
+ }
+
+ public void setLeftLegPose(Rotations angle) {
+ this.leftLegPose = angle;
+ this.entityData.set(ArmorStand.DATA_LEFT_LEG_POSE, angle);
++ this.noTickPoseDirty = true; // Paper - Allow updates when not ticking
+ }
+
+ public void setRightLegPose(Rotations angle) {
+ this.rightLegPose = angle;
+ this.entityData.set(ArmorStand.DATA_RIGHT_LEG_POSE, angle);
++ this.noTickPoseDirty = true; // Paper - Allow updates when not ticking
+ }
+
+ public Rotations getHeadPose() {
+diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
+index 52ffc401bbb9fa768534a4b871f9cc7dbebb8b20..9923cea74ba39a774d6b16a225bc3e455e54c418 100644
+--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
+@@ -232,5 +232,16 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
+ public void setCanMove(boolean move) {
+ getHandle().canMove = move;
+ }
++
++ @Override
++ public boolean canTick() {
++ return this.getHandle().canTick;
++ }
++
++ @Override
++ public void setCanTick(final boolean tick) {
++ this.getHandle().canTick = tick;
++ this.getHandle().canTickSetByAPI = true;
++ }
+ // Paper end
+ }