1010import com .robotgryphon .compactmachines .data .player .CompactMachinePlayerData ;
1111import com .robotgryphon .compactmachines .data .persistent .CompactMachineData ;
1212import com .robotgryphon .compactmachines .data .persistent .CompactRoomData ;
13+ import com .robotgryphon .compactmachines .network .CMPacketTargets ;
1314import com .robotgryphon .compactmachines .network .MachinePlayersChangedPacket ;
1415import com .robotgryphon .compactmachines .network .NetworkHandler ;
1516import com .robotgryphon .compactmachines .reference .EnumMachineSize ;
2728import net .minecraft .util .text .TranslationTextComponent ;
2829import net .minecraft .world .IWorld ;
2930import net .minecraft .world .World ;
31+ import net .minecraft .world .chunk .Chunk ;
3032import net .minecraft .world .server .ServerWorld ;
3133import net .minecraftforge .fml .network .PacketDistributor ;
3234
@@ -106,7 +108,7 @@ public static void teleportPlayerIntoMachine(ServerPlayerEntity serverPlayer, Bl
106108 rooms .createNew ()
107109 .owner (serverPlayer .getUUID ())
108110 .size (size )
109- .center ( newCenter )
111+ .chunk ( machineChunk )
110112 .register ();
111113 } catch (OperationNotSupportedException e ) {
112114 CompactMachines .LOGGER .warn (e );
@@ -143,6 +145,7 @@ public static void teleportPlayerIntoMachine(ServerPlayerEntity serverPlayer, Bl
143145 // TODO - Move machine generation to new method
144146 }
145147
148+ // TODO - Overhaul this to handle nested machines
146149 public static void teleportPlayerOutOfMachine (ServerWorld world , ServerPlayerEntity serverPlayer ) {
147150
148151 MinecraftServer serv = world .getServer ();
@@ -162,50 +165,20 @@ public static void teleportPlayerOutOfMachine(ServerWorld world, ServerPlayerEnt
162165
163166 ChunkPos currentMachine = new ChunkPos (serverPlayer .blockPosition ());
164167
168+ MachineConnections connections = MachineConnections .get (serv );
169+ if (connections == null )
170+ return ;
171+
165172 DimensionalPosition spawnPoint = externalSpawn .get ();
166173
167- Optional <ServerWorld > outsideWorld = spawnPoint .getWorld (world . getServer () );
174+ Optional <ServerWorld > outsideWorld = spawnPoint .getWorld (serv );
168175 outsideWorld .ifPresent (w -> {
169176 Vector3d worldPos = spawnPoint .getPosition ();
170- serverPlayer .teleportTo (w , worldPos .x (), worldPos .y (), worldPos .z (), serverPlayer .yRot , serverPlayer .xRot );
171-
172- // CompactMachinePlayerUtil.removePlayerFromMachine(serverPlayer, MACHINE_POS);
173- // TODO - Networking for player leaving machine
174- // machine.ifPresent(m -> {
175- // CompactMachinePlayerUtil.removePlayerFromMachine(serverPlayer,
176- // machineInfo.getOutsidePosition(serverPlayer.getServer()).getBlockPosition(),
177- // m.getId());
178- // });
179- });
180-
181- // TODO
182- // Optional<CompactMachinePlayerData> machinePlayers = serverData.getPlayerData(machineInfo.getId());
183- // if (!machinePlayers.isPresent()) {
184- // // No player data for machine, wut
185- // CompactMachines.LOGGER.warn("Warning: Machine player data not set but machine registered, and player is inside. Machine ID: {}", machineInfo.getId());
186- // serverPlayer.displayClientMessage(new TranslationTextComponent("ah_crap"), true);
187- // return;
188- // }
189- //
190- // Optional<DimensionalPosition> lastPos = machinePlayers.get().getExternalSpawn(serverPlayer);
191- // if (!lastPos.isPresent()) {
192- // // PANIC
193- //
194- // return;
195- // } else {
196- // DimensionalPosition p = lastPos.get();
197- // Vector3d bp = p.getPosition();
198- // Optional<ServerWorld> outsideWorld = p.getWorld(world.getServer());
199- // outsideWorld.ifPresent(w -> {
200- // machine.ifPresent(m -> {
201- // serverPlayer.teleportTo(w, bp.x(), bp.y(), bp.z(), serverPlayer.yRot, serverPlayer.xRot);
202- // CompactMachinePlayerUtil.removePlayerFromMachine(serverPlayer,
203- // machineInfo.getOutsidePosition(serverPlayer.getServer()).getBlockPosition(),
204- // m.getId());
205- // });
206- // });
207- // }
177+ Vector3d entryRot = spawnPoint .getRotation ();
178+ serverPlayer .teleportTo (w , worldPos .x (), worldPos .y (), worldPos .z (), (float ) entryRot .y , (float ) entryRot .x );
208179
180+ removePlayerFromMachine (serverPlayer , currentMachine );
181+ });
209182 }
210183
211184 public static void addPlayerToMachine (ServerPlayerEntity serverPlayer , BlockPos machinePos ) {
@@ -221,7 +194,10 @@ public static void addPlayerToMachine(ServerPlayerEntity serverPlayer, BlockPos
221194 if (tile == null )
222195 return ;
223196
197+
224198 tile .getInternalChunkPos ().ifPresent (mChunk -> {
199+ final Chunk chunk = serv .getLevel (Registration .COMPACT_DIMENSION )
200+ .getChunk (mChunk .x , mChunk .z );
225201
226202 playerData .addPlayer (serverPlayer , mChunk );
227203 playerData .setDirty ();
@@ -232,38 +208,28 @@ public static void addPlayerToMachine(ServerPlayerEntity serverPlayer, BlockPos
232208 .enteredFrom (tile .machineId )
233209 .build ();
234210
235- NetworkHandler .MAIN_CHANNEL .send (
236- PacketDistributor .TRACKING_CHUNK .with (() -> serverPlayer .getLevel ().getChunkAt (machinePos )),
237- p );
211+ NetworkHandler .MAIN_CHANNEL .send (CMPacketTargets .TRACKING_ROOM .with (() -> chunk ), p );
238212 });
239213 }
240214
241- public static void removePlayerFromMachine (ServerPlayerEntity serverPlayer , BlockPos machinePos ) {
215+ public static void removePlayerFromMachine (ServerPlayerEntity serverPlayer , ChunkPos roomChunk ) {
242216 MinecraftServer serv = serverPlayer .getServer ();
243217
244218 CompactMachinePlayerData playerData = CompactMachinePlayerData .get (serv );
245219 if (playerData == null )
246220 return ;
247221
248222 playerData .removePlayer (serverPlayer );
223+ playerData .setDirty ();
249224
250- CompactMachineTile tile = (CompactMachineTile ) serverPlayer .getLevel ().getBlockEntity (machinePos );
251- if (tile == null )
252- return ;
253-
254- tile .getInternalChunkPos ().ifPresent (mChunk -> {
225+ final Chunk chunk = serv .getLevel (Registration .COMPACT_DIMENSION )
226+ .getChunk (roomChunk .x , roomChunk .z );
255227
256- playerData .removePlayer (serverPlayer );
257- playerData .setDirty ();
228+ MachinePlayersChangedPacket p = MachinePlayersChangedPacket .Builder .create (serv )
229+ .forMachine (roomChunk )
230+ .forPlayer (serverPlayer )
231+ .build ();
258232
259- MachinePlayersChangedPacket p = MachinePlayersChangedPacket .Builder .create (serv )
260- .forMachine (mChunk )
261- .forPlayer (serverPlayer )
262- .build ();
263-
264- NetworkHandler .MAIN_CHANNEL .send (
265- PacketDistributor .TRACKING_CHUNK .with (() -> serverPlayer .getLevel ().getChunkAt (machinePos )),
266- p );
267- });
233+ NetworkHandler .MAIN_CHANNEL .send (CMPacketTargets .TRACKING_ROOM .with (() -> chunk ), p );
268234 }
269235}
0 commit comments