mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-21 10:27:44 +01:00
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
186 lines
8.5 KiB
Diff
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
|
|
|