82 lines
5.6 KiB
Diff
82 lines
5.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: MrHua269 <mrhua269@gmail.com>
|
|
Date: Wed, 8 Jul 2026 22:35:59 +0800
|
|
Subject: [PATCH] Kaiiju: Vanilla end portal teleportation
|
|
|
|
Co-authored by: Sofiane H. Djerbi <46628754+kugge@users.noreply.github.com>
|
|
As part of: Kaiiju (https://github.com/KaiijuMC/Kaiiju/blob/c2b7aec8f7b418a39a2ec408e6411e6f752379da/patches/server/0024-Vanilla-end-portal-teleportation.patch)
|
|
Licensed under: GPL-3.0 (https://github.com/KaiijuMC/Kaiiju/blob/c2b7aec8f7b418a39a2ec408e6411e6f752379da/LICENSE)
|
|
|
|
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
|
|
index 375d4a504cd3f2f2495315cc7456dd245e9d2547..319997dca2b461b41b02ca2d9b0e3ed9fd05ac88 100644
|
|
--- a/net/minecraft/world/entity/Entity.java
|
|
+++ b/net/minecraft/world/entity/Entity.java
|
|
@@ -4640,14 +4640,18 @@ public abstract class Entity
|
|
targetPos, 16, // load 16 blocks to be safe from block physics
|
|
ca.spottedleaf.concurrentutil.util.Priority.HIGH,
|
|
(chunks) -> {
|
|
- net.minecraft.world.level.levelgen.feature.EndPlatformFeature.createEndPlatform(destination, targetPos.below(), true, null);
|
|
-
|
|
+ //net.minecraft.world.level.levelgen.feature.EndPlatformFeature.createEndPlatform(destination, targetPos.below(), true, null); // Kaiiju - Vanilla end teleportation - moved down
|
|
+ // Kaiiju start - Vanilla end teleportation
|
|
+ Vec3 finalPos;
|
|
+ if (this instanceof Player) finalPos = Vec3.atBottomCenterOf(targetPos.below());
|
|
+ else finalPos = Vec3.atBottomCenterOf(targetPos);
|
|
+ // Kaiiju end
|
|
// the portal obsidian is placed at targetPos.y - 2, so if we want to place the entity
|
|
// on the obsidian, we need to spawn at targetPos.y - 1
|
|
portalInfoCompletable.complete(
|
|
new net.minecraft.world.level.portal.TeleportTransition(
|
|
- destination, Vec3.atBottomCenterOf(targetPos.below()), Vec3.ZERO, Direction.WEST.toYRot(), 0.0f,
|
|
- Relative.union(Relative.DELTA, Set.of(Relative.X_ROT)),
|
|
+ destination, finalPos, this.getDeltaMovement(), Direction.WEST.toYRot(), 0.0f, // Kaiiju - Vanilla end teleportation
|
|
+ /*Relative.union(Relative.DELTA, Set.of(Relative.X_ROT))*/Set.of(), // Kaiiju - Vanilla end teleportation
|
|
TeleportTransition.PLAY_PORTAL_SOUND.then(TeleportTransition.PLACE_PORTAL_TICKET),
|
|
org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.END_PORTAL
|
|
)
|
|
@@ -4662,11 +4666,15 @@ public abstract class Entity
|
|
ca.spottedleaf.concurrentutil.util.Priority.HIGH,
|
|
(chunks) -> {
|
|
BlockPos adjustedSpawn = destination.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, spawnPos);
|
|
-
|
|
+ // Kaiiju start - Vanilla end teleportation
|
|
+ Vec3 finalPos;
|
|
+ if (this instanceof Player) finalPos = Vec3.atBottomCenterOf(adjustedSpawn.below());
|
|
+ else finalPos = Vec3.atBottomCenterOf(adjustedSpawn);
|
|
+ // Kaiiju end
|
|
// done
|
|
portalInfoCompletable.complete(
|
|
new net.minecraft.world.level.portal.TeleportTransition(
|
|
- destination, Vec3.atBottomCenterOf(adjustedSpawn), Vec3.ZERO, 0.0f, 0.0f,
|
|
+ destination, finalPos, this.getDeltaMovement(), 0.0f, 0.0f, // Kaiiju - Vanilla end teleportation
|
|
Relative.union(Relative.DELTA, Relative.ROTATION),
|
|
TeleportTransition.PLAY_PORTAL_SOUND.then(TeleportTransition.PLACE_PORTAL_TICKET),
|
|
org.bukkit.event.player.PlayerTeleportEvent.TeleportCause.END_PORTAL
|
|
@@ -4845,6 +4853,10 @@ public abstract class Entity
|
|
return false;
|
|
}
|
|
|
|
+ // Kaiiju start - sync end platform spawning & entity teleportation
|
|
+ final java.util.function.Consumer<Entity> tpComplete = type == PortalType.END && destination.getTypeKey() == net.minecraft.world.level.dimension.LevelStem.END ?
|
|
+ e -> {net.minecraft.world.level.levelgen.feature.EndPlatformFeature.createEndPlatform(destination, ServerLevel.END_SPAWN_POINT.below(), true, null); if (teleportComplete != null) {teleportComplete.accept(e);}} : teleportComplete;
|
|
+ // Kaiiju end
|
|
Vec3 initialPosition = this.position();
|
|
ChunkPos initialPositionChunk = new ChunkPos(
|
|
ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(initialPosition),
|
|
@@ -4908,9 +4920,14 @@ public abstract class Entity
|
|
info.postTeleportTransition().onTransition(teleported);
|
|
}
|
|
|
|
- if (teleportComplete != null) {
|
|
+ // Kaiiju start - vanilla end teleportation
|
|
+ /*if (teleportComplete != null) {
|
|
teleportComplete.accept(teleported);
|
|
+ }*/
|
|
+ if (tpComplete != null){
|
|
+ tpComplete.accept(teleported);
|
|
}
|
|
+ // Kaiiju end
|
|
}
|
|
);
|
|
});
|