Files
Shiroha/shiroha-server/minecraft-patches/features/0009-Entity-portal-teleport-speed-fix.patch
T

68 lines
3.1 KiB
Diff
Raw Normal View History

2026-07-09 00:03:09 +08:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MrHua269 <mrhua269@gmail.com>
Date: Wed, 8 Jul 2026 21:32:08 +0800
Subject: [PATCH] Entity portal-teleport speed fix
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 35ab432bbd59aba80a6eaca1769e6aa82c8a7e46..9933e59dfebf5d731ea73585c2b08f9e4ff42d53 100644
2026-07-09 00:03:09 +08:00
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
2026-07-18 19:48:30 +08:00
@@ -1492,7 +1492,35 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
2026-07-09 00:03:09 +08:00
foliaProfiler.startTimer(timerId);
try {
// Folia end - profiler
2026-07-14 11:32:51 +08:00
+ // Shiroha start - Entity portal-teleport speed fix
2026-07-09 00:03:09 +08:00
if (isActive) { // Paper - EAR 2
2026-07-14 11:32:51 +08:00
+ if (!(entity instanceof Player) && entity.teleportTickType == 2) { // Shiroha - after portal compensate tick
2026-07-09 00:03:09 +08:00
+ entity.tick();
+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(entity)) {
+ // removed from region while ticking
+ return;
+ }
+ if (entity.handlePortal()) {
+ // portalled
+ return;
+ }
+ entity.tick();
+ entity.teleportTickType = 0;
+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(entity)) {
+ return;
+ }
+ if (entity.handlePortal()) {
+ return;
+ }
2026-07-14 11:32:51 +08:00
+ } else if (!(entity instanceof Player) && entity.teleportTickType == 1) { // Shiroha - portal teleport only
2026-07-09 00:03:09 +08:00
+ entity.teleportTickType++;
+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(entity)) {
+ return;
+ }
+ if (entity.handlePortal()) {
+ return;
+ }
+ } else {
entity.tick();
// Folia start - region threading
if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(entity)) {
2026-07-18 19:48:30 +08:00
@@ -1503,6 +1531,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
2026-07-09 00:03:09 +08:00
// portalled
return;
}
+ }
2026-07-14 11:32:51 +08:00
+ // Shiroha end - Entity portal-teleport speed fix
2026-07-09 00:03:09 +08:00
// Folia end - region threading
} else {entity.inactiveTick();} // Paper - EAR 2
profiler.pop();
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 18b9e630442fd31a14e131bb9043be46e10881e3..f2f3e8474b8f251f4d05bba93784c42f3fd173a3 100644
2026-07-09 00:03:09 +08:00
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -387,6 +387,7 @@ public abstract class Entity
public long activatedTick = Integer.MIN_VALUE;
public boolean isTemporarilyActive;
public long activatedImmunityTick = Integer.MIN_VALUE;
2026-07-14 11:32:51 +08:00
+ public int teleportTickType = 0; // Shiroha - Entity portal-teleport speed fix
2026-07-09 00:03:09 +08:00
public void inactiveTick() {
}