File size: 24,116 Bytes
d46f4a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
package net.minecraft.util;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Map.Entry;
import javax.annotation.Nullable;
import net.minecraft.core.Holder;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.Contract;

public class GsonHelper {
    private static final Gson GSON = new GsonBuilder().create();

    public static boolean isStringValue(JsonObject p_13814_, String p_13815_) {
        return !isValidPrimitive(p_13814_, p_13815_) ? false : p_13814_.getAsJsonPrimitive(p_13815_).isString();
    }

    public static boolean isStringValue(JsonElement p_13804_) {
        return !p_13804_.isJsonPrimitive() ? false : p_13804_.getAsJsonPrimitive().isString();
    }

    public static boolean isNumberValue(JsonObject p_144763_, String p_144764_) {
        return !isValidPrimitive(p_144763_, p_144764_) ? false : p_144763_.getAsJsonPrimitive(p_144764_).isNumber();
    }

    public static boolean isNumberValue(JsonElement p_13873_) {
        return !p_13873_.isJsonPrimitive() ? false : p_13873_.getAsJsonPrimitive().isNumber();
    }

    public static boolean isBooleanValue(JsonObject p_13881_, String p_13882_) {
        return !isValidPrimitive(p_13881_, p_13882_) ? false : p_13881_.getAsJsonPrimitive(p_13882_).isBoolean();
    }

    public static boolean isBooleanValue(JsonElement p_144768_) {
        return !p_144768_.isJsonPrimitive() ? false : p_144768_.getAsJsonPrimitive().isBoolean();
    }

    public static boolean isArrayNode(JsonObject p_13886_, String p_13887_) {
        return !isValidNode(p_13886_, p_13887_) ? false : p_13886_.get(p_13887_).isJsonArray();
    }

    public static boolean isObjectNode(JsonObject p_144773_, String p_144774_) {
        return !isValidNode(p_144773_, p_144774_) ? false : p_144773_.get(p_144774_).isJsonObject();
    }

    public static boolean isValidPrimitive(JsonObject p_13895_, String p_13896_) {
        return !isValidNode(p_13895_, p_13896_) ? false : p_13895_.get(p_13896_).isJsonPrimitive();
    }

    public static boolean isValidNode(@Nullable JsonObject p_13901_, String p_13902_) {
        return p_13901_ == null ? false : p_13901_.get(p_13902_) != null;
    }

    public static JsonElement getNonNull(JsonObject p_289782_, String p_289789_) {
        JsonElement jsonelement = p_289782_.get(p_289789_);
        if (jsonelement != null && !jsonelement.isJsonNull()) {
            return jsonelement;
        } else {
            throw new JsonSyntaxException("Missing field " + p_289789_);
        }
    }

    public static String convertToString(JsonElement p_13806_, String p_13807_) {
        if (p_13806_.isJsonPrimitive()) {
            return p_13806_.getAsString();
        } else {
            throw new JsonSyntaxException("Expected " + p_13807_ + " to be a string, was " + getType(p_13806_));
        }
    }

    public static String getAsString(JsonObject p_13907_, String p_13908_) {
        if (p_13907_.has(p_13908_)) {
            return convertToString(p_13907_.get(p_13908_), p_13908_);
        } else {
            throw new JsonSyntaxException("Missing " + p_13908_ + ", expected to find a string");
        }
    }

    @Nullable
    @Contract("_,_,!null->!null;_,_,null->_")
    public static String getAsString(JsonObject p_13852_, String p_13853_, @Nullable String p_13854_) {
        return p_13852_.has(p_13853_) ? convertToString(p_13852_.get(p_13853_), p_13853_) : p_13854_;
    }

    public static Holder<Item> convertToItem(JsonElement p_13875_, String p_13876_) {
        if (p_13875_.isJsonPrimitive()) {
            String s = p_13875_.getAsString();
            return BuiltInRegistries.ITEM
                .get(ResourceLocation.parse(s))
                .orElseThrow(() -> new JsonSyntaxException("Expected " + p_13876_ + " to be an item, was unknown string '" + s + "'"));
        } else {
            throw new JsonSyntaxException("Expected " + p_13876_ + " to be an item, was " + getType(p_13875_));
        }
    }

    public static Holder<Item> getAsItem(JsonObject p_144747_, String p_144748_) {
        if (p_144747_.has(p_144748_)) {
            return convertToItem(p_144747_.get(p_144748_), p_144748_);
        } else {
            throw new JsonSyntaxException("Missing " + p_144748_ + ", expected to find an item");
        }
    }

    @Nullable
    @Contract("_,_,!null->!null;_,_,null->_")
    public static Holder<Item> getAsItem(JsonObject p_13910_, String p_13911_, @Nullable Holder<Item> p_300930_) {
        return p_13910_.has(p_13911_) ? convertToItem(p_13910_.get(p_13911_), p_13911_) : p_300930_;
    }

    public static boolean convertToBoolean(JsonElement p_13878_, String p_13879_) {
        if (p_13878_.isJsonPrimitive()) {
            return p_13878_.getAsBoolean();
        } else {
            throw new JsonSyntaxException("Expected " + p_13879_ + " to be a Boolean, was " + getType(p_13878_));
        }
    }

    public static boolean getAsBoolean(JsonObject p_13913_, String p_13914_) {
        if (p_13913_.has(p_13914_)) {
            return convertToBoolean(p_13913_.get(p_13914_), p_13914_);
        } else {
            throw new JsonSyntaxException("Missing " + p_13914_ + ", expected to find a Boolean");
        }
    }

    public static boolean getAsBoolean(JsonObject p_13856_, String p_13857_, boolean p_13858_) {
        return p_13856_.has(p_13857_) ? convertToBoolean(p_13856_.get(p_13857_), p_13857_) : p_13858_;
    }

    public static double convertToDouble(JsonElement p_144770_, String p_144771_) {
        if (p_144770_.isJsonPrimitive() && p_144770_.getAsJsonPrimitive().isNumber()) {
            return p_144770_.getAsDouble();
        } else {
            throw new JsonSyntaxException("Expected " + p_144771_ + " to be a Double, was " + getType(p_144770_));
        }
    }

    public static double getAsDouble(JsonObject p_144785_, String p_144786_) {
        if (p_144785_.has(p_144786_)) {
            return convertToDouble(p_144785_.get(p_144786_), p_144786_);
        } else {
            throw new JsonSyntaxException("Missing " + p_144786_ + ", expected to find a Double");
        }
    }

    public static double getAsDouble(JsonObject p_144743_, String p_144744_, double p_144745_) {
        return p_144743_.has(p_144744_) ? convertToDouble(p_144743_.get(p_144744_), p_144744_) : p_144745_;
    }

    public static float convertToFloat(JsonElement p_13889_, String p_13890_) {
        if (p_13889_.isJsonPrimitive() && p_13889_.getAsJsonPrimitive().isNumber()) {
            return p_13889_.getAsFloat();
        } else {
            throw new JsonSyntaxException("Expected " + p_13890_ + " to be a Float, was " + getType(p_13889_));
        }
    }

    public static float getAsFloat(JsonObject p_13916_, String p_13917_) {
        if (p_13916_.has(p_13917_)) {
            return convertToFloat(p_13916_.get(p_13917_), p_13917_);
        } else {
            throw new JsonSyntaxException("Missing " + p_13917_ + ", expected to find a Float");
        }
    }

    public static float getAsFloat(JsonObject p_13821_, String p_13822_, float p_13823_) {
        return p_13821_.has(p_13822_) ? convertToFloat(p_13821_.get(p_13822_), p_13822_) : p_13823_;
    }

    public static long convertToLong(JsonElement p_13892_, String p_13893_) {
        if (p_13892_.isJsonPrimitive() && p_13892_.getAsJsonPrimitive().isNumber()) {
            return p_13892_.getAsLong();
        } else {
            throw new JsonSyntaxException("Expected " + p_13893_ + " to be a Long, was " + getType(p_13892_));
        }
    }

    public static long getAsLong(JsonObject p_13922_, String p_13923_) {
        if (p_13922_.has(p_13923_)) {
            return convertToLong(p_13922_.get(p_13923_), p_13923_);
        } else {
            throw new JsonSyntaxException("Missing " + p_13923_ + ", expected to find a Long");
        }
    }

    public static long getAsLong(JsonObject p_13829_, String p_13830_, long p_13831_) {
        return p_13829_.has(p_13830_) ? convertToLong(p_13829_.get(p_13830_), p_13830_) : p_13831_;
    }

    public static int convertToInt(JsonElement p_13898_, String p_13899_) {
        if (p_13898_.isJsonPrimitive() && p_13898_.getAsJsonPrimitive().isNumber()) {
            return p_13898_.getAsInt();
        } else {
            throw new JsonSyntaxException("Expected " + p_13899_ + " to be a Int, was " + getType(p_13898_));
        }
    }

    public static int getAsInt(JsonObject p_13928_, String p_13929_) {
        if (p_13928_.has(p_13929_)) {
            return convertToInt(p_13928_.get(p_13929_), p_13929_);
        } else {
            throw new JsonSyntaxException("Missing " + p_13929_ + ", expected to find a Int");
        }
    }

    public static int getAsInt(JsonObject p_13825_, String p_13826_, int p_13827_) {
        return p_13825_.has(p_13826_) ? convertToInt(p_13825_.get(p_13826_), p_13826_) : p_13827_;
    }

    public static byte convertToByte(JsonElement p_13904_, String p_13905_) {
        if (p_13904_.isJsonPrimitive() && p_13904_.getAsJsonPrimitive().isNumber()) {
            return p_13904_.getAsByte();
        } else {
            throw new JsonSyntaxException("Expected " + p_13905_ + " to be a Byte, was " + getType(p_13904_));
        }
    }

    public static byte getAsByte(JsonObject p_144791_, String p_144792_) {
        if (p_144791_.has(p_144792_)) {
            return convertToByte(p_144791_.get(p_144792_), p_144792_);
        } else {
            throw new JsonSyntaxException("Missing " + p_144792_ + ", expected to find a Byte");
        }
    }

    public static byte getAsByte(JsonObject p_13817_, String p_13818_, byte p_13819_) {
        return p_13817_.has(p_13818_) ? convertToByte(p_13817_.get(p_13818_), p_13818_) : p_13819_;
    }

    public static char convertToCharacter(JsonElement p_144776_, String p_144777_) {
        if (p_144776_.isJsonPrimitive() && p_144776_.getAsJsonPrimitive().isNumber()) {
            return p_144776_.getAsCharacter();
        } else {
            throw new JsonSyntaxException("Expected " + p_144777_ + " to be a Character, was " + getType(p_144776_));
        }
    }

    public static char getAsCharacter(JsonObject p_144794_, String p_144795_) {
        if (p_144794_.has(p_144795_)) {
            return convertToCharacter(p_144794_.get(p_144795_), p_144795_);
        } else {
            throw new JsonSyntaxException("Missing " + p_144795_ + ", expected to find a Character");
        }
    }

    public static char getAsCharacter(JsonObject p_144739_, String p_144740_, char p_144741_) {
        return p_144739_.has(p_144740_) ? convertToCharacter(p_144739_.get(p_144740_), p_144740_) : p_144741_;
    }

    public static BigDecimal convertToBigDecimal(JsonElement p_144779_, String p_144780_) {
        if (p_144779_.isJsonPrimitive() && p_144779_.getAsJsonPrimitive().isNumber()) {
            return p_144779_.getAsBigDecimal();
        } else {
            throw new JsonSyntaxException("Expected " + p_144780_ + " to be a BigDecimal, was " + getType(p_144779_));
        }
    }

    public static BigDecimal getAsBigDecimal(JsonObject p_144797_, String p_144798_) {
        if (p_144797_.has(p_144798_)) {
            return convertToBigDecimal(p_144797_.get(p_144798_), p_144798_);
        } else {
            throw new JsonSyntaxException("Missing " + p_144798_ + ", expected to find a BigDecimal");
        }
    }

    public static BigDecimal getAsBigDecimal(JsonObject p_144751_, String p_144752_, BigDecimal p_144753_) {
        return p_144751_.has(p_144752_) ? convertToBigDecimal(p_144751_.get(p_144752_), p_144752_) : p_144753_;
    }

    public static BigInteger convertToBigInteger(JsonElement p_144782_, String p_144783_) {
        if (p_144782_.isJsonPrimitive() && p_144782_.getAsJsonPrimitive().isNumber()) {
            return p_144782_.getAsBigInteger();
        } else {
            throw new JsonSyntaxException("Expected " + p_144783_ + " to be a BigInteger, was " + getType(p_144782_));
        }
    }

    public static BigInteger getAsBigInteger(JsonObject p_144800_, String p_144801_) {
        if (p_144800_.has(p_144801_)) {
            return convertToBigInteger(p_144800_.get(p_144801_), p_144801_);
        } else {
            throw new JsonSyntaxException("Missing " + p_144801_ + ", expected to find a BigInteger");
        }
    }

    public static BigInteger getAsBigInteger(JsonObject p_144755_, String p_144756_, BigInteger p_144757_) {
        return p_144755_.has(p_144756_) ? convertToBigInteger(p_144755_.get(p_144756_), p_144756_) : p_144757_;
    }

    public static short convertToShort(JsonElement p_144788_, String p_144789_) {
        if (p_144788_.isJsonPrimitive() && p_144788_.getAsJsonPrimitive().isNumber()) {
            return p_144788_.getAsShort();
        } else {
            throw new JsonSyntaxException("Expected " + p_144789_ + " to be a Short, was " + getType(p_144788_));
        }
    }

    public static short getAsShort(JsonObject p_144803_, String p_144804_) {
        if (p_144803_.has(p_144804_)) {
            return convertToShort(p_144803_.get(p_144804_), p_144804_);
        } else {
            throw new JsonSyntaxException("Missing " + p_144804_ + ", expected to find a Short");
        }
    }

    public static short getAsShort(JsonObject p_144759_, String p_144760_, short p_144761_) {
        return p_144759_.has(p_144760_) ? convertToShort(p_144759_.get(p_144760_), p_144760_) : p_144761_;
    }

    public static JsonObject convertToJsonObject(JsonElement p_13919_, String p_13920_) {
        if (p_13919_.isJsonObject()) {
            return p_13919_.getAsJsonObject();
        } else {
            throw new JsonSyntaxException("Expected " + p_13920_ + " to be a JsonObject, was " + getType(p_13919_));
        }
    }

    public static JsonObject getAsJsonObject(JsonObject p_13931_, String p_13932_) {
        if (p_13931_.has(p_13932_)) {
            return convertToJsonObject(p_13931_.get(p_13932_), p_13932_);
        } else {
            throw new JsonSyntaxException("Missing " + p_13932_ + ", expected to find a JsonObject");
        }
    }

    @Nullable
    @Contract("_,_,!null->!null;_,_,null->_")
    public static JsonObject getAsJsonObject(JsonObject p_13842_, String p_13843_, @Nullable JsonObject p_13844_) {
        return p_13842_.has(p_13843_) ? convertToJsonObject(p_13842_.get(p_13843_), p_13843_) : p_13844_;
    }

    public static JsonArray convertToJsonArray(JsonElement p_13925_, String p_13926_) {
        if (p_13925_.isJsonArray()) {
            return p_13925_.getAsJsonArray();
        } else {
            throw new JsonSyntaxException("Expected " + p_13926_ + " to be a JsonArray, was " + getType(p_13925_));
        }
    }

    public static JsonArray getAsJsonArray(JsonObject p_13934_, String p_13935_) {
        if (p_13934_.has(p_13935_)) {
            return convertToJsonArray(p_13934_.get(p_13935_), p_13935_);
        } else {
            throw new JsonSyntaxException("Missing " + p_13935_ + ", expected to find a JsonArray");
        }
    }

    @Nullable
    @Contract("_,_,!null->!null;_,_,null->_")
    public static JsonArray getAsJsonArray(JsonObject p_13833_, String p_13834_, @Nullable JsonArray p_13835_) {
        return p_13833_.has(p_13834_) ? convertToJsonArray(p_13833_.get(p_13834_), p_13834_) : p_13835_;
    }

    public static <T> T convertToObject(@Nullable JsonElement p_13809_, String p_13810_, JsonDeserializationContext p_13811_, Class<? extends T> p_13812_) {
        if (p_13809_ != null) {
            return p_13811_.deserialize(p_13809_, p_13812_);
        } else {
            throw new JsonSyntaxException("Missing " + p_13810_);
        }
    }

    public static <T> T getAsObject(JsonObject p_13837_, String p_13838_, JsonDeserializationContext p_13839_, Class<? extends T> p_13840_) {
        if (p_13837_.has(p_13838_)) {
            return convertToObject(p_13837_.get(p_13838_), p_13838_, p_13839_, p_13840_);
        } else {
            throw new JsonSyntaxException("Missing " + p_13838_);
        }
    }

    @Nullable
    @Contract("_,_,!null,_,_->!null;_,_,null,_,_->_")
    public static <T> T getAsObject(JsonObject p_13846_, String p_13847_, @Nullable T p_13848_, JsonDeserializationContext p_13849_, Class<? extends T> p_13850_) {
        return p_13846_.has(p_13847_) ? convertToObject(p_13846_.get(p_13847_), p_13847_, p_13849_, p_13850_) : p_13848_;
    }

    public static String getType(@Nullable JsonElement p_13884_) {
        String s = StringUtils.abbreviateMiddle(String.valueOf(p_13884_), "...", 10);
        if (p_13884_ == null) {
            return "null (missing)";
        } else if (p_13884_.isJsonNull()) {
            return "null (json)";
        } else if (p_13884_.isJsonArray()) {
            return "an array (" + s + ")";
        } else if (p_13884_.isJsonObject()) {
            return "an object (" + s + ")";
        } else {
            if (p_13884_.isJsonPrimitive()) {
                JsonPrimitive jsonprimitive = p_13884_.getAsJsonPrimitive();
                if (jsonprimitive.isNumber()) {
                    return "a number (" + s + ")";
                }

                if (jsonprimitive.isBoolean()) {
                    return "a boolean (" + s + ")";
                }
            }

            return s;
        }
    }

    @Nullable
    public static <T> T fromNullableJson(Gson p_13781_, Reader p_13782_, Class<T> p_13783_, boolean p_13784_) {
        try {
            JsonReader jsonreader = new JsonReader(p_13782_);
            jsonreader.setLenient(p_13784_);
            return p_13781_.getAdapter(p_13783_).read(jsonreader);
        } catch (IOException ioexception) {
            throw new JsonParseException(ioexception);
        }
    }

    public static <T> T fromJson(Gson p_263516_, Reader p_263522_, Class<T> p_263539_, boolean p_263489_) {
        T t = fromNullableJson(p_263516_, p_263522_, p_263539_, p_263489_);
        if (t == null) {
            throw new JsonParseException("JSON data was null or empty");
        } else {
            return t;
        }
    }

    @Nullable
    public static <T> T fromNullableJson(Gson p_13772_, Reader p_13773_, TypeToken<T> p_13774_, boolean p_13775_) {
        try {
            JsonReader jsonreader = new JsonReader(p_13773_);
            jsonreader.setLenient(p_13775_);
            return p_13772_.getAdapter(p_13774_).read(jsonreader);
        } catch (IOException ioexception) {
            throw new JsonParseException(ioexception);
        }
    }

    public static <T> T fromJson(Gson p_263499_, Reader p_263527_, TypeToken<T> p_263525_, boolean p_263507_) {
        T t = fromNullableJson(p_263499_, p_263527_, p_263525_, p_263507_);
        if (t == null) {
            throw new JsonParseException("JSON data was null or empty");
        } else {
            return t;
        }
    }

    @Nullable
    public static <T> T fromNullableJson(Gson p_13790_, String p_13791_, TypeToken<T> p_13792_, boolean p_13793_) {
        return fromNullableJson(p_13790_, new StringReader(p_13791_), p_13792_, p_13793_);
    }

    public static <T> T fromJson(Gson p_263492_, String p_263488_, Class<T> p_263503_, boolean p_263506_) {
        return fromJson(p_263492_, new StringReader(p_263488_), p_263503_, p_263506_);
    }

    @Nullable
    public static <T> T fromNullableJson(Gson p_13799_, String p_13800_, Class<T> p_13801_, boolean p_13802_) {
        return fromNullableJson(p_13799_, new StringReader(p_13800_), p_13801_, p_13802_);
    }

    public static <T> T fromJson(Gson p_13768_, Reader p_13769_, TypeToken<T> p_13770_) {
        return fromJson(p_13768_, p_13769_, p_13770_, false);
    }

    @Nullable
    public static <T> T fromNullableJson(Gson p_13786_, String p_13787_, TypeToken<T> p_13788_) {
        return fromNullableJson(p_13786_, p_13787_, p_13788_, false);
    }

    public static <T> T fromJson(Gson p_13777_, Reader p_13778_, Class<T> p_13779_) {
        return fromJson(p_13777_, p_13778_, p_13779_, false);
    }

    public static <T> T fromJson(Gson p_13795_, String p_13796_, Class<T> p_13797_) {
        return fromJson(p_13795_, p_13796_, p_13797_, false);
    }

    public static JsonObject parse(String p_13870_, boolean p_13871_) {
        return parse(new StringReader(p_13870_), p_13871_);
    }

    public static JsonObject parse(Reader p_13862_, boolean p_13863_) {
        return fromJson(GSON, p_13862_, JsonObject.class, p_13863_);
    }

    public static JsonObject parse(String p_13865_) {
        return parse(p_13865_, false);
    }

    public static JsonObject parse(Reader p_13860_) {
        return parse(p_13860_, false);
    }

    public static JsonArray parseArray(String p_216215_) {
        return parseArray(new StringReader(p_216215_));
    }

    public static JsonArray parseArray(Reader p_144766_) {
        return fromJson(GSON, p_144766_, JsonArray.class, false);
    }

    public static String toStableString(JsonElement p_216217_) {
        StringWriter stringwriter = new StringWriter();
        JsonWriter jsonwriter = new JsonWriter(stringwriter);

        try {
            writeValue(jsonwriter, p_216217_, Comparator.naturalOrder());
        } catch (IOException ioexception) {
            throw new AssertionError(ioexception);
        }

        return stringwriter.toString();
    }

    public static void writeValue(JsonWriter p_216208_, @Nullable JsonElement p_216209_, @Nullable Comparator<String> p_216210_) throws IOException {
        if (p_216209_ == null || p_216209_.isJsonNull()) {
            p_216208_.nullValue();
        } else if (p_216209_.isJsonPrimitive()) {
            JsonPrimitive jsonprimitive = p_216209_.getAsJsonPrimitive();
            if (jsonprimitive.isNumber()) {
                p_216208_.value(jsonprimitive.getAsNumber());
            } else if (jsonprimitive.isBoolean()) {
                p_216208_.value(jsonprimitive.getAsBoolean());
            } else {
                p_216208_.value(jsonprimitive.getAsString());
            }
        } else if (p_216209_.isJsonArray()) {
            p_216208_.beginArray();

            for (JsonElement jsonelement : p_216209_.getAsJsonArray()) {
                writeValue(p_216208_, jsonelement, p_216210_);
            }

            p_216208_.endArray();
        } else {
            if (!p_216209_.isJsonObject()) {
                throw new IllegalArgumentException("Couldn't write " + p_216209_.getClass());
            }

            p_216208_.beginObject();

            for (Entry<String, JsonElement> entry : sortByKeyIfNeeded(p_216209_.getAsJsonObject().entrySet(), p_216210_)) {
                p_216208_.name(entry.getKey());
                writeValue(p_216208_, entry.getValue(), p_216210_);
            }

            p_216208_.endObject();
        }
    }

    private static Collection<Entry<String, JsonElement>> sortByKeyIfNeeded(Collection<Entry<String, JsonElement>> p_216212_, @Nullable Comparator<String> p_216213_) {
        if (p_216213_ == null) {
            return p_216212_;
        } else {
            List<Entry<String, JsonElement>> list = new ArrayList<>(p_216212_);
            list.sort(Entry.comparingByKey(p_216213_));
            return list;
        }
    }
}