44import dev .compactmods .machines .CompactMachines ;
55import dev .compactmods .machines .advancement .AdvancementTriggers ;
66import dev .compactmods .machines .api .core .Messages ;
7+ import dev .compactmods .machines .api .room .IRoomHistory ;
8+ import dev .compactmods .machines .api .room .history .IRoomHistoryItem ;
79import dev .compactmods .machines .core .Capabilities ;
810import dev .compactmods .machines .core .MissingDimensionException ;
911import dev .compactmods .machines .core .Registration ;
1012import dev .compactmods .machines .i18n .TranslationUtil ;
1113import dev .compactmods .machines .location .PreciseDimensionalPosition ;
14+ import dev .compactmods .machines .location .SimpleTeleporter ;
1215import dev .compactmods .machines .machine .CompactMachineBlockEntity ;
1316import dev .compactmods .machines .room .Rooms ;
14- import dev .compactmods .machines .api .room .IRoomHistory ;
15- import dev .compactmods .machines .api .room .history .IRoomHistoryItem ;
1617import dev .compactmods .machines .room .exceptions .NonexistentRoomException ;
1718import dev .compactmods .machines .room .history .PlayerRoomHistoryItem ;
1819import net .minecraft .core .BlockPos ;
2324import net .minecraft .world .level .ChunkPos ;
2425import net .minecraft .world .level .Level ;
2526import net .minecraft .world .level .LevelAccessor ;
26- import net .minecraft .world .level .chunk .LevelChunk ;
2727import net .minecraft .world .phys .Vec3 ;
2828import net .minecraftforge .common .util .LazyOptional ;
29+
2930import javax .annotation .Nonnull ;
3031import java .util .Optional ;
3132import java .util .UUID ;
@@ -48,7 +49,7 @@ public static void teleportPlayerIntoMachine(Level machineLevel, Player player,
4849 throw new MissingDimensionException ("Compact dimension not found; player attempted to enter machine." );
4950 }
5051
51- if (machineLevel .getBlockEntity (machinePos ) instanceof CompactMachineBlockEntity tile ) {
52+ if (machineLevel .getBlockEntity (machinePos ) instanceof CompactMachineBlockEntity tile ) {
5253 final var targetRoom = tile .getConnectedRoom ();
5354 boolean grantAdvancement = targetRoom .isEmpty ();
5455
@@ -62,11 +63,12 @@ public static void teleportPlayerIntoMachine(Level machineLevel, Player player,
6263 }
6364
6465 try {
66+ final var entry = PreciseDimensionalPosition .fromPlayer (player );
67+
6568 teleportPlayerIntoRoom (serv , player , room , grantAdvancement );
6669
6770 // Mark the player as inside the machine, set external spawn, and yeet
6871 player .getCapability (Capabilities .ROOM_HISTORY ).ifPresent (hist -> {
69- var entry = PreciseDimensionalPosition .fromPlayer (player );
7072 hist .addHistory (new PlayerRoomHistoryItem (entry , tile .getLevelPosition ()));
7173 });
7274 } catch (MissingDimensionException | NonexistentRoomException e ) {
@@ -91,13 +93,7 @@ public static void teleportPlayerIntoRoom(MinecraftServer serv, Player player, C
9193 Vec3 sr = spawn .getRotation ().orElse (new Vec3 (player .xRotO , player .yRotO , 0 ));
9294
9395 if (player instanceof ServerPlayer servPlayer ) {
94- servPlayer .teleportTo (
95- compactDim ,
96- sp .x ,
97- sp .y ,
98- sp .z ,
99- (float ) sr .y ,
100- (float ) sr .x );
96+ servPlayer .changeDimension (compactDim , SimpleTeleporter .to (sp ));
10197
10298 if (grantAdvancement )
10399 AdvancementTriggers .getTriggerForMachineClaim (roomSize ).trigger (servPlayer );
@@ -117,8 +113,6 @@ public static void teleportPlayerOutOfMachine(ServerLevel world, @Nonnull Server
117113 }
118114
119115 history .ifPresent (hist -> {
120- ChunkPos currentRoomChunk = new ChunkPos (serverPlayer .blockPosition ());
121-
122116 if (hist .hasHistory ()) {
123117 final IRoomHistoryItem prevArea = hist .pop ();
124118
@@ -130,18 +124,13 @@ public static void teleportPlayerOutOfMachine(ServerLevel world, @Nonnull Server
130124 worldPos = spawnPoint .getExactPosition ();
131125 entryRot = spawnPoint .getRotation ().orElse (Vec3 .ZERO );
132126
133- serverPlayer .teleportTo (level , worldPos . x (), worldPos . y (), worldPos . z (), ( float ) entryRot . y , ( float ) entryRot . x );
127+ serverPlayer .changeDimension (level , SimpleTeleporter . to ( worldPos ) );
134128 } else {
135129 howDidYouGetThere (serverPlayer );
136130
137131 hist .clear ();
138132 teleportPlayerToRespawnOrOverworld (serv , serverPlayer );
139133 }
140-
141- final LevelChunk chunk = serv .getLevel (Registration .COMPACT_DIMENSION )
142- .getChunk (currentRoomChunk .x , currentRoomChunk .z );
143-
144- // TODO - Send changed players packet to other clients
145134 });
146135 }
147136
@@ -161,6 +150,6 @@ public static void teleportPlayerToRespawnOrOverworld(MinecraftServer serv, @Non
161150 if (player .getRespawnPosition () != null )
162151 worldPos = LocationUtil .blockPosToVector (player .getRespawnPosition ());
163152
164- player .teleportTo (level , worldPos . x (), worldPos . y (), worldPos . z (), 0 , player . getRespawnAngle ( ));
153+ player .changeDimension (level , SimpleTeleporter . to ( worldPos ));
165154 }
166155}
0 commit comments