aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0495-Climbing-should-not-bypass-cramming-gamerule.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0495-Climbing-should-not-bypass-cramming-gamerule.patch')
-rw-r--r--patches/server/0495-Climbing-should-not-bypass-cramming-gamerule.patch157
1 files changed, 157 insertions, 0 deletions
diff --git a/patches/server/0495-Climbing-should-not-bypass-cramming-gamerule.patch b/patches/server/0495-Climbing-should-not-bypass-cramming-gamerule.patch
new file mode 100644
index 0000000000..4bfcf1a94b
--- /dev/null
+++ b/patches/server/0495-Climbing-should-not-bypass-cramming-gamerule.patch
@@ -0,0 +1,157 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: William Blake Galbreath <[email protected]>
+Date: Sun, 23 Aug 2020 20:59:00 +0200
+Subject: [PATCH] Climbing should not bypass cramming gamerule
+
+
+diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
+index d4f89c87b989be9cfb4bd991bc69b85760df4bb2..9068a9646a7e436a5a0d9ea9deb52b78a316ba4a 100644
+--- a/src/main/java/net/minecraft/world/entity/Entity.java
++++ b/src/main/java/net/minecraft/world/entity/Entity.java
+@@ -2057,6 +2057,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
+ }
+
+ public boolean isPushable() {
++ // Paper start
++ return isCollidable(false);
++ }
++
++ public boolean isCollidable(boolean ignoreClimbing) {
++ // Paper end
+ return false;
+ }
+
+diff --git a/src/main/java/net/minecraft/world/entity/EntitySelector.java b/src/main/java/net/minecraft/world/entity/EntitySelector.java
+index d15e62da0307728a7c2be191a27f87da1bb29f49..de06ae3e8757c923a6f3f475a34885d2f15af46e 100644
+--- a/src/main/java/net/minecraft/world/entity/EntitySelector.java
++++ b/src/main/java/net/minecraft/world/entity/EntitySelector.java
+@@ -45,11 +45,17 @@ public final class EntitySelector {
+ }
+
+ public static Predicate<Entity> pushableBy(Entity entity) {
++ // Paper start - ignoreClimbing param
++ return pushable(entity, false);
++ }
++
++ public static Predicate<Entity> pushable(Entity entity, boolean ignoreClimbing) {
++ // Paper end
+ Team scoreboardteambase = entity.getTeam();
+ Team.CollisionRule scoreboardteambase_enumteampush = scoreboardteambase == null ? Team.CollisionRule.ALWAYS : scoreboardteambase.getCollisionRule();
+
+ return (Predicate) (scoreboardteambase_enumteampush == Team.CollisionRule.NEVER ? Predicates.alwaysFalse() : EntitySelector.NO_SPECTATORS.and((entity1) -> {
+- if (!entity1.canCollideWithBukkit(entity) || !entity.canCollideWithBukkit(entity1)) { // CraftBukkit - collidable API
++ if (!entity1.isCollidable(ignoreClimbing) || !entity1.canCollideWithBukkit(entity) || !entity.canCollideWithBukkit(entity1)) { // CraftBukkit - collidable API // Paper - isCollidable
+ return false;
+ } else if (entity.level().isClientSide && (!(entity1 instanceof Player) || !((Player) entity1).isLocalPlayer())) {
+ return false;
+diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
+index 2b0178507a39c95fff94bea382bacebb8c40f1b7..7b68fd746338fadba2b3e9aee4df5fb965299f1a 100644
+--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
++++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
+@@ -3424,7 +3424,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
+ return;
+ }
+ // Paper end - don't run getEntities if we're not going to use its result
+- List<Entity> list = this.level().getEntities((Entity) this, this.getBoundingBox(), EntitySelector.pushableBy(this));
++ List<Entity> list = this.level().getEntities((Entity) this, this.getBoundingBox(), EntitySelector.pushable(this, this.level().paperConfig().collisions.fixClimbingBypassingCrammingRule)); // Paper - fix climbing bypassing cramming rule
+
+ if (!list.isEmpty()) {
+ // Paper - moved up
+@@ -3614,9 +3614,16 @@ public abstract class LivingEntity extends Entity implements Attackable {
+ return !this.isRemoved() && this.collides; // CraftBukkit
+ }
+
++ // Paper start
+ @Override
+ public boolean isPushable() {
+- return this.isAlive() && !this.isSpectator() && !this.onClimbable() && this.collides; // CraftBukkit
++ return this.isCollidable(this.level().paperConfig().collisions.fixClimbingBypassingCrammingRule);
++ }
++
++ @Override
++ public boolean isCollidable(boolean ignoreClimbing) {
++ return this.isAlive() && !this.isSpectator() && (ignoreClimbing || !this.onClimbable()) && this.collides; // CraftBukkit
++ // Paper end
+ }
+
+ // CraftBukkit start - collidable API
+diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+index 867717f130b6fcd48f39d40b10b3f514dbb8798c..5beaa849a250ea005733250ad3edfa8382224667 100644
+--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
++++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+@@ -87,7 +87,7 @@ public class Bat extends AmbientCreature {
+ }
+
+ @Override
+- public boolean isPushable() {
++ public boolean isCollidable(boolean ignoreClimbing) { // Paper
+ return false;
+ }
+
+diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+index e110931ee13ac3e64e455eaa7a30b96d9464df58..397264d31992fd43bd57736c25693ae001330b6d 100644
+--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
++++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+@@ -382,8 +382,8 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder<Parrot
+ }
+
+ @Override
+- public boolean isPushable() {
+- return super.isPushable(); // CraftBukkit - collidable API
++ public boolean isCollidable(boolean ignoreClimbing) { // Paper
++ return super.isCollidable(ignoreClimbing); // CraftBukkit - collidable API // Paper
+ }
+
+ @Override
+diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
+index e7a8120a7d8bc9d668050c7f8fe94df90133b36c..9f46eb8417ad19e6f1bbf369f4c6b94fdb915f5b 100644
+--- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
++++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java
+@@ -286,7 +286,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener,
+ }
+
+ @Override
+- public boolean isPushable() {
++ public boolean isCollidable(boolean ignoreClimbing) { // Paper
+ return !this.isVehicle();
+ }
+
+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 e4e734e0f4c43c1687c8e3a8bbe15441e0bd8e76..d972c59ec98e73d7ccd774e0f06c686251ffe4cf 100644
+--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
++++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+@@ -343,7 +343,7 @@ public class ArmorStand extends LivingEntity {
+ }
+
+ @Override
+- public boolean isPushable() {
++ public boolean isCollidable(boolean ignoreClimbing) { // Paper
+ return false;
+ }
+
+diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
+index 8bea12248bf3ae95c629578386292732d0b74630..a719ea3cd6714686ead9c1817e9592733a980444 100644
+--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
++++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
+@@ -153,7 +153,7 @@ public abstract class AbstractMinecart extends Entity {
+ }
+
+ @Override
+- public boolean isPushable() {
++ public boolean isCollidable(boolean ignoreClimbing) { // Paper
+ return true;
+ }
+
+diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
+index 9f7336a4db680c7f9b8e5486f6b12d2c08b7fefe..7c233b03bac04520f0be9148fcd12282680bd39d 100644
+--- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
++++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
+@@ -163,7 +163,7 @@ public class Boat extends Entity implements VariantHolder<Boat.Type> {
+ }
+
+ @Override
+- public boolean isPushable() {
++ public boolean isCollidable(boolean ignoreClimbing) { // Paper
+ return true;
+ }
+