2424 */
2525package org .spongepowered .common .mixin .core .server .commands ;
2626
27- import net .minecraft .commands .CommandSourceStack ;
2827import net .minecraft .core .BlockPos ;
2928import net .minecraft .server .commands .TeleportCommand ;
3029import net .minecraft .server .level .ServerLevel ;
3130import net .minecraft .server .level .ServerPlayer ;
3231import net .minecraft .server .level .TicketType ;
3332import net .minecraft .util .Mth ;
3433import net .minecraft .world .entity .Entity ;
35- import net .minecraft .world .entity .LivingEntity ;
36- import net .minecraft .world .entity .PathfinderMob ;
3734import net .minecraft .world .entity .RelativeMovement ;
3835import net .minecraft .world .level .ChunkPos ;
39- import org .checkerframework .checker .nullness .qual .Nullable ;
4036import org .spongepowered .api .Sponge ;
4137import org .spongepowered .api .event .CauseStackManager ;
4238import org .spongepowered .api .event .EventContextKeys ;
4743import org .spongepowered .api .event .entity .RotateEntityEvent ;
4844import org .spongepowered .api .world .server .ServerWorld ;
4945import org .spongepowered .asm .mixin .Mixin ;
50- import org .spongepowered .asm .mixin .Overwrite ;
46+ import org .spongepowered .asm .mixin .injection .At ;
47+ import org .spongepowered .asm .mixin .injection .Redirect ;
5148import org .spongepowered .common .SpongeCommon ;
5249import org .spongepowered .common .event .ShouldFire ;
5350import org .spongepowered .common .event .tracking .PhaseTracker ;
6057@ Mixin (TeleportCommand .class )
6158public abstract class TeleportCommandMixin {
6259
63- /**
64- * @author Zidane
65- * @reason Have the teleport command respect our events
66- */
67- @ Overwrite
68- private static void performTeleport (CommandSourceStack source , Entity entityIn , ServerLevel worldIn , double x , double y , double z ,
69- Set <RelativeMovement > relativeList , float yaw , float pitch , TeleportCommand .@ Nullable LookAt facing ) {
70-
60+ @ Redirect (method = "performTeleport" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/world/entity/Entity;teleportTo(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FF)Z" ))
61+ private static boolean impl$createCauseFrameForPerformTeleport (
62+ final Entity entityIn , final ServerLevel worldIn , final double x , final double y ,
63+ final double z , final Set <RelativeMovement > relativeList , final float yaw , final float pitch
64+ ) {
7165 double actualX = x ;
7266 double actualY = y ;
7367 double actualZ = z ;
7468 double actualYaw = yaw ;
7569 double actualPitch = pitch ;
7670
77- if (!(entityIn instanceof ServerPlayer )) {
78- actualYaw = Mth .wrapDegrees (yaw );
79- actualPitch = Mth .wrapDegrees (pitch );
80- actualPitch = Mth .clamp (actualPitch , -90.0F , 90.0F );
81- }
82-
8371 if (worldIn == entityIn .level ()) {
8472 try (final CauseStackManager .StackFrame frame = PhaseTracker .getInstance ().pushCauseFrame ()) {
8573 frame .addContext (EventContextKeys .MOVEMENT_TYPE , MovementTypes .COMMAND );
@@ -92,7 +80,7 @@ private static void performTeleport(CommandSourceStack source, Entity entityIn,
9280 new Vector3d (x , y , z ), new Vector3d (x , y , z ));
9381
9482 if (SpongeCommon .post (posEvent )) {
95- return ;
83+ return false ;
9684 }
9785
9886 actualX = posEvent .destinationPosition ().x ();
@@ -145,7 +133,7 @@ private static void performTeleport(CommandSourceStack source, Entity entityIn,
145133 final ChangeEntityWorldEvent .Pre preEvent = PlatformHooks .INSTANCE .getEventHooks ().callChangeEntityWorldEventPre (entityIn ,
146134 worldIn );
147135 if (SpongeCommon .post (preEvent )) {
148- return ;
136+ return false ;
149137 }
150138
151139 final ChangeEntityWorldEvent .Reposition posEvent =
@@ -156,13 +144,13 @@ private static void performTeleport(CommandSourceStack source, Entity entityIn,
156144 new Vector3d (x , y , z ), preEvent .destinationWorld ());
157145
158146 if (SpongeCommon .post (posEvent )) {
159- return ;
147+ return false ;
160148 }
161149
162150 entityIn .unRide ();
163151 final Entity result = entityIn .getType ().create (worldIn );
164152 if (result == null ) {
165- return ;
153+ return false ;
166154 }
167155
168156 if (ShouldFire .ROTATE_ENTITY_EVENT ) {
@@ -198,17 +186,6 @@ private static void performTeleport(CommandSourceStack source, Entity entityIn,
198186 }
199187 }
200188
201- if (facing != null ) {
202- facing .perform (source , entityIn );
203- }
204-
205- if (!(entityIn instanceof LivingEntity ) || !((LivingEntity )entityIn ).isFallFlying ()) {
206- entityIn .setDeltaMovement (entityIn .getDeltaMovement ().multiply (1.0D , 0.0D , 1.0D ));
207- entityIn .setOnGround (true );
208- }
209-
210- if (entityIn instanceof PathfinderMob ) {
211- ((PathfinderMob )entityIn ).getNavigation ().stop ();
212- }
189+ return true ;
213190 }
214191}
0 commit comments