Files
Purpur/patches/server/0051-Climbing-should-not-bypass-cramming-gamerule.patch
William Blake Galbreath 9c87f5730d Updated Upstream (Paper)
Upstream has released updates that appears to apply and compile correctly

Paper Changes:
b1691e7b Remove some Streams usage in Entity Collision
d454bbd5 Implement JellySquid's Entity Collision optimisations patch
8e85f841 Optimize Collision to not load chunks
ceb824db Fix ChunkCache .getXIfLoaded to use the local chunks in the cache
2020-05-09 19:58:46 -05:00

186 lines
8.5 KiB
Diff

From 67a83ab0381a8c7bcc1c66908354ca49433b88b9 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
Date: Sun, 21 Jul 2019 18:06:20 -0500
Subject: [PATCH] Climbing should not bypass cramming gamerule
---
src/main/java/net/minecraft/server/Entity.java | 6 ++++++
src/main/java/net/minecraft/server/EntityArmorStand.java | 2 +-
src/main/java/net/minecraft/server/EntityBat.java | 2 +-
src/main/java/net/minecraft/server/EntityBoat.java | 2 +-
.../java/net/minecraft/server/EntityHorseAbstract.java | 2 +-
src/main/java/net/minecraft/server/EntityLiving.java | 8 +++++---
.../java/net/minecraft/server/EntityMinecartAbstract.java | 2 +-
src/main/java/net/minecraft/server/EntityParrot.java | 2 +-
src/main/java/net/minecraft/server/IEntitySelector.java | 8 +++++++-
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
10 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index b609808df..2e9496136 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -1571,6 +1571,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
}
public boolean isCollidable() {
+ // Purpur start
+ return isCollidable(false);
+ }
+
+ public boolean isCollidable(boolean ignoreClimbing) {
+ // Purpur end
return false;
}
diff --git a/src/main/java/net/minecraft/server/EntityArmorStand.java b/src/main/java/net/minecraft/server/EntityArmorStand.java
index d35a0b2d9..d4aa9b24f 100644
--- a/src/main/java/net/minecraft/server/EntityArmorStand.java
+++ b/src/main/java/net/minecraft/server/EntityArmorStand.java
@@ -318,7 +318,7 @@ public class EntityArmorStand extends EntityLiving {
}
@Override
- public boolean isCollidable() {
+ public boolean isCollidable(boolean ignoreClimbing) { // Purpur
return false;
}
diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java
index 592408bac..7a740f676 100644
--- a/src/main/java/net/minecraft/server/EntityBat.java
+++ b/src/main/java/net/minecraft/server/EntityBat.java
@@ -85,7 +85,7 @@ public class EntityBat extends EntityAmbient {
}
@Override
- public boolean isCollidable() {
+ public boolean isCollidable(boolean ignoreClimbing) { // Purpur
return false;
}
diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java
index fdf306e80..563fc8ced 100644
--- a/src/main/java/net/minecraft/server/EntityBoat.java
+++ b/src/main/java/net/minecraft/server/EntityBoat.java
@@ -98,7 +98,7 @@ public class EntityBoat extends Entity {
}
@Override
- public boolean isCollidable() {
+ public boolean isCollidable(boolean ignoreClimbing) { // Purpur
return true;
}
diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java
index f31cb0554..0ecdea671 100644
--- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java
+++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java
@@ -181,7 +181,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven
}
@Override
- public boolean isCollidable() {
+ public boolean isCollidable(boolean ignoreClimbing) { // Purpur
return !this.isVehicle();
}
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index c1cc24cf1..0f8ba92a8 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -2692,7 +2692,7 @@ public abstract class EntityLiving extends Entity {
return;
}
// Paper - end don't run getEntities if we're not going to use its result
- List<Entity> list = this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.a(this));
+ List<Entity> list = this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.pushable(this, world.purpurConfig.fixClimbingBypassingCrammingRule)); // Purpur
if (!list.isEmpty()) {
// Paper - move up
@@ -2830,8 +2830,10 @@ public abstract class EntityLiving extends Entity {
}
@Override
- public boolean isCollidable() {
- return this.isAlive() && !this.isClimbing() && this.collides; // CraftBukkit
+ // Purpur start
+ public boolean isCollidable(boolean ignoreClimbing) {
+ return this.isAlive() && (ignoreClimbing || !isClimbing()) && this.collides; // CraftBukkit
+ // Purpur end
}
@Override
diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
index 1f3e5bd28..ae4758f25 100644
--- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
+++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
@@ -105,7 +105,7 @@ public abstract class EntityMinecartAbstract extends Entity {
}
@Override
- public boolean isCollidable() {
+ public boolean isCollidable(boolean ignoreClimbing) { // Purpur
return true;
}
diff --git a/src/main/java/net/minecraft/server/EntityParrot.java b/src/main/java/net/minecraft/server/EntityParrot.java
index 7ba2f3a35..dd2cd7b21 100644
--- a/src/main/java/net/minecraft/server/EntityParrot.java
+++ b/src/main/java/net/minecraft/server/EntityParrot.java
@@ -392,7 +392,7 @@ public class EntityParrot extends EntityPerchable implements EntityBird {
}
@Override
- public boolean isCollidable() {
+ public boolean isCollidable(boolean ignoreClimbing) { // Purpur
return true;
}
diff --git a/src/main/java/net/minecraft/server/IEntitySelector.java b/src/main/java/net/minecraft/server/IEntitySelector.java
index 0bf1a14b7..9f5860ca8 100644
--- a/src/main/java/net/minecraft/server/IEntitySelector.java
+++ b/src/main/java/net/minecraft/server/IEntitySelector.java
@@ -36,11 +36,17 @@ public final class IEntitySelector {
}
public static Predicate<Entity> a(Entity entity) {
+ // Purpur start
+ return pushable(entity, false);
+ }
+
+ public static Predicate<Entity> pushable(Entity entity, boolean ignoreClimbing) {
+ // Purpur end
ScoreboardTeamBase scoreboardteambase = entity.getScoreboardTeam();
ScoreboardTeamBase.EnumTeamPush scoreboardteambase_enumteampush = scoreboardteambase == null ? ScoreboardTeamBase.EnumTeamPush.ALWAYS : scoreboardteambase.getCollisionRule();
return (Predicate) (scoreboardteambase_enumteampush == ScoreboardTeamBase.EnumTeamPush.NEVER ? Predicates.alwaysFalse() : IEntitySelector.f.and((entity1) -> {
- if (!entity1.isCollidable()) {
+ if (!entity1.isCollidable(ignoreClimbing)) {
return false;
} else if (entity.world.isClientSide && (!(entity1 instanceof EntityHuman) || !((EntityHuman) entity1).ec())) {
return false;
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 61c19661c..1a2512b52 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -136,6 +136,7 @@ public class PurpurWorldConfig {
public double controllableMinecartsBaseSpeed = 0.1D;
public Map<Block, Double> controllableMinecartsBlockSpeeds = new HashMap<>();
public boolean disableDropsOnCrammingDeath = false;
+ public boolean fixClimbingBypassingCrammingRule = false;
public boolean milkCuresBadOmen = true;
public boolean useBetterMending = false;
private void gameplayMechanicsSettings() {
@@ -157,6 +158,7 @@ public class PurpurWorldConfig {
set("gameplay-mechanics.controllable-minecarts.block-speed.stone", 0.5D);
}
disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
+ fixClimbingBypassingCrammingRule = getBoolean("gameplay-mechanics.fix-climbing-bypassing-cramming-rule", fixClimbingBypassingCrammingRule);
milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen);
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
}
--
2.24.0