33import com .mojang .authlib .GameProfile ;
44import com .mojang .brigadier .context .CommandContext ;
55import com .mojang .brigadier .exceptions .CommandSyntaxException ;
6- import com .mojang .serialization . Dynamic ;
6+ import com .mojang .logging . LogUtils ;
77import eu .pb4 .sgui .api .elements .GuiElementBuilder ;
88import eu .pb4 .sgui .api .gui .SimpleGui ;
99import me .lucko .fabric .api .permissions .v0 .Permissions ;
1010import net .minecraft .command .argument .GameProfileArgumentType ;
1111import net .minecraft .inventory .EnderChestInventory ;
1212import net .minecraft .item .Items ;
13- import net .minecraft .nbt .NbtCompound ;
14- import net .minecraft .nbt .NbtOps ;
1513import net .minecraft .network .packet .c2s .common .SyncedClientOptions ;
14+ import net .minecraft .registry .RegistryKey ;
15+ import net .minecraft .registry .RegistryKeys ;
1616import net .minecraft .screen .ScreenHandlerType ;
1717import net .minecraft .screen .slot .Slot ;
1818import net .minecraft .server .MinecraftServer ;
1919import net .minecraft .server .command .ServerCommandSource ;
2020import net .minecraft .server .network .ServerPlayerEntity ;
2121import net .minecraft .server .world .ServerWorld ;
22+ import net .minecraft .storage .ReadView ;
2223import net .minecraft .text .Text ;
23- import net .minecraft .world .dimension .DimensionType ;
24+ import net .minecraft .util .ErrorReporter ;
25+ import net .minecraft .util .Identifier ;
2426import us .potatoboy .invview .gui .SavingPlayerDataGui ;
2527import us .potatoboy .invview .gui .UnmodifiableSlot ;
2628import us .potatoboy .invview .mixin .EntityAccessor ;
@@ -48,7 +50,8 @@ public static int inv(CommandContext<ServerCommandSource> context) throws Comman
4850 gui .setTitle (requestedPlayer .getName ());
4951 addBackground (gui );
5052 for (int i = 0 ; i < requestedPlayer .getInventory ().size (); i ++) {
51- gui .setSlotRedirect (i , canModify ? new Slot (requestedPlayer .getInventory (), i , 0 , 0 ) : new UnmodifiableSlot (requestedPlayer .getInventory (), i ));
53+ gui .setSlotRedirect (i , canModify ? new Slot (requestedPlayer .getInventory (), i , 0 , 0 )
54+ : new UnmodifiableSlot (requestedPlayer .getInventory (), i ));
5255 }
5356
5457 gui .open ();
@@ -69,19 +72,20 @@ public static int eChest(CommandContext<ServerCommandSource> context) throws Com
6972 if (isProtected ) {
7073 context .getSource ().sendError (Text .literal (msgProtected ));
7174 } else {
72- ScreenHandlerType <?> screenHandlerType = switch (requestedEchest .size ()) {
73- case 9 -> ScreenHandlerType .GENERIC_9X1 ;
74- case 18 -> ScreenHandlerType .GENERIC_9X2 ;
75- case 36 -> ScreenHandlerType .GENERIC_9X4 ;
76- case 45 -> ScreenHandlerType .GENERIC_9X5 ;
77- case 54 -> ScreenHandlerType .GENERIC_9X6 ;
78- default -> ScreenHandlerType .GENERIC_9X3 ;
79- };
75+ ScreenHandlerType <?> screenHandlerType = switch (requestedEchest .size ()) {
76+ case 9 -> ScreenHandlerType .GENERIC_9X1 ;
77+ case 18 -> ScreenHandlerType .GENERIC_9X2 ;
78+ case 36 -> ScreenHandlerType .GENERIC_9X4 ;
79+ case 45 -> ScreenHandlerType .GENERIC_9X5 ;
80+ case 54 -> ScreenHandlerType .GENERIC_9X6 ;
81+ default -> ScreenHandlerType .GENERIC_9X3 ;
82+ };
8083 SimpleGui gui = new SavingPlayerDataGui (screenHandlerType , player , requestedPlayer );
8184 gui .setTitle (requestedPlayer .getName ());
8285 addBackground (gui );
8386 for (int i = 0 ; i < requestedEchest .size (); i ++) {
84- gui .setSlotRedirect (i , canModify ? new Slot (requestedEchest , i , 0 , 0 ) : new UnmodifiableSlot (requestedEchest , i ));
87+ gui .setSlotRedirect (i ,
88+ canModify ? new Slot (requestedEchest , i , 0 , 0 ) : new UnmodifiableSlot (requestedEchest , i ));
8589 }
8690
8791 gui .open ();
@@ -161,15 +165,21 @@ private static ServerPlayerEntity getRequestedPlayer(CommandContext<ServerComman
161165 GameProfile requestedProfile = GameProfileArgumentType .getProfileArgument (context , "target" ).iterator ().next ();
162166 ServerPlayerEntity requestedPlayer = minecraftServer .getPlayerManager ().getPlayer (requestedProfile .getName ());
163167
168+ // If player is not currently online
164169 if (requestedPlayer == null ) {
165- requestedPlayer = minecraftServer .getPlayerManager ().createPlayer (requestedProfile , SyncedClientOptions .createDefault ());
166- Optional <NbtCompound > compoundOpt = minecraftServer .getPlayerManager ().loadPlayerData (requestedPlayer );
167- if (compoundOpt .isPresent ()) {
168- NbtCompound compound = compoundOpt .get ();
169- if (compound .contains ("Dimension" )) {
170+ requestedPlayer = new ServerPlayerEntity (minecraftServer , minecraftServer .getOverworld (), requestedProfile ,
171+ SyncedClientOptions .createDefault ());
172+ Optional <ReadView > readViewOpt = minecraftServer .getPlayerManager ()
173+ .loadPlayerData (requestedPlayer , new ErrorReporter .Logging (LogUtils .getLogger ()));
174+
175+ // Avoids player's dimension being reset to the overworld
176+ if (readViewOpt .isPresent ()) {
177+ ReadView readView = readViewOpt .get ();
178+ Optional <String > dimension = readView .getOptionalString ("Dimension" );
179+
180+ if (dimension .isPresent ()) {
170181 ServerWorld world = minecraftServer .getWorld (
171- DimensionType .worldFromDimensionNbt (new Dynamic <>(NbtOps .INSTANCE , compound .get ("Dimension" )))
172- .result ().get ());
182+ RegistryKey .of (RegistryKeys .WORLD , Identifier .tryParse (dimension .get ())));
173183
174184 if (world != null ) {
175185 ((EntityAccessor ) requestedPlayer ).callSetWorld (world );
0 commit comments