Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: VeVeVeVel <147647046+VeVeVeVel@users.noreply.github.com>
Date: Mon, 26 Jan 2026 22:24:02 +0900
Subject: [PATCH] optimize movement vector normalization


diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 8d092716cdcc48b829a1c0ee2e5416d648143a37..310fcb589f515b223d2b263ee99f734cd876f926 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1262,8 +1262,16 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
double d = vec3.lengthSqr();
if (d > 1.0E-7 || movement.lengthSqr() - d < 1.0E-7) {
if (this.fallDistance != 0.0 && d >= 1.0) {
- double min = Math.min(vec3.length(), 8.0);
- Vec3 vec31 = this.position().add(vec3.normalize().scale(min));
+ // Leaf start - optimize movement vector normalization
+ //double min = Math.min(vec3.length(), 8.0);
+ //Vec3 vec31 = this.position().add(vec3.normalize().scale(min));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The concept looks great. However It's better to directly replace the original code instead of commenting them, the patch already helps keep the original code part.

And I think we can inline vec3's normalize() and scale(8.0) call below, to avoid unnecessary new Vec3 instance creation and useless calls.
Make sure also open a pull request to upload a benchmark to SunBox, since it's the math-related micro optimization.

+ Vec3 vec31;
+ if (d > 64.0) {
+ vec31 = this.position().add(vec3.normalize().scale(8.0));
+ } else {
+ vec31 = this.position().add(vec3);
+ }
+ // Leaf end - optimize movement vector normalization
BlockHitResult blockHitResult = this.level()
.clip(new ClipContext(this.position(), vec31, ClipContext.Block.FALLDAMAGE_RESETTING, ClipContext.Fluid.WATER, this));
if (blockHitResult.getType() != HitResult.Type.MISS) {