mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 08:27:43 +01:00
Movement options for armor stands
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/>.
This commit is contained in:
committed by
granny
parent
994a5621f5
commit
de8dffe5f2
@@ -1,6 +1,7 @@
|
|||||||
# This file is auto generated, any changes may be overridden!
|
# This file is auto generated, any changes may be overridden!
|
||||||
# See CONTRIBUTING.md on how to add access transformers.
|
# See CONTRIBUTING.md on how to add access transformers.
|
||||||
protected net.minecraft.world.entity.Entity dimensions
|
protected net.minecraft.world.entity.Entity dimensions
|
||||||
|
public net.minecraft.world.entity.Entity updateInWaterStateAndDoWaterCurrentPushing()V
|
||||||
public net.minecraft.world.entity.LivingEntity canGlide()Z
|
public net.minecraft.world.entity.LivingEntity canGlide()Z
|
||||||
public net.minecraft.world.entity.monster.Shulker MAX_SCALE
|
public net.minecraft.world.entity.monster.Shulker MAX_SCALE
|
||||||
public net.minecraft.world.entity.player.Player canGlide()Z
|
public net.minecraft.world.entity.player.Player canGlide()Z
|
||||||
|
|||||||
@@ -1,88 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mariell Hoversholm <proximyst@proximyst.com>
|
|
||||||
Date: Sat, 9 Jan 2021 22:22:59 +0100
|
|
||||||
Subject: [PATCH] Movement options for armor stands
|
|
||||||
|
|
||||||
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/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
|
|
||||||
index c0e8739f0dd9290550872839eddca4b0090b603b..cfe26c762b2affa5050c175f6ab0306af6cfbe71 100644
|
|
||||||
--- a/net/minecraft/world/entity/Entity.java
|
|
||||||
+++ b/net/minecraft/world/entity/Entity.java
|
|
||||||
@@ -2037,7 +2037,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
|
||||||
return this.isInWater() || flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
- void updateInWaterStateAndDoWaterCurrentPushing() {
|
|
||||||
+ public void updateInWaterStateAndDoWaterCurrentPushing() { // Purpur - package-private -> public - Movement options for armor stands
|
|
||||||
Entity entity = this.getVehicle();
|
|
||||||
|
|
||||||
if (entity instanceof AbstractBoat abstractboat) {
|
|
||||||
diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java
|
|
||||||
index 12ff824ffa81ea45f76337ec2b6d80b01047b698..e1c7a644dc922ca726cebf71ec2f0b159d6db289 100644
|
|
||||||
--- a/net/minecraft/world/entity/decoration/ArmorStand.java
|
|
||||||
+++ b/net/minecraft/world/entity/decoration/ArmorStand.java
|
|
||||||
@@ -114,10 +114,12 @@ public class ArmorStand extends LivingEntity {
|
|
||||||
private boolean noTickPoseDirty = false;
|
|
||||||
private boolean noTickEquipmentDirty = false;
|
|
||||||
// Paper end - Allow ArmorStands not to tick
|
|
||||||
+ public boolean canMovementTick = true; // Purpur - Movement options for armor stands
|
|
||||||
|
|
||||||
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
|
|
||||||
+ if (world != null) this.canMovementTick = world.purpurConfig.armorstandMovement; // Purpur - Movement options for armor stands
|
|
||||||
this.handItems = NonNullList.withSize(2, ItemStack.EMPTY);
|
|
||||||
this.armorItems = NonNullList.withSize(4, ItemStack.EMPTY);
|
|
||||||
this.headPose = ArmorStand.DEFAULT_HEAD_POSE;
|
|
||||||
@@ -1015,4 +1017,18 @@ public class ArmorStand extends LivingEntity {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Paper end
|
|
||||||
+
|
|
||||||
+ // Purpur start - Movement options for armor stands
|
|
||||||
+ @Override
|
|
||||||
+ public void updateInWaterStateAndDoWaterCurrentPushing() {
|
|
||||||
+ if (this.level().purpurConfig.armorstandWaterMovement &&
|
|
||||||
+ (this.level().purpurConfig.armorstandWaterFence || !(level().getBlockState(blockPosition().below()).getBlock() instanceof net.minecraft.world.level.block.FenceBlock)))
|
|
||||||
+ super.updateInWaterStateAndDoWaterCurrentPushing();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ @Override
|
|
||||||
+ public void aiStep() {
|
|
||||||
+ if (this.canMovementTick && this.canMove) super.aiStep();
|
|
||||||
+ }
|
|
||||||
+ // Purpur end - Movement options for armor stands
|
|
||||||
}
|
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
index 3739561c633627ba3fe80f89bce84a243705f4bc..86b27b11f178be0cc05842ccb3ffe4ef14196855 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
@@ -100,10 +100,16 @@ public class PurpurWorldConfig {
|
|
||||||
public float armorstandStepHeight = 0.0F;
|
|
||||||
public boolean armorstandSetNameVisible = false;
|
|
||||||
public boolean armorstandFixNametags = false;
|
|
||||||
+ public boolean armorstandMovement = true;
|
|
||||||
+ public boolean armorstandWaterMovement = true;
|
|
||||||
+ public boolean armorstandWaterFence = true;
|
|
||||||
private void armorstandSettings() {
|
|
||||||
armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
|
|
||||||
armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible);
|
|
||||||
armorstandFixNametags = getBoolean("gameplay-mechanics.armorstand.fix-nametags", armorstandFixNametags);
|
|
||||||
+ armorstandMovement = getBoolean("gameplay-mechanics.armorstand.can-movement-tick", armorstandMovement);
|
|
||||||
+ armorstandWaterMovement = getBoolean("gameplay-mechanics.armorstand.can-move-in-water", armorstandWaterMovement);
|
|
||||||
+ armorstandWaterFence = getBoolean("gameplay-mechanics.armorstand.can-move-in-water-over-fence", armorstandWaterFence);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean arrowMovementResetsDespawnCounter = true;
|
|
||||||
@@ -6,10 +6,10 @@ Subject: [PATCH] Apply display names from item forms of entities to entities
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java
|
diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||||
index 9f5b23fe003de62458a58b0f6af13e23606e3e85..9327841ad53bb6057394e0d009491a9e8e5c0344 100644
|
index 927f8204d0130b410e4dbff657f57bead77b3eb3..581125b786c4d7c5fbd021e65bfd78ef4f5b7a08 100644
|
||||||
--- a/net/minecraft/world/entity/decoration/ArmorStand.java
|
--- a/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||||
+++ b/net/minecraft/world/entity/decoration/ArmorStand.java
|
+++ b/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||||
@@ -561,6 +561,7 @@ public class ArmorStand extends LivingEntity {
|
@@ -563,6 +563,7 @@ public class ArmorStand extends LivingEntity {
|
||||||
|
|
||||||
private org.bukkit.event.entity.EntityDeathEvent brokenByPlayer(ServerLevel level, DamageSource damageSource) { // Paper
|
private org.bukkit.event.entity.EntityDeathEvent brokenByPlayer(ServerLevel level, DamageSource damageSource) { // Paper
|
||||||
ItemStack itemStack = new ItemStack(Items.ARMOR_STAND);
|
ItemStack itemStack = new ItemStack(Items.ARMOR_STAND);
|
||||||
|
|||||||
@@ -30,6 +30,15 @@
|
|||||||
public Entity(EntityType<?> entityType, Level level) {
|
public Entity(EntityType<?> entityType, Level level) {
|
||||||
this.type = entityType;
|
this.type = entityType;
|
||||||
this.level = level;
|
this.level = level;
|
||||||
|
@@ -1899,7 +_,7 @@
|
||||||
|
return this.isInWater() || flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
- public void updateInWaterStateAndDoWaterCurrentPushing() {
|
||||||
|
+ public void updateInWaterStateAndDoWaterCurrentPushing() { // Purpur - Movement options for armor stands - package-private -> public - TODO: use AT file
|
||||||
|
if (this.getVehicle() instanceof AbstractBoat abstractBoat && !abstractBoat.isUnderWater()) {
|
||||||
|
this.wasTouchingWater = false;
|
||||||
|
} else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) {
|
||||||
@@ -2922,6 +_,7 @@
|
@@ -2922,6 +_,7 @@
|
||||||
if (this.isAlive() && this instanceof Leashable leashable) {
|
if (this.isAlive() && this instanceof Leashable leashable) {
|
||||||
if (leashable.getLeashHolder() == player) {
|
if (leashable.getLeashHolder() == player) {
|
||||||
|
|||||||
@@ -1,5 +1,18 @@
|
|||||||
--- a/net/minecraft/world/entity/decoration/ArmorStand.java
|
--- a/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||||
+++ b/net/minecraft/world/entity/decoration/ArmorStand.java
|
+++ b/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||||
|
@@ -93,10 +_,12 @@
|
||||||
|
private boolean noTickPoseDirty = false;
|
||||||
|
private boolean noTickEquipmentDirty = false;
|
||||||
|
// Paper end - Allow ArmorStands not to tick
|
||||||
|
+ public boolean canMovementTick = true; // Purpur - Movement options for armor stands
|
||||||
|
|
||||||
|
public ArmorStand(EntityType<? extends ArmorStand> entityType, Level level) {
|
||||||
|
super(entityType, level);
|
||||||
|
if (level != null) this.canTick = level.paperConfig().entities.armorStands.tick; // Paper - Allow ArmorStands not to tick
|
||||||
|
+ if (level != null) this.canMovementTick = level.purpurConfig.armorstandMovement; // Purpur - Movement options for armor stands
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArmorStand(Level level, double x, double y, double z) {
|
||||||
@@ -620,6 +_,7 @@
|
@@ -620,6 +_,7 @@
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -8,3 +21,22 @@
|
|||||||
// Paper start - Allow ArmorStands not to tick
|
// Paper start - Allow ArmorStands not to tick
|
||||||
if (!this.canTick) {
|
if (!this.canTick) {
|
||||||
if (this.noTickPoseDirty) {
|
if (this.noTickPoseDirty) {
|
||||||
|
@@ -949,4 +_,18 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Paper end
|
||||||
|
+
|
||||||
|
+ // Purpur start - Movement options for armor stands
|
||||||
|
+ @Override
|
||||||
|
+ public void updateInWaterStateAndDoWaterCurrentPushing() {
|
||||||
|
+ if (this.level().purpurConfig.armorstandWaterMovement &&
|
||||||
|
+ (this.level().purpurConfig.armorstandWaterFence || !(level().getBlockState(blockPosition().below()).getBlock() instanceof net.minecraft.world.level.block.FenceBlock)))
|
||||||
|
+ super.updateInWaterStateAndDoWaterCurrentPushing();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public void aiStep() {
|
||||||
|
+ if (this.canMovementTick && this.canMove) super.aiStep();
|
||||||
|
+ }
|
||||||
|
+ // Purpur end - Movement options for armor stands
|
||||||
|
}
|
||||||
|
|||||||
@@ -92,10 +92,16 @@ public class PurpurWorldConfig {
|
|||||||
public float armorstandStepHeight = 0.0F;
|
public float armorstandStepHeight = 0.0F;
|
||||||
public boolean armorstandSetNameVisible = false;
|
public boolean armorstandSetNameVisible = false;
|
||||||
public boolean armorstandFixNametags = false;
|
public boolean armorstandFixNametags = false;
|
||||||
|
public boolean armorstandMovement = true;
|
||||||
|
public boolean armorstandWaterMovement = true;
|
||||||
|
public boolean armorstandWaterFence = true;
|
||||||
private void armorstandSettings() {
|
private void armorstandSettings() {
|
||||||
armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
|
armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
|
||||||
armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible);
|
armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible);
|
||||||
armorstandFixNametags = getBoolean("gameplay-mechanics.armorstand.fix-nametags", armorstandFixNametags);
|
armorstandFixNametags = getBoolean("gameplay-mechanics.armorstand.fix-nametags", armorstandFixNametags);
|
||||||
|
armorstandMovement = getBoolean("gameplay-mechanics.armorstand.can-movement-tick", armorstandMovement);
|
||||||
|
armorstandWaterMovement = getBoolean("gameplay-mechanics.armorstand.can-move-in-water", armorstandWaterMovement);
|
||||||
|
armorstandWaterFence = getBoolean("gameplay-mechanics.armorstand.can-move-in-water-over-fence", armorstandWaterFence);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean arrowMovementResetsDespawnCounter = true;
|
public boolean arrowMovementResetsDespawnCounter = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user