aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/ProfileUtils.java
blob: e6efc26cd943d428e9d6cf47c7b755a4d768c197 (plain)
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
package me.xmrvizzy.skyblocker.skyblock.api;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import marcono1234.gson.recordadapter.RecordTypeAdapterFactory;
import me.xmrvizzy.skyblocker.skyblock.api.records.PlayerProfiles;
import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemFixerUpper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.*;
import net.minecraft.text.Text;

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;

public class ProfileUtils {
    public static PlayerProfiles getProfiles(String name){
        try {
            URL url = new URL("https://sky.shiiyu.moe/api/v2/profile/" + name);
            InputStreamReader reader = new InputStreamReader(url.openStream());
            Gson gson = new GsonBuilder()
                    .registerTypeAdapterFactory(RecordTypeAdapterFactory.builder().allowMissingComponentValues().create())
                    .serializeNulls()
                    .create();
            return gson.fromJson(reader, PlayerProfiles.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static List<ItemStack> itemsFromApiInventory(PlayerProfiles.PlayerProfile.Items.Item[] items){
        List<ItemStack> inventory = new ArrayList<>();
        for (PlayerProfiles.PlayerProfile.Items.Item item : items){
            try{
                if (item.tag() != null){
                    JsonObject obj = new Gson().fromJson(Files.readString(Path.of("./config/skyblocker/items-repo/items/" + item.tag().extraAttributes().id() + ".json")), JsonObject.class);

                    NbtCompound root = new NbtCompound();
                    root.put("Count", NbtByte.of(item.count()));
                    root.put("id", NbtString.of(ItemFixerUpper.convertItemId(obj.get("itemid").getAsString(), obj.get("damage").getAsInt())));
                    NbtCompound tag = new NbtCompound();
                    root.put("tag", tag);

                    if (item.tag().ench() != null){
                        NbtList enchantments = new NbtList();
                        enchantments.add(new NbtCompound());
                        tag.put("Enchantments", enchantments);
                    }

                    NbtCompound extraAttributes = new NbtCompound();
                    tag.put("ExtraAttributes", extraAttributes);
                    extraAttributes.put("id", NbtString.of(item.tag().extraAttributes().id()));
                    if (item.tag().extraAttributes().enchantments() != null){
                        NbtCompound enchantments = new NbtCompound();
                        extraAttributes.put("enchantments", enchantments);
                        for (String enchant : item.tag().extraAttributes().enchantments().keySet()){
                            enchantments.put(enchant, NbtInt.of(item.tag().extraAttributes().enchantments().get(enchant)));
                        }
                    }

                    NbtCompound display = new NbtCompound();
                    tag.put("display", display);
                    display.put("Name", NbtString.of(Text.Serializer.toJson(Text.of(item.tag().display().name()))));
                    if (item.tag().display().lore() != null){
                        NbtList lore = new NbtList();
                        display.put("Lore", lore);
                        for (int i = 0; i < item.tag().display().lore().length; i++) {
                            if (i < item.tag().display().lore().length - 1)
                                lore.add(i, NbtString.of(Text.Serializer.toJson(Text.of(Arrays.stream(item.tag().display().lore()).toArray()[i].toString()))));
                        }
                    }
                    if (item.tag().display().color() != null){
                        display.put("color", NbtInt.of(item.tag().display().color()));
                    }

                    if (item.tag().skullOwner() != null){
                        NbtCompound skullOwner = new NbtCompound();
                        tag.put("SkullOwner", skullOwner);
                        UUID uuid = UUID.fromString(item.tag().skullOwner().id());
                        skullOwner.put("Id", NbtHelper.fromUuid(uuid));
                        skullOwner.put("Name", NbtString.of(item.tag().extraAttributes().id()));

                        NbtCompound properties = new NbtCompound();
                        skullOwner.put("Properties", properties);
                        NbtList textures = new NbtList();
                        properties.put("textures", textures);
                        NbtCompound texture = new NbtCompound();
                        textures.add(texture);
                        texture.put("Value", NbtString.of(item.tag().skullOwner().properties().textures()[0].get("Value")));
                    }
                    inventory.add(ItemStack.fromNbt(root));
                } else {
                    inventory.add(Items.AIR.getDefaultStack());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return inventory;
    }
}