mirror of
https://github.com/Samsuik/Sakura.git
synced 2025-12-28 11:19:08 +00:00
Add pre 1.21.10 stuckSpeed behaviour to mechanic version
This commit is contained in:
@@ -83,7 +83,7 @@ index 703a75c7c6cd05a95afb630973250898dbc7223d..1531f0c275814e1346fef34dc06ea976
|
||||
// CraftBukkit end
|
||||
serverLevel.addFreshEntity(primedTnt);
|
||||
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
|
||||
index 128f62186d18186b7ba3a0c40a2723b8a933e8fb..c9f5accf384bae21b0a177526e77429f9795d975 100644
|
||||
index 128f62186d18186b7ba3a0c40a2723b8a933e8fb..c7f1cbd6aa044a434b193e7e0b1f34bf11b6c4e6 100644
|
||||
--- a/net/minecraft/world/entity/Entity.java
|
||||
+++ b/net/minecraft/world/entity/Entity.java
|
||||
@@ -588,6 +588,13 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||
@@ -121,6 +121,15 @@ index 128f62186d18186b7ba3a0c40a2723b8a933e8fb..c9f5accf384bae21b0a177526e77429f
|
||||
// Paper start - EAR 2
|
||||
this.activatedTick = Math.max(this.activatedTick, net.minecraft.server.MinecraftServer.currentTick + 20);
|
||||
this.activatedImmunityTick = Math.max(this.activatedImmunityTick, net.minecraft.server.MinecraftServer.currentTick + 20);
|
||||
@@ -1184,7 +1194,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||
ProfilerFiller profilerFiller = Profiler.get();
|
||||
profilerFiller.push("move");
|
||||
if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7) {
|
||||
- if (type != MoverType.PISTON) {
|
||||
+ if (type != MoverType.PISTON || mechanicsTarget.before(me.samsuik.sakura.mechanics.MechanicVersion.v1_21_10)) { // Sakura - configure server mechanics
|
||||
movement = movement.multiply(this.stuckSpeedMultiplier);
|
||||
}
|
||||
|
||||
@@ -1202,10 +1212,17 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||
movement = this.maybeBackOffFromEdge(movement, type);
|
||||
Vec3 vec3 = this.collide(movement);
|
||||
@@ -174,6 +183,15 @@ index 128f62186d18186b7ba3a0c40a2723b8a933e8fb..c9f5accf384bae21b0a177526e77429f
|
||||
this.setDeltaMovement(flag ? 0.0 : deltaMovement.x, deltaMovement.y, flag1 ? 0.0 : deltaMovement.z);
|
||||
}
|
||||
|
||||
@@ -1336,7 +1364,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||
this.finalMovementsThisTick.clear();
|
||||
this.finalMovementsThisTick.addAll(this.movementThisTick);
|
||||
this.movementThisTick.clear();
|
||||
- if (this.finalMovementsThisTick.isEmpty()) {
|
||||
+ if (this.finalMovementsThisTick.isEmpty() || this.mechanicsTarget.before(me.samsuik.sakura.mechanics.MechanicVersion.v1_21_5)) {
|
||||
this.finalMovementsThisTick.add(new Entity.Movement(this.oldPosition(), this.position()));
|
||||
} else if (this.finalMovementsThisTick.getLast().to.distanceToSqr(this.position()) > 9.9999994E-11F) {
|
||||
this.finalMovementsThisTick.add(new Entity.Movement(this.finalMovementsThisTick.getLast().to, this.position()));
|
||||
@@ -1588,7 +1616,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||
}
|
||||
|
||||
@@ -275,6 +293,23 @@ index 128f62186d18186b7ba3a0c40a2723b8a933e8fb..c9f5accf384bae21b0a177526e77429f
|
||||
(pos, index) -> {
|
||||
if (!this.isAlive()) {
|
||||
return false;
|
||||
@@ -1897,7 +1950,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||
boolean flag2 = entityInsideCollisionShape == Shapes.block()
|
||||
|| this.collidedWithShapeMovingFrom(from, to, entityInsideCollisionShape.move(new Vec3(pos)).toAabbs());
|
||||
boolean flag3 = this.collidedWithFluid(blockState.getFluidState(), pos, from, to);
|
||||
- if ((flag2 || flag3) && visited.add(pos.asLong())) {
|
||||
+ if (me.samsuik.sakura.mechanics.EntityBehaviour.canCheckInsideBlock(pos, flag2 || flag3, visited, mechanicsTarget)) { // Sakura - configure server mechanics
|
||||
if (flag2) {
|
||||
try {
|
||||
boolean flag4 = flag || aabb.intersects(pos);
|
||||
@@ -1953,6 +2006,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||
}
|
||||
|
||||
public boolean collidedWithShapeMovingFrom(Vec3 from, Vec3 to, List<AABB> boxes) {
|
||||
+ // Sakura - configure server mechanics; this was changed in 1.21.4
|
||||
AABB aabb = this.makeBoundingBox(from);
|
||||
Vec3 vec3 = to.subtract(from);
|
||||
return aabb.collidedAlongVector(vec3, boxes);
|
||||
diff --git a/net/minecraft/world/entity/item/FallingBlockEntity.java b/net/minecraft/world/entity/item/FallingBlockEntity.java
|
||||
index 0344ba2a6d063a4ee5d6f9a8985ae8ca8c5816ce..02dc6c5965354047fc05ad3d3293c7f6277f50cd 100644
|
||||
--- a/net/minecraft/world/entity/item/FallingBlockEntity.java
|
||||
@@ -509,7 +544,7 @@ index 05003798585d98406cd1affb89403b9f955bacdc..cb2241e99f4b3bee099ff1eea566beb9
|
||||
// Paper end - Option to prevent TNT from moving in water
|
||||
}
|
||||
diff --git a/net/minecraft/world/level/BlockGetter.java b/net/minecraft/world/level/BlockGetter.java
|
||||
index 41c036324499d4e408030d1e19f78468b6b3d8a6..ba2e7efe147b26bea5d73eac1f4b2fe6ee4bd5c2 100644
|
||||
index 41c036324499d4e408030d1e19f78468b6b3d8a6..3c2f5d40bccaf6582a41079d1c47eb228c72a6ff 100644
|
||||
--- a/net/minecraft/world/level/BlockGetter.java
|
||||
+++ b/net/minecraft/world/level/BlockGetter.java
|
||||
@@ -8,6 +8,8 @@ import java.util.function.Function;
|
||||
@@ -526,26 +561,54 @@ index 41c036324499d4e408030d1e19f78468b6b3d8a6..ba2e7efe147b26bea5d73eac1f4b2fe6
|
||||
|
||||
static boolean forEachBlockIntersectedBetween(Vec3 from, Vec3 to, AABB boundingBox, BlockGetter.BlockStepVisitor visitor) {
|
||||
+ // Sakura start - configure server mechanics
|
||||
+ return forEachBlockIntersectedBetween(from, to, boundingBox, null, visitor);
|
||||
+ return forEachBlockIntersectedBetween(from, to, boundingBox, me.samsuik.sakura.mechanics.MinecraftMechanicsTarget.latest(), visitor);
|
||||
+ }
|
||||
+
|
||||
+ static boolean forEachBlockIntersectedBetween(
|
||||
+ final Vec3 from,
|
||||
+ final Vec3 to,
|
||||
+ final AABB boundingBox,
|
||||
+ final @Nullable me.samsuik.sakura.mechanics.MinecraftMechanicsTarget mechanicsTarget,
|
||||
+ final me.samsuik.sakura.mechanics.MinecraftMechanicsTarget mechanicsTarget,
|
||||
+ final BlockGetter.BlockStepVisitor visitor
|
||||
+ ) {
|
||||
Vec3 vec3 = to.subtract(from);
|
||||
- if (vec3.lengthSqr() < Mth.square(1.0E-5F)) {
|
||||
+ final double margin = mechanicsTarget != null && mechanicsTarget.atLeast(MechanicVersion.v1_21_9)
|
||||
+ final double movedThreshold = mechanicsTarget.atLeast(MechanicVersion.v1_21_9)
|
||||
+ ? 1.0E-5F
|
||||
+ : 0.99999F;
|
||||
+ if (vec3.lengthSqr() < Mth.square(margin) || mechanicsTarget != null && mechanicsTarget.before(me.samsuik.sakura.mechanics.MechanicVersion.v1_21_2)) {
|
||||
+ if (vec3.lengthSqr() < Mth.square(movedThreshold) || mechanicsTarget.before(me.samsuik.sakura.mechanics.MechanicVersion.v1_21_2)) {
|
||||
+ // Sakura end - configure server mechanics
|
||||
for (BlockPos blockPos : BlockPos.betweenClosed(boundingBox)) {
|
||||
if (!visitor.visit(blockPos, 0)) {
|
||||
return false;
|
||||
@@ -224,15 +241,22 @@ public interface BlockGetter extends LevelHeightAccessor {
|
||||
} else {
|
||||
LongSet set = new LongOpenHashSet();
|
||||
|
||||
- for (BlockPos blockPos1 : BlockPos.betweenCornersInDirection(boundingBox.move(vec3.scale(-1.0)), vec3)) {
|
||||
- if (!visitor.visit(blockPos1, 0)) {
|
||||
- return false;
|
||||
- }
|
||||
+ // Sakura start - configure server mechanics
|
||||
+ if (mechanicsTarget.atLeast(me.samsuik.sakura.mechanics.MechanicVersion.v1_21_9)) {
|
||||
+ for (BlockPos blockPos1 : BlockPos.betweenCornersInDirection(boundingBox.move(vec3.scale(-1.0)), vec3)) {
|
||||
+ if (!visitor.visit(blockPos1, 0)) {
|
||||
+ return false;
|
||||
+ }
|
||||
|
||||
- set.add(blockPos1.asLong());
|
||||
+ set.add(blockPos1.asLong());
|
||||
+ }
|
||||
}
|
||||
|
||||
int i = addCollisionsAlongTravel(set, vec3, boundingBox, visitor);
|
||||
+ if (mechanicsTarget.before(me.samsuik.sakura.mechanics.MechanicVersion.v1_21_5)) {
|
||||
+ i = 0;
|
||||
+ }
|
||||
+ // Sakura end - configure server mechanics
|
||||
if (i < 0) {
|
||||
return false;
|
||||
} else {
|
||||
diff --git a/net/minecraft/world/level/ServerExplosion.java b/net/minecraft/world/level/ServerExplosion.java
|
||||
index b13aae809e974b42bc1b17f4f4455999adca6f5f..0a279388e965a8d059189a8dfdbec3ff951af876 100644
|
||||
--- a/net/minecraft/world/level/ServerExplosion.java
|
||||
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Optimise check inside blocks and traverse blocks
|
||||
|
||||
|
||||
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
|
||||
index 679a377f068ce4f37b2a3e6f446cccc51fb29bf9..d2bd693934b27815e388387b9b9a707d75999cad 100644
|
||||
index 5aa283ac6eb9f3690f9df1938ac08da77d29142e..438013200908d3cdb0677b551c3890c7f87b5dc1 100644
|
||||
--- a/net/minecraft/world/entity/Entity.java
|
||||
+++ b/net/minecraft/world/entity/Entity.java
|
||||
@@ -1938,6 +1938,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||
@@ -81,19 +81,19 @@ index 679a377f068ce4f37b2a3e6f446cccc51fb29bf9..d2bd693934b27815e388387b9b9a707d
|
||||
if (flag1) {
|
||||
this.debugBlockIntersection((ServerLevel)this.level(), pos.immutable(), false, false);
|
||||
diff --git a/net/minecraft/world/level/BlockGetter.java b/net/minecraft/world/level/BlockGetter.java
|
||||
index ba2e7efe147b26bea5d73eac1f4b2fe6ee4bd5c2..b9ed6671edc98fe7a4bb30fdd25a6629e852da4f 100644
|
||||
index 3c2f5d40bccaf6582a41079d1c47eb228c72a6ff..01cb853c06a669511f26081f9447756f1f8ad549 100644
|
||||
--- a/net/minecraft/world/level/BlockGetter.java
|
||||
+++ b/net/minecraft/world/level/BlockGetter.java
|
||||
@@ -231,7 +231,7 @@ public interface BlockGetter extends LevelHeightAccessor {
|
||||
: 0.99999F;
|
||||
if (vec3.lengthSqr() < Mth.square(margin) || mechanicsTarget != null && mechanicsTarget.before(me.samsuik.sakura.mechanics.MechanicVersion.v1_21_2)) {
|
||||
if (vec3.lengthSqr() < Mth.square(movedThreshold) || mechanicsTarget.before(me.samsuik.sakura.mechanics.MechanicVersion.v1_21_2)) {
|
||||
// Sakura end - configure server mechanics
|
||||
- for (BlockPos blockPos : BlockPos.betweenClosed(boundingBox)) {
|
||||
+ for (final BlockPos blockPos : me.samsuik.sakura.utils.BlockPosIterator.iterable(boundingBox)) { // Sakura - optimise check inside blocks
|
||||
if (!visitor.visit(blockPos, 0)) {
|
||||
return false;
|
||||
}
|
||||
@@ -239,9 +239,22 @@ public interface BlockGetter extends LevelHeightAccessor {
|
||||
@@ -239,11 +239,24 @@ public interface BlockGetter extends LevelHeightAccessor {
|
||||
|
||||
return true;
|
||||
} else {
|
||||
@@ -112,12 +112,14 @@ index ba2e7efe147b26bea5d73eac1f4b2fe6ee4bd5c2..b9ed6671edc98fe7a4bb30fdd25a6629
|
||||
+ // Sakura end - optimise check inside blocks
|
||||
LongSet set = new LongOpenHashSet();
|
||||
|
||||
- for (BlockPos blockPos1 : BlockPos.betweenCornersInDirection(boundingBox.move(vec3.scale(-1.0)), vec3)) {
|
||||
+ for (final BlockPos blockPos1 : me.samsuik.sakura.utils.BlockPosIterator.iterable(boundingBox.move(vec3.scale(-1.0)))) { // Sakura - optimise check inside blocks
|
||||
if (!visitor.visit(blockPos1, 0)) {
|
||||
return false;
|
||||
}
|
||||
@@ -253,7 +266,7 @@ public interface BlockGetter extends LevelHeightAccessor {
|
||||
// Sakura start - configure server mechanics
|
||||
if (mechanicsTarget.atLeast(me.samsuik.sakura.mechanics.MechanicVersion.v1_21_9)) {
|
||||
- for (BlockPos blockPos1 : BlockPos.betweenCornersInDirection(boundingBox.move(vec3.scale(-1.0)), vec3)) {
|
||||
+ for (BlockPos blockPos1 : me.samsuik.sakura.utils.BlockPosIterator.iterable(boundingBox.move(vec3.scale(-1.0)))) { // Sakura - optimise check inside blocks
|
||||
if (!visitor.visit(blockPos1, 0)) {
|
||||
return false;
|
||||
}
|
||||
@@ -260,7 +273,7 @@ public interface BlockGetter extends LevelHeightAccessor {
|
||||
if (i < 0) {
|
||||
return false;
|
||||
} else {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package me.samsuik.sakura.mechanics;
|
||||
|
||||
import ca.spottedleaf.moonrise.patches.collisions.CollisionUtil;
|
||||
import it.unimi.dsi.fastutil.longs.LongSet;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
@@ -49,6 +51,14 @@ public final class EntityBehaviour {
|
||||
|| mechanicsTarget.before(MechanicVersion.v1_14);
|
||||
}
|
||||
|
||||
public static boolean canCheckInsideBlock(final BlockPos pos, final boolean canCollide, final LongSet visited, final MinecraftMechanicsTarget mechanicsTarget) {
|
||||
final boolean before1_21_9 = mechanicsTarget.before(MechanicVersion.v1_21_9);
|
||||
if (before1_21_9 && !visited.add(pos.asLong())) {
|
||||
return false;
|
||||
}
|
||||
return (mechanicsTarget.before(MechanicVersion.v1_21_2) || canCollide) && (before1_21_9 || visited.add(pos.asLong()));
|
||||
}
|
||||
|
||||
public static boolean prioritiseXFirst(final double x, final double z, final @Nullable MinecraftMechanicsTarget mechanicsTarget) {
|
||||
return mechanicsTarget == null || mechanicsTarget.atLeast(MechanicVersion.v1_14)
|
||||
? Math.abs(x) < Math.abs(z)
|
||||
|
||||
Reference in New Issue
Block a user