@@ -139,6 +139,11 @@ private Object getTypeKey(Class<?> WorldClass, Object world) throws InvocationTa
139
139
return getTypeKey .invoke (world );
140
140
}
141
141
142
+ private Object getDimensionManager1162Plus (Class <?> WorldClass , Object world ) throws InvocationTargetException , IllegalAccessException {
143
+ Method getDimensionManager = Objects .requireNonNull (ReflectionUtil .getMethod (WorldClass , "getDimensionManager" ));
144
+ return getDimensionManager .invoke (world );
145
+ }
146
+
142
147
// 1.16+
143
148
private Object getDimensionKey (Class <?> WorldClass , Object world ) throws InvocationTargetException , IllegalAccessException {
144
149
Method getDimensionKey = Objects .requireNonNull (ReflectionUtil .getMethod (WorldClass , "getDimensionKey" ));
@@ -195,7 +200,7 @@ private Object getEnumDifficulty(Class<?> EnumDifficultyClass, Player player) th
195
200
196
201
protected boolean sendFreezePacket (Player player ) {
197
202
198
- int major = ReflectionUtil .getMajor (), minor = ReflectionUtil .getMinor ();
203
+ int major = ReflectionUtil .getMajor (), minor = ReflectionUtil .getMinor (), r = ReflectionUtil . getR () ;
199
204
200
205
if (FREEZE_UNSUPPORTED .contains (major + "." + minor )) {
201
206
MessageManager .getInstance ().featureUnsupported (SkyChanger .wrapPlayer (player ), FREEZE_UNSUPPORTED .toString ());
@@ -216,32 +221,61 @@ protected boolean sendFreezePacket(Player player) {
216
221
// Works sometimes so let's just say it works.
217
222
218
223
Class <?> EnumGamemodeClass = ReflectionUtil .getNMSClass ("EnumGamemode" );
219
-
220
224
Object worldServer = getWorldServer (player );
221
225
Object gameMode = getEnumGamemode (EnumGamemodeClass , player );
222
226
223
227
Class <?> WorldClass = ReflectionUtil .getNMSClass ("World" );
224
228
Class <?> ResourceKeyClass = ReflectionUtil .getNMSClass ("ResourceKey" );
225
229
226
- Constructor <?> packetConstructor = ClientboundRespawnPacket .getConstructor (
227
- ResourceKeyClass , // DimensionType
228
- ResourceKeyClass , // DimensionKey
229
- long .class , // Seed
230
- EnumGamemodeClass , // gameType
231
- EnumGamemodeClass , // previousGameType
232
- boolean .class , // isDebug
233
- boolean .class , // isFlat
234
- boolean .class ); // keepAllPlayerData
235
- packet = packetConstructor .newInstance (
236
- getTypeKey (WorldClass , worldServer ),
237
- getDimensionKey (WorldClass , worldServer ),
238
- player .getWorld ().getSeed (),
239
- gameMode ,
240
- gameMode ,
241
- false ,
242
- false ,
243
- true );
230
+ if (r >= 2 ) {
231
+
232
+ // 1.16.2+
233
+
234
+ Class <?> DimensionManagerClass = ReflectionUtil .getNMSClass ("DimensionManager" );
235
+
236
+ Constructor <?> packetConstructor = ClientboundRespawnPacket .getConstructor (
237
+ DimensionManagerClass , // DimensionManager
238
+ ResourceKeyClass , // DimensionKey
239
+ long .class , // Seed
240
+ EnumGamemodeClass , // gameType
241
+ EnumGamemodeClass , // previousGameType
242
+ boolean .class , // isDebug
243
+ boolean .class , // isFlat
244
+ boolean .class ); // keepAllPlayerData
245
+ packet = packetConstructor .newInstance (
246
+ getDimensionManager1162Plus (WorldClass , worldServer ),
247
+ getDimensionKey (WorldClass , worldServer ),
248
+ player .getWorld ().getSeed (),
249
+ gameMode ,
250
+ gameMode ,
251
+ false ,
252
+ false ,
253
+ true );
244
254
255
+ } else {
256
+
257
+ // 1.16.1
258
+
259
+ Constructor <?> packetConstructor = ClientboundRespawnPacket .getConstructor (
260
+ ResourceKeyClass , // DimensionType
261
+ ResourceKeyClass , // DimensionKey
262
+ long .class , // Seed
263
+ EnumGamemodeClass , // gameType
264
+ EnumGamemodeClass , // previousGameType
265
+ boolean .class , // isDebug
266
+ boolean .class , // isFlat
267
+ boolean .class ); // keepAllPlayerData
268
+ packet = packetConstructor .newInstance (
269
+ getTypeKey (WorldClass , worldServer ),
270
+ getDimensionKey (WorldClass , worldServer ),
271
+ player .getWorld ().getSeed (),
272
+ gameMode ,
273
+ gameMode ,
274
+ false ,
275
+ false ,
276
+ true );
277
+
278
+ }
245
279
246
280
} else if (minor >= 13 ) {
247
281
0 commit comments