3
3
import com .mojang .authlib .GameProfile ;
4
4
import com .mojang .brigadier .context .CommandContext ;
5
5
import com .mojang .brigadier .exceptions .CommandSyntaxException ;
6
- import com .mojang .serialization . Dynamic ;
6
+ import com .mojang .logging . LogUtils ;
7
7
import eu .pb4 .sgui .api .elements .GuiElementBuilder ;
8
8
import eu .pb4 .sgui .api .gui .SimpleGui ;
9
9
import me .lucko .fabric .api .permissions .v0 .Permissions ;
10
10
import net .minecraft .command .argument .GameProfileArgumentType ;
11
11
import net .minecraft .inventory .EnderChestInventory ;
12
12
import net .minecraft .item .Items ;
13
- import net .minecraft .nbt .NbtCompound ;
14
- import net .minecraft .nbt .NbtOps ;
15
13
import net .minecraft .network .packet .c2s .common .SyncedClientOptions ;
14
+ import net .minecraft .registry .RegistryKey ;
15
+ import net .minecraft .registry .RegistryKeys ;
16
16
import net .minecraft .screen .ScreenHandlerType ;
17
17
import net .minecraft .screen .slot .Slot ;
18
18
import net .minecraft .server .MinecraftServer ;
19
19
import net .minecraft .server .command .ServerCommandSource ;
20
20
import net .minecraft .server .network .ServerPlayerEntity ;
21
21
import net .minecraft .server .world .ServerWorld ;
22
+ import net .minecraft .storage .ReadView ;
22
23
import net .minecraft .text .Text ;
23
- import net .minecraft .world .dimension .DimensionType ;
24
+ import net .minecraft .util .ErrorReporter ;
25
+ import net .minecraft .util .Identifier ;
24
26
import us .potatoboy .invview .gui .SavingPlayerDataGui ;
25
27
import us .potatoboy .invview .gui .UnmodifiableSlot ;
26
28
import us .potatoboy .invview .mixin .EntityAccessor ;
@@ -48,7 +50,8 @@ public static int inv(CommandContext<ServerCommandSource> context) throws Comman
48
50
gui .setTitle (requestedPlayer .getName ());
49
51
addBackground (gui );
50
52
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 ));
52
55
}
53
56
54
57
gui .open ();
@@ -69,19 +72,20 @@ public static int eChest(CommandContext<ServerCommandSource> context) throws Com
69
72
if (isProtected ) {
70
73
context .getSource ().sendError (Text .literal (msgProtected ));
71
74
} 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
+ };
80
83
SimpleGui gui = new SavingPlayerDataGui (screenHandlerType , player , requestedPlayer );
81
84
gui .setTitle (requestedPlayer .getName ());
82
85
addBackground (gui );
83
86
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 ));
85
89
}
86
90
87
91
gui .open ();
@@ -161,15 +165,21 @@ private static ServerPlayerEntity getRequestedPlayer(CommandContext<ServerComman
161
165
GameProfile requestedProfile = GameProfileArgumentType .getProfileArgument (context , "target" ).iterator ().next ();
162
166
ServerPlayerEntity requestedPlayer = minecraftServer .getPlayerManager ().getPlayer (requestedProfile .getName ());
163
167
168
+ // If player is not currently online
164
169
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 ()) {
170
181
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 ())));
173
183
174
184
if (world != null ) {
175
185
((EntityAccessor ) requestedPlayer ).callSetWorld (world );
0 commit comments