aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0460-Climbing-should-not-bypass-cramming-gamerule.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0460-Climbing-should-not-bypass-cramming-gamerule.patch')
-rw-r--r--patches/server/0460-Climbing-should-not-bypass-cramming-gamerule.patch156
1 files changed, 156 insertions, 0 deletions
diff --git a/patches/server/0460-Climbing-should-not-bypass-cramming-gamerule.patch b/patches/server/0460-Climbing-should-not-bypass-cramming-gamerule.patch
new file mode 100644
index 0000000000..6d2f4c2108
--- /dev/null
+++ b/patches/server/0460-Climbing-should-not-bypass-cramming-gamerule.patch
@@ -0,0 +1,156 @@
+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 2c0c41ae455ae5894e6bd85830741143c3d8aaa5..82ccfd91dfd3cce35a35edf8f73ccdd1ddd1fd6a 100644
+--- a/src/main/java/net/minecraft/world/entity/Entity.java
++++ b/src/main/java/net/minecraft/world/entity/Entity.java
+@@ -1983,6 +1983,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S
+ }
+
+ public boolean isPushable() {
++ // Paper start - Climbing should not bypass cramming gamerule
++ return isCollidable(false);
++ }
++
++ public boolean isCollidable(boolean ignoreClimbing) {
++ // Paper end - Climbing should not bypass cramming gamerule
+ 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 ee4495b67c46cf1282cdd6ad15b224b0b7b10bfb..e382a29b441b656f35bc24cb90f95cb4def433d2 100644
+--- a/src/main/java/net/minecraft/world/entity/EntitySelector.java
++++ b/src/main/java/net/minecraft/world/entity/EntitySelector.java
+@@ -46,11 +46,16 @@ public final class EntitySelector {
+ }
+
+ public static Predicate<Entity> pushableBy(Entity entity) {
++ // Paper start - Climbing should not bypass cramming gamerule
++ return pushable(entity, false);
++ }
++ public static Predicate<Entity> pushable(Entity entity, boolean ignoreClimbing) {
++ // Paper end - Climbing should not bypass cramming gamerule
+ PlayerTeam scoreboardteam = entity.getTeam();
+ Team.CollisionRule scoreboardteambase_enumteampush = scoreboardteam == null ? Team.CollisionRule.ALWAYS : scoreboardteam.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 - Climbing should not bypass cramming gamerule
+ 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 4aad2d99148a0d6ee06049f20de2aaa6218c1d39..87fb0fe5579ba09534e379d34b134c868e838143 100644
+--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
++++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
+@@ -3447,7 +3447,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 - Climbing should not bypass cramming gamerule
+
+ if (!list.isEmpty()) {
+ // Paper - don't run getEntities if we're not going to use its result; moved up
+@@ -3637,9 +3637,16 @@ public abstract class LivingEntity extends Entity implements Attackable {
+ return !this.isRemoved() && this.collides; // CraftBukkit
+ }
+
++ // Paper start - Climbing should not bypass cramming gamerule
+ @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 - Climbing should not bypass cramming gamerule
+ }
+
+ // 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 bc9a710a92662b1f69b0f5b289780fe0a0d5ed32..44fa2d4f90389f5526746bd94a2450c03340bd0b 100644
+--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
++++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+@@ -90,7 +90,7 @@ public class Bat extends AmbientCreature {
+ }
+
+ @Override
+- public boolean isPushable() {
++ public boolean isCollidable(boolean ignoreClimbing) { // Paper - Climbing should not bypass cramming gamerule
+ 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 fbad0e512b990c3d6885ecf92766ba6fd851cc20..f3f48225c2a1e4bd3d0091d1b4b7e4e150850ed2 100644
+--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
++++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+@@ -383,8 +383,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 - Climbing should not bypass cramming gamerule
++ return super.isCollidable(ignoreClimbing); // CraftBukkit - collidable API // Paper - Climbing should not bypass cramming gamerule
+ }
+
+ @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 6b7453281e32aae20778f26b4098df418401c45b..8fc65fd7347340a89dba0b9839497aadfcc67d79 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 - Climbing should not bypass cramming gamerule
+ 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 bc1a95f466b700bb0530cf0bb61fcbcbe21f5bbb..f62b5976e307a69ca40d51ae76126005c801df0c 100644
+--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
++++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java
+@@ -344,7 +344,7 @@ public class ArmorStand extends LivingEntity {
+ }
+
+ @Override
+- public boolean isPushable() {
++ public boolean isCollidable(boolean ignoreClimbing) { // Paper - Climbing should not bypass cramming gamerule
+ 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 e390735d411d815dcc4591da58db7017452acf31..be16ab6da56d2aa2a21ee378cfc44dbb14e108b3 100644
+--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
++++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
+@@ -172,7 +172,7 @@ public abstract class AbstractMinecart extends VehicleEntity {
+ }
+
+ @Override
+- public boolean isPushable() {
++ public boolean isCollidable(boolean ignoreClimbing) { // Paper - Climbing should not bypass cramming gamerule
+ 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 e6a7bf9a27fb66d8c2210678dbe8afa8bbf5e7c8..0178eb918179b12d7d8eb56cd72e5bfc34cfdbaf 100644
+--- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
++++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
+@@ -157,7 +157,7 @@ public class Boat extends VehicleEntity implements VariantHolder<Boat.Type> {
+ }
+
+ @Override
+- public boolean isPushable() {
++ public boolean isCollidable(boolean ignoreClimbing) { // Paper - Climbing should not bypass cramming gamerule
+ return true;
+ }
+