1+ /*
2+ * ! This command implementation by Mojang Studios!
3+ *
4+ * Decompiled with idea source code was converted to kotlin code.
5+ * But with additions such as permissions checking and etc.
6+ *
7+ * 1. This can be bad code.
8+ * 2. This file can be not formatter pretty.
9+ */
110package com .mairwunnx .projectessentials .core .impl .vanilla .commands ;
211
312import com .mairwunnx .projectessentials .core .api .v1 .commands .CommandAPI ;
413import com .mairwunnx .projectessentials .core .api .v1 .commands .back .BackLocationAPI ;
5- import com .mairwunnx .projectessentials .core .api .v1 .configuration .ConfigurationAPI ;
6- import com .mairwunnx .projectessentials .core .impl .configurations .GeneralConfiguration ;
714import com .mojang .brigadier .CommandDispatcher ;
815import com .mojang .brigadier .exceptions .CommandSyntaxException ;
916import com .mojang .brigadier .tree .LiteralCommandNode ;
10- import net .minecraft .command .CommandException ;
1117import net .minecraft .command .CommandSource ;
1218import net .minecraft .command .Commands ;
1319import net .minecraft .command .arguments .*;
1420import net .minecraft .entity .Entity ;
15- import net .minecraft .entity .LivingEntity ;
1621import net .minecraft .entity .player .ServerPlayerEntity ;
1722import net .minecraft .network .play .server .SPlayerPositionLookPacket ;
18- import net .minecraft .util .math .* ;
19- import net .minecraft .util .text . Style ;
23+ import net .minecraft .util .math .Vec2f ;
24+ import net .minecraft .util .math . Vec3d ;
2025import net .minecraft .util .text .TranslationTextComponent ;
2126import net .minecraft .world .server .ServerWorld ;
22- import net . minecraft . world . server . TicketType ;
27+ import org . jetbrains . annotations . NotNull ;
2328
2429import javax .annotation .Nullable ;
2530import java .util .Collection ;
2631import java .util .Collections ;
2732import java .util .EnumSet ;
2833import java .util .Set ;
2934
30- import static com .mairwunnx .projectessentials .core .api .v1 .InternalConstantsKt .SETTING_LOC_ENABLED ;
31- import static com .mairwunnx .projectessentials .core .api .v1 .extensions .ExtensionsKt .hoverEventFrom ;
32- import static com .mairwunnx .projectessentials .core .api .v1 .extensions .ExtensionsKt .textComponentFrom ;
33- import static com .mairwunnx .projectessentials .core .api .v1 .permissions .PermissionAPIKt .hasPermission ;
34-
35- @ SuppressWarnings ("CodeBlock2Expr" )
36- public class TeleportCommand {
37- private static GeneralConfiguration generalConfiguration = null ;
38-
39- private static GeneralConfiguration getGeneralConfiguration () {
40- if (generalConfiguration == null ) {
41- generalConfiguration = ConfigurationAPI .INSTANCE .getConfigurationByName ("general" );
42- }
43- return generalConfiguration ;
35+ public class TeleportCommand extends VanillaCommandBase {
36+ public TeleportCommand () {
37+ super ("teleport" );
4438 }
4539
46- public static void register (CommandDispatcher <CommandSource > dispatcher ) {
47- CommandAPI .INSTANCE .removeCommand ("teleport" );
40+ @ Override
41+ public void register (@ NotNull CommandDispatcher <CommandSource > dispatcher ) {
42+ super .register (dispatcher );
4843 CommandAPI .INSTANCE .removeCommand ("tp" );
49-
50- LiteralCommandNode <CommandSource > literalcommandnode = dispatcher .register (Commands .literal ("teleport" ).then (Commands .argument ("targets" , EntityArgument .entities ()).then (Commands .argument ("location" , Vec3Argument .vec3 ()).executes ((p_198807_0_ ) -> {
44+ LiteralCommandNode <CommandSource > literalcommandnode = dispatcher .register (Commands .literal ("teleport" ).requires ((p_198816_0_ ) -> {
45+ return isAllowed (p_198816_0_ , "teleport" , 2 );
46+ }).then (Commands .argument ("targets" , EntityArgument .entities ()).then (Commands .argument ("location" , Vec3Argument .vec3 ()).executes ((p_198807_0_ ) -> {
5147 return teleportToPos (p_198807_0_ .getSource (), EntityArgument .getEntities (p_198807_0_ , "targets" ), p_198807_0_ .getSource ().getWorld (), Vec3Argument .getLocation (p_198807_0_ , "location" ), null , null );
5248 }).then (Commands .argument ("rotation" , RotationArgument .rotation ()).executes ((p_198811_0_ ) -> {
5349 return teleportToPos (p_198811_0_ .getSource (), EntityArgument .getEntities (p_198811_0_ , "targets" ), p_198811_0_ .getSource ().getWorld (), Vec3Argument .getLocation (p_198811_0_ , "location" ), RotationArgument .getRotation (p_198811_0_ , "rotation" ), null );
@@ -67,51 +63,13 @@ public static void register(CommandDispatcher<CommandSource> dispatcher) {
6763 dispatcher .register (Commands .literal ("tp" ).redirect (literalcommandnode ));
6864 }
6965
70- private static void checkPermissions (CommandSource source ) {
71- try {
72- if (!hasPermission (
73- source .asPlayer (), "native.teleport" , 2
74- )) {
75- throw new CommandException (
76- textComponentFrom (
77- source .asPlayer (),
78- getGeneralConfiguration ().getBoolOrDefault (SETTING_LOC_ENABLED , false ),
79- "native.command.restricted"
80- ).setStyle (
81- new Style ().setHoverEvent (
82- hoverEventFrom (
83- source .asPlayer (),
84- getGeneralConfiguration ().getBoolOrDefault (SETTING_LOC_ENABLED , false ),
85- "native.command.restricted_hover" ,
86- "native.teleport" , "2"
87- )
88- )
89- )
90- );
91- }
92- } catch (CommandSyntaxException e ) {
93- // ignored, because command executed by server.
94- }
95- }
96-
9766 private static int teleportToEntity (CommandSource source , Collection <? extends Entity > targets , Entity destination ) {
98- checkPermissions (source );
99-
100- for (Entity entity : targets ) {
101- teleport (source , entity , (ServerWorld ) destination .world , destination .posX , destination .posY , destination .posZ , EnumSet .noneOf (SPlayerPositionLookPacket .Flags .class ), destination .rotationYaw , destination .rotationPitch , null );
102- }
103-
104- if (targets .size () == 1 ) {
105- source .sendFeedback (new TranslationTextComponent ("commands.teleport.success.entity.single" , targets .iterator ().next ().getDisplayName (), destination .getDisplayName ()), true );
106- } else {
107- source .sendFeedback (new TranslationTextComponent ("commands.teleport.success.entity.multiple" , targets .size (), destination .getDisplayName ()), true );
108- }
109-
110- return targets .size ();
67+ commitBack (source );
68+ return net .minecraft .command .impl .TeleportCommand .teleportToEntity (source , targets , destination );
11169 }
11270
11371 private static int teleportToPos (CommandSource source , Collection <? extends Entity > targets , ServerWorld worldIn , ILocationArgument position , @ Nullable ILocationArgument rotationIn , @ Nullable Facing facing ) {
114- checkPermissions (source );
72+ commitBack (source );
11573 Vec3d vec3d = position .getPosition (source );
11674 Vec2f vec2f = rotationIn == null ? null : rotationIn .getRotation (source );
11775 Set <SPlayerPositionLookPacket .Flags > set = EnumSet .noneOf (SPlayerPositionLookPacket .Flags .class );
@@ -142,9 +100,9 @@ private static int teleportToPos(CommandSource source, Collection<? extends Enti
142100
143101 for (Entity entity : targets ) {
144102 if (rotationIn == null ) {
145- teleport (source , entity , worldIn , vec3d .x , vec3d .y , vec3d .z , set , entity .rotationYaw , entity .rotationPitch , facing );
103+ net . minecraft . command . impl . TeleportCommand . teleport (source , entity , worldIn , vec3d .x , vec3d .y , vec3d .z , set , entity .rotationYaw , entity .rotationPitch , facing );
146104 } else {
147- teleport (source , entity , worldIn , vec3d .x , vec3d .y , vec3d .z , set , vec2f .y , vec2f .x , facing );
105+ net . minecraft . command . impl . TeleportCommand . teleport (source , entity , worldIn , vec3d .x , vec3d .y , vec3d .z , set , vec2f .y , vec2f .x , facing );
148106 }
149107 }
150108
@@ -157,62 +115,6 @@ private static int teleportToPos(CommandSource source, Collection<? extends Enti
157115 return targets .size ();
158116 }
159117
160- private static void teleport (CommandSource source , Entity entityIn , ServerWorld worldIn , double x , double y , double z , Set <SPlayerPositionLookPacket .Flags > relativeList , float yaw , float pitch , @ Nullable Facing facing ) {
161- try {
162- BackLocationAPI .INSTANCE .commit (source .asPlayer ());
163- } catch (CommandSyntaxException e ) {
164- // suppressed. Sorry.
165- }
166-
167- if (entityIn instanceof ServerPlayerEntity ) {
168- ChunkPos chunkpos = new ChunkPos (new BlockPos (x , y , z ));
169- worldIn .getChunkProvider ().func_217228_a (TicketType .POST_TELEPORT , chunkpos , 1 , entityIn .getEntityId ());
170- entityIn .stopRiding ();
171- if (((ServerPlayerEntity ) entityIn ).isSleeping ()) {
172- ((ServerPlayerEntity ) entityIn ).wakeUpPlayer (true , true , false );
173- }
174-
175- if (worldIn == entityIn .world ) {
176- ((ServerPlayerEntity ) entityIn ).connection .setPlayerLocation (x , y , z , yaw , pitch , relativeList );
177- } else {
178- ((ServerPlayerEntity ) entityIn ).teleport (worldIn , x , y , z , yaw , pitch );
179- }
180-
181- entityIn .setRotationYawHead (yaw );
182- } else {
183- float f1 = MathHelper .wrapDegrees (yaw );
184- float f = MathHelper .wrapDegrees (pitch );
185- f = MathHelper .clamp (f , -90.0F , 90.0F );
186- if (worldIn == entityIn .world ) {
187- entityIn .setLocationAndAngles (x , y , z , f1 , f );
188- entityIn .setRotationYawHead (f1 );
189- } else {
190- entityIn .detach ();
191- entityIn .dimension = worldIn .dimension .getType ();
192- Entity entity = entityIn ;
193- entityIn = entityIn .getType ().create (worldIn );
194- if (entityIn == null ) {
195- return ;
196- }
197-
198- entityIn .copyDataFromOld (entity );
199- entityIn .setLocationAndAngles (x , y , z , f1 , f );
200- entityIn .setRotationYawHead (f1 );
201- worldIn .func_217460_e (entityIn );
202- }
203- }
204-
205- if (facing != null ) {
206- facing .updateLook (source , entityIn );
207- }
208-
209- if (!(entityIn instanceof LivingEntity ) || !((LivingEntity ) entityIn ).isElytraFlying ()) {
210- entityIn .setMotion (entityIn .getMotion ().mul (1.0D , 0.0D , 1.0D ));
211- entityIn .onGround = true ;
212- }
213-
214- }
215-
216118 static class Facing {
217119 private final Vec3d position ;
218120 private final Entity entity ;
@@ -240,7 +142,14 @@ public void updateLook(CommandSource source, Entity entityIn) {
240142 } else {
241143 entityIn .lookAt (source .getEntityAnchorType (), this .position );
242144 }
145+ }
146+ }
243147
148+ private static void commitBack (CommandSource source ) {
149+ try {
150+ BackLocationAPI .INSTANCE .commit (source .asPlayer ());
151+ } catch (CommandSyntaxException e ) {
152+ // Suppressed. Sorry.
244153 }
245154 }
246155}
0 commit comments