From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Helvetica Volubi Date: Sun, 27 Apr 2025 14:26:01 +0800 Subject: [PATCH] Portal Behavior Modifiers diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java index 2ea6160492cb23e96271dfbfd3bd35fe03109d6a..36bddc5f5a05044b995e0b87f2c9105a6acfe8fd 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -1149,7 +1149,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess //Luminol end try { // Paper end - detailed watchdog information - if (this.noPhysics) { + if (this.noPhysics || this.portalProcess != null) { // Luminol - Entity portal-teleport speed fix this.setPos(this.getX() + movement.x, this.getY() + movement.y, this.getZ() + movement.z); } else { this.wasOnFire = this.isOnFire(); @@ -3829,20 +3829,27 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess EntityTreeNode curr; while ((curr = queue.pollFirst()) != null) { - EntityTreeNode[] passengers = curr.passengers; + restore(curr); // Luminol - EndGateway Portal Passengers Fix + } + } + + // Luminol Start - EndGateway Portal Passengers Fix + private EntityTreeNode[] restore(EntityTreeNode entity) { + EntityTreeNode[] passengers = entity.passengers; if (passengers == null) { - continue; + return null; } List newPassengers = new java.util.ArrayList<>(); for (EntityTreeNode passenger : passengers) { + passenger.passengers = restore(passenger); newPassengers.add(passenger.root); - passenger.root.vehicle = curr.root; + passenger.root.vehicle = entity.root; } - - curr.root.passengers = ImmutableList.copyOf(newPassengers); - } + entity.root.passengers = ImmutableList.copyOf(newPassengers); + return passengers; } + // Luminol End - EndGateway Portal Passengers Fix public void addTracker() { for (final EntityTreeNode node : this.getFullTree()) { @@ -4561,6 +4568,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } + // Luminol start - Add afterPortalLogic + protected void afterPortalLogic() { + + } + // Luminol end - Add afterPortalLogic + protected boolean portalToAsync(ServerLevel destination, BlockPos portalPos, boolean takePassengers, PortalType type, java.util.function.Consumer teleportComplete) { ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this, "Cannot portal entity async"); @@ -4644,6 +4657,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess info.postTeleportTransition().onTransition(teleported); } + teleported.afterPortalLogic(); // Luminol - Add afterPortalLogic + // Kaiiju start - vanilla end teleportation /*if (teleportComplete != null) { teleportComplete.accept(teleported); diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java index 88570bb4aa02896545805d7721c45cf9599befea..ad68417c0b17f1fabd5153ff86d5c34618be28bc 100644 --- a/net/minecraft/world/entity/item/PrimedTnt.java +++ b/net/minecraft/world/entity/item/PrimedTnt.java @@ -251,4 +251,10 @@ public class PrimedTnt extends Entity implements TraceableEntity { return !this.level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid(); } // Paper end - Option to prevent TNT from moving in water + + // Luminol start - Add afterPortalLogic + protected void afterPortalLogic() { + this.setUsedPortal(true); + } + // Luminol end - Add afterPortalLogic }