diff options
| author | Jacob <admin@kath.lol> | 2025-08-01 12:26:39 +0800 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-08-01 15:34:27 +0200 |
| commit | 77a990348e7eca92c5d1f05272c8c2528fc49740 (patch) | |
| tree | 5fe1c8775d010a0d0b17268d6da097926e83faa0 /src/main/java/de | |
| parent | 8a8620fc640031be4195426afc90387b95e88681 (diff) | |
| download | Skyblocker-77a990348e7eca92c5d1f05272c8c2528fc49740.tar.gz Skyblocker-77a990348e7eca92c5d1f05272c8c2528fc49740.tar.bz2 Skyblocker-77a990348e7eca92c5d1f05272c8c2528fc49740.zip | |
feat: slayer
Diffstat (limited to 'src/main/java/de')
10 files changed, 332 insertions, 12 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/HeadTextures.java b/src/main/java/de/hysky/skyblocker/skyblock/item/HeadTextures.java index bcc6219e..c878bee4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/HeadTextures.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/HeadTextures.java @@ -24,4 +24,11 @@ public interface HeadTextures { Set<String> PEST_HEADS = Set.of(MOSQUITO_PEST, RAT_PEST, LOCUST_PEST, CRICKET_PEST, FLY_PEST, BEETLE_PEST, SLUG_PEST, MOTH_PEST, MITE_PEST, EARTHWORM_PEST, FIELD_MOUSE_PEST); String CARNIVAL_YELLOW_FISH = "ewogICJ0aW1lc3RhbXAiIDogMTcyMDA1MjU4MjAwMSwKICAicHJvZmlsZUlkIiA6ICIzM2Y4ZGExMTU1MzQ0YWQ5OWQ0Y2Q2ZjNhYjFjMjNhYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJCXzFfUl9CIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzM2MGY0Zjk5Yzc4YWRkZGVhYjI3NmViZGY2YWI5YTBmY2ZmYWJkNDlmMGI1NDNlMTk4MWFjN2JkM2Q1NWIxOGEiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ=="; String FAIRY_SOUL = "eyJ0aW1lc3RhbXAiOjE1ODY2NjcxNjgzNzksInByb2ZpbGVJZCI6ImJlY2RkYjI4YTJjODQ5YjRhOWIwOTIyYTU4MDUxNDIwIiwicHJvZmlsZU5hbWUiOiJTdFR2Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yOTllYTEyMGJkODNkMGM4MWEzYzQ2MjdmNWJjZTFiMTJmYjAzYmNiNTc3NzljNjNkY2M3N2UzZjRhZThhNzkzIn19fQ=="; + String AATROX_BATPHONE = "ewogICJ0aW1lc3RhbXAiIDogMTU5NjQ5MTIwODg4NCwKICAicHJvZmlsZUlkIiA6ICJkNjBmMzQ3MzZhMTI0N2EyOWI4MmNjNzE1YjAwNDhkYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJCSl9EYW5pZWwiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTMzNmQ3Y2M5NWNiZjY2ODlmNWU4Yzk1NDI5NGVjOGQxZWZjNDk0YTQwMzEzMjViYjQyN2JjODFkNTZhNDg0ZCIKICAgIH0KICB9Cn0="; + String REVENANT_HORROR = "e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWZjMDE4NDQ3M2ZlODgyZDI4OTVjZTdjYmM4MTk3YmQ0MGZmNzBiZjEwZDM3NDVkZTk3YjZjMmE5YzVmYzc4ZiJ9fX0="; + String TARANTULA_BROODFATHER = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2Q1NDE1NDFkYWFmZjUwODk2Y2QyNThiZGJkZDRjZjgwYzNiYTgxNjczNTcyNjA3OGJmZTM5MzkyN2U1N2YxIn19fQ"; + String SVEN_PACKMASTER = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjlkMWQzMTEzZWM0M2FjMjk2MWRkNTlmMjgxNzVmYjQ3MTg4NzNjNmM0NDhkZmNhODcyMjMxN2Q2NyJ9fX0"; + String VOIDGLOOM_SERAPH = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2E1OWJiMGE3YTMyOTY1YjNkOTBkOGVhZmE4OTlkMTgzNWY0MjQ1MDllYWRkNGU2YjcwOWFkYTUwYjljZiJ9fX0="; + String RIFTSTALKER_BLOODFIEND = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWFhMjllYTk2MTc1N2RjM2M5MGJmYWJmMzAyYzVhYmU5ZDMwOGZiNGE3ZDM4NjRlNTc4OGFkMmNjOTE2MGFhMiJ9fX0="; + String INFERNO_DEMONLORD = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjc4ZWYyZTRjZjJjNDFhMmQxNGJmZGU5Y2FmZjEwMjE5ZjViMWJmNWIzNWE0OWViNTFjNjQ2Nzg4MmNiNWYwIn19fQ"; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/ProfileMember.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/ProfileMember.java index e4140bca..6e313a00 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/ProfileMember.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/ProfileMember.java @@ -12,7 +12,7 @@ public class ProfileMember { * Nota bene: this is for item collections, for boss collections you need to manually add up the boss kill counts. */ public Map<String, Integer> collection = Map.of(); - public Slayer slayer = new Slayer(); + public SlayerData slayer = new SlayerData(); @SerializedName("fairy_soul") public FairySouls fairySouls = new FairySouls(); public ProfileMemberProfile profile = new ProfileMemberProfile(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/Slayer.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/Slayer.java deleted file mode 100644 index 0adb9054..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/Slayer.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.hysky.skyblocker.skyblock.profileviewer.model; - -import com.google.gson.annotations.SerializedName; - -import java.util.Map; - -public class Slayer { - @SerializedName("slayer_bosses") - public Map<String, SlayerBoss> slayerBosses = Map.of(); -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/SlayerBoss.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/SlayerBoss.java index 215b6b0e..08583965 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/SlayerBoss.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/SlayerBoss.java @@ -29,4 +29,21 @@ public class SlayerBoss { default -> 0; }; } + + public int getTotalBossKills() { + int total = 0; + for (int i = 0; i <= 4; i++) { + total += getBossKillsByZeroIndexedTier(i); + } + return total; + } + + public int getTierWithMostKills() { + for (int i = 4; i >= 0; i--) { + if (getBossKillsByZeroIndexedTier(i) > 1) return i; + } + return -1; + } + + } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/SlayerData.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/SlayerData.java new file mode 100644 index 00000000..522f1cfd --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/SlayerData.java @@ -0,0 +1,60 @@ +package de.hysky.skyblocker.skyblock.profileviewer.model; + +import com.google.gson.annotations.SerializedName; +import de.hysky.skyblocker.skyblock.profileviewer.utils.LevelFinder; +import de.hysky.skyblocker.skyblock.tabhud.util.Ico; +import net.minecraft.item.ItemStack; + +import java.util.Map; + +public class SlayerData { + @SerializedName("slayer_bosses") + public Map<String, SlayerBoss> slayerBosses = Map.of(); + + public SlayerBoss getSlayerData(Slayer slayer) { + return slayerBosses.getOrDefault(slayer.getName().toLowerCase(), new SlayerBoss()); + } + + public double getSlayerExperience(Slayer slayer) { + return getSlayerData(slayer).xp; + } + + public LevelFinder.LevelInfo getSkillLevel(Slayer slayer) { +// return LevelFinder.getLevelInfo(slayer.levelFinderOverride, (long) getSlayerExperience(slayer)); + return LevelFinder.getLevelInfo(slayer.name, (long) getSlayerExperience(slayer)); + } + + public enum Slayer { + REVENANT_HORROR("Zombie", Ico.REVENANT_HORROR_SKULL, Ico.FLESH), + TARANTULA_BROODFATHER("Spider", Ico.TARANTULA_BROODFATHER_SKULL, Ico.STRING), + SVEN_PACKMASTER("Wolf", Ico.SVEN_PACKMASTER_SKULL, Ico.MUTTON), + VOIDGLOOM_SERAPH("Enderman", Ico.VOIDGLOOM_SERAPH_SKULL, Ico.E_PEARL), + RIFTSTALKER_BLOODFIEND("Vampire", Ico.RIFTSTALKER_BLOODFIEND_SKULL, Ico.REDSTONE, "Vampire"), + INFERNO_DEMONLORD("Blaze", Ico.INFERNO_DEMONLORD_SKULL, Ico.B_POWDER); + + private final String name; + private final ItemStack itemStack; + private final ItemStack dropItemStack; + private final String levelFinderOverride; + + + Slayer(String name, ItemStack itemStack, ItemStack dropItemStack) { + this(name, itemStack, dropItemStack, "GenericSlayer"); + } + + Slayer(String name, ItemStack itemStack, ItemStack dropItemStack, String override) { + this.name = name; + this.itemStack = itemStack; + this.dropItemStack = dropItemStack; + this.levelFinderOverride = override; + } + + public String getName() { + return name; + } + + public ItemStack getIcon() { return itemStack; } + + public ItemStack getDropIcon() { return dropItemStack; } + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java index cddc78e6..8329af92 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java @@ -52,7 +52,7 @@ public class SkillsPage implements ProfileViewerPage { @Init public static void init() { - ProfileViewerScreenRework.PAGE_CONSTRUCTORS.add(SkillsPage::new); +// ProfileViewerScreenRework.PAGE_CONSTRUCTORS.add(SkillsPage::new); } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SlayerKillsWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SlayerKillsWidget.java new file mode 100644 index 00000000..b5e275c1 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SlayerKillsWidget.java @@ -0,0 +1,67 @@ +package de.hysky.skyblocker.skyblock.profileviewer.rework.pages; + +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.skyblock.profileviewer.model.SlayerBoss; +import de.hysky.skyblocker.skyblock.profileviewer.model.SlayerData; +import de.hysky.skyblocker.skyblock.profileviewer.rework.ProfileViewerWidget; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gl.RenderPipelines; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; + +import java.util.ArrayList; +import java.util.List; + +import static de.hysky.skyblocker.utils.Formatters.INTEGER_NUMBERS; +import static de.hysky.skyblocker.utils.Formatters.SHORT_INTEGER_NUMBERS; + +final class SlayerKillsWidget implements ProfileViewerWidget { + private static final Identifier ICON_DATA_TEXTURE = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/profile_viewer/icon_data_widget.png"); + + private final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + private final SlayerData.Slayer slayer; + private final SlayerBoss slayerData; + + SlayerKillsWidget( + SlayerData.Slayer slayer, + SlayerBoss slayerData + ) { + this.slayer = slayer; + this.slayerData = slayerData; + } + + public static final int WIDTH = 109; + public static final int HEIGHT = 26; + + @Override + public void render(DrawContext drawContext, + int x, int y, int mouseX, int mouseY, float deltaTicks) { + drawContext.drawTexture(RenderPipelines.GUI_TEXTURED, ICON_DATA_TEXTURE, x, y, 0, 0, WIDTH, HEIGHT, WIDTH, HEIGHT); + drawContext.drawItem(slayer.getDropIcon(), x + 3, y + 5); + drawContext.drawText(textRenderer, "§aKills: §r" + slayerData.getTotalBossKills(), x + 31, y + 4, -1, false); + drawContext.drawText(textRenderer, slayerData.getTierWithMostKills() == -1 ? "No Data" : "§cT" + (slayerData.getTierWithMostKills() + 1) + " Kills: §r" + slayerData.getBossKillsByZeroIndexedTier(slayerData.getTierWithMostKills()), x + 31, y + 14, -1, false); + + // TODO: add helper for hover selection + if (mouseX > x + 30 && mouseX < x + 105 && mouseY > y + 14 && mouseY < y + 21) { + List<Text> tooltipText = new ArrayList<>(); + for (int i = 0; i <= 4; i++) { + tooltipText.add(Text.literal("§cT" + (i + 1) + " Kills: §r" + slayerData.getBossKillsByZeroIndexedTier(i))); + } + drawContext.drawTooltip(textRenderer, tooltipText, mouseX, mouseY); + } + + } + + @Override + public int getHeight() { + return HEIGHT; + } + + @Override + public int getWidth() { + return WIDTH; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SlayerLevelWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SlayerLevelWidget.java new file mode 100644 index 00000000..ccb32abd --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SlayerLevelWidget.java @@ -0,0 +1,101 @@ +package de.hysky.skyblocker.skyblock.profileviewer.rework.pages; + +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.skyblock.profileviewer.model.SlayerData; +import de.hysky.skyblocker.skyblock.profileviewer.rework.ProfileViewerWidget; +import de.hysky.skyblocker.skyblock.profileviewer.utils.LevelFinder; +import de.hysky.skyblocker.utils.render.HudHelper; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gl.RenderPipelines; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + +import static de.hysky.skyblocker.utils.Formatters.INTEGER_NUMBERS; +import static de.hysky.skyblocker.utils.Formatters.SHORT_INTEGER_NUMBERS; + +final class SlayerLevelWidget implements ProfileViewerWidget { + private static final Identifier ICON_DATA_TEXTURE = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/profile_viewer/icon_data_widget.png"); + private static final Identifier BAR_FILL = Identifier.of(SkyblockerMod.NAMESPACE, "bars/bar_fill"); + private static final Identifier BAR_BACK = Identifier.of(SkyblockerMod.NAMESPACE, "bars/bar_back"); + + private final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + private final SlayerData.Slayer slayer; + private final LevelFinder.LevelInfo levelInfo; + + SlayerLevelWidget( + SlayerData.Slayer slayer, + LevelFinder.LevelInfo levelInfo + ) { + this.slayer = slayer; + this.levelInfo = levelInfo; + } + + public static final int WIDTH = 109; + public static final int HEIGHT = 26; + + @Override + public void render(DrawContext drawContext, + int x, int y, int mouseX, int mouseY, float deltaTicks) { + drawContext.drawTexture(RenderPipelines.GUI_TEXTURED, ICON_DATA_TEXTURE, x, y, 0, 0, WIDTH, HEIGHT, WIDTH, HEIGHT); + drawContext.drawItem(slayer.getIcon(), x + 3, y + 5); + drawContext.drawText(textRenderer, slayer.getName() + " " + levelInfo.level, x + 31, y + 4, -1, false); + Color fillColor = Color.GREEN; + var levelCap = slayer.getName().equals("Vampire") ? 5 : 9; + if (levelInfo.level >= levelCap) + fillColor = Color.MAGENTA; + drawContext.drawGuiTexture(RenderPipelines.GUI_TEXTURED, BAR_BACK, x + 30, y + 14, 75, 6); + HudHelper.renderNineSliceColored(drawContext, BAR_FILL, x + 30, y + 14, (int) (75 * levelInfo.fill), 6, fillColor); + + // TODO: add helper for hover selection + if (mouseX > x + 30 && mouseX < x + 105 && mouseY > y + 14 && mouseY < y + 21) { + List<Text> tooltipText = new ArrayList<>(); + tooltipText.add(Text.literal(slayer.getName() + " " + levelInfo.level).formatted(Formatting.GREEN)); + if (levelInfo.level < levelCap) { + tooltipText.add(Text.literal("Progress to Level " + (levelInfo.level + 1) + ":").formatted(Formatting.GRAY)); + tooltipText.add(Text.literal("") + .append(formatBar(levelInfo.fill, 15, Formatting.DARK_GREEN, Formatting.GRAY)) + .append(" ") + .append(INTEGER_NUMBERS.format(levelInfo.levelXP)) + .append("/") + .append(SHORT_INTEGER_NUMBERS.format(levelInfo.nextLevelXP)) + .formatted(Formatting.YELLOW)); + tooltipText.add( + Text.literal("XP till " + (levelInfo.level + 1) + ": ") + .append(Text.literal(INTEGER_NUMBERS.format(levelInfo.nextLevelXP - levelInfo.levelXP)).formatted(Formatting.YELLOW)) + .formatted(Formatting.GRAY)); + } else { + tooltipText.add(Text.literal("Progress: §6MAXED").formatted(Formatting.GRAY)); + } + tooltipText.add(Text.literal("§7Total XP: §r" + INTEGER_NUMBERS.format(levelInfo.xp)).formatted(Formatting.YELLOW)); + drawContext.drawTooltip(textRenderer, tooltipText, mouseX, mouseY); + } + } + + private static Text formatBar(double percentage, int total, Formatting filledStyle, Formatting emptyStyle) { + return formatBar((int) Math.round(percentage * total), total, filledStyle, emptyStyle); + } + + private static Text formatBar(int filled, int total, Formatting filledStyle, Formatting emptyStyle) { + assert filled <= total; + return Text.literal("") + .append(Text.literal(" ".repeat(filled)).formatted(filledStyle, Formatting.STRIKETHROUGH, Formatting.BOLD)) + .append(Text.literal(" ".repeat(total - filled)).formatted(emptyStyle, Formatting.STRIKETHROUGH, Formatting.BOLD)); + } + + @Override + public int getHeight() { + return HEIGHT; + } + + @Override + public int getWidth() { + return WIDTH; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SlayersPage.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SlayersPage.java new file mode 100644 index 00000000..8f0a152a --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SlayersPage.java @@ -0,0 +1,71 @@ +package de.hysky.skyblocker.skyblock.profileviewer.rework.pages; + +import de.hysky.skyblocker.annotations.Init; +import de.hysky.skyblocker.skyblock.profileviewer.model.SlayerData; +import de.hysky.skyblocker.skyblock.profileviewer.rework.*; +import de.hysky.skyblocker.skyblock.tabhud.util.Ico; +import net.minecraft.item.ItemStack; +import java.util.ArrayList; +import java.util.List; + +public class SlayersPage implements ProfileViewerPage { + + List<ProfileViewerWidget.Instance> widgets = new ArrayList<>(); + + public SlayersPage(ProfileLoadState.SuccessfulLoad load) { + var slayerData = load.member().slayer; + // TODO: Maybe make it's own SlayerWidget + List<ProfileViewerWidget> slayers = new ArrayList<>(); + slayers.add(new SlayerLevelWidget(SlayerData.Slayer.REVENANT_HORROR, slayerData.getSkillLevel(SlayerData.Slayer.REVENANT_HORROR))); + slayers.add(new SlayerLevelWidget(SlayerData.Slayer.TARANTULA_BROODFATHER, slayerData.getSkillLevel(SlayerData.Slayer.TARANTULA_BROODFATHER))); + slayers.add(new SlayerLevelWidget(SlayerData.Slayer.SVEN_PACKMASTER, slayerData.getSkillLevel(SlayerData.Slayer.SVEN_PACKMASTER))); + slayers.add(new SlayerLevelWidget(SlayerData.Slayer.VOIDGLOOM_SERAPH, slayerData.getSkillLevel(SlayerData.Slayer.VOIDGLOOM_SERAPH))); + slayers.add(new SlayerLevelWidget(SlayerData.Slayer.RIFTSTALKER_BLOODFIEND, slayerData.getSkillLevel(SlayerData.Slayer.RIFTSTALKER_BLOODFIEND))); + slayers.add(new SlayerLevelWidget(SlayerData.Slayer.INFERNO_DEMONLORD, slayerData.getSkillLevel(SlayerData.Slayer.INFERNO_DEMONLORD))); + + slayers.add(new SlayerKillsWidget(SlayerData.Slayer.REVENANT_HORROR, slayerData.getSlayerData(SlayerData.Slayer.REVENANT_HORROR))); + slayers.add(new SlayerKillsWidget(SlayerData.Slayer.TARANTULA_BROODFATHER, slayerData.getSlayerData(SlayerData.Slayer.TARANTULA_BROODFATHER))); + slayers.add(new SlayerKillsWidget(SlayerData.Slayer.SVEN_PACKMASTER, slayerData.getSlayerData(SlayerData.Slayer.SVEN_PACKMASTER))); + slayers.add(new SlayerKillsWidget(SlayerData.Slayer.VOIDGLOOM_SERAPH, slayerData.getSlayerData(SlayerData.Slayer.VOIDGLOOM_SERAPH))); + slayers.add(new SlayerKillsWidget(SlayerData.Slayer.RIFTSTALKER_BLOODFIEND, slayerData.getSlayerData(SlayerData.Slayer.RIFTSTALKER_BLOODFIEND))); + slayers.add(new SlayerKillsWidget(SlayerData.Slayer.INFERNO_DEMONLORD, slayerData.getSlayerData(SlayerData.Slayer.INFERNO_DEMONLORD))); + + int i = 0; + for (var slayer : slayers) { + int x = i < 6 ? 88 : 88 + 113; + int y = (i % 6) * (2 + 26); + i++; + widgets.add(widget( + x, y, slayer + )); + } + widgets.add(widget(0, 0, new EntityViewerWidget(load.mainMemberId()))); + widgets.add(widget(0, 112, new PlayerMetaWidget(load))); + } + + @Init + public static void init() { + ProfileViewerScreenRework.PAGE_CONSTRUCTORS.add(SlayersPage::new); + } + + @Override + public int getSortIndex() { + return 1; + } + + @Override + public ItemStack getIcon() { + return Ico.AATROX_BATPHONE_SKULL; + } + + @Override + public String getName() { + return "Slayers"; + } + + @Override + public List<ProfileViewerWidget.Instance> getWidgets() { + // TODO: add player widget to the left only on this page. + return widgets; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/Ico.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/Ico.java index 4c91787e..ca818185 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/Ico.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/Ico.java @@ -90,4 +90,11 @@ public class Ico { public static final ItemStack TROPICAL_FISH_BUCKET = Items.TROPICAL_FISH_BUCKET.getDefaultStack(); public static final ItemStack STRIPPED_SPRUCE_WOOD = Items.STRIPPED_SPRUCE_WOOD.getDefaultStack(); public static final ItemStack MANGROVE_LOG = Items.MANGROVE_LOG.getDefaultStack(); + public static final ItemStack AATROX_BATPHONE_SKULL = ItemUtils.createSkull(HeadTextures.AATROX_BATPHONE); + public static final ItemStack REVENANT_HORROR_SKULL = ItemUtils.createSkull(HeadTextures.REVENANT_HORROR); + public static final ItemStack TARANTULA_BROODFATHER_SKULL = ItemUtils.createSkull(HeadTextures.TARANTULA_BROODFATHER); + public static final ItemStack SVEN_PACKMASTER_SKULL = ItemUtils.createSkull(HeadTextures.SVEN_PACKMASTER); + public static final ItemStack VOIDGLOOM_SERAPH_SKULL = ItemUtils.createSkull(HeadTextures.VOIDGLOOM_SERAPH); + public static final ItemStack RIFTSTALKER_BLOODFIEND_SKULL = ItemUtils.createSkull(HeadTextures.RIFTSTALKER_BLOODFIEND); + public static final ItemStack INFERNO_DEMONLORD_SKULL = ItemUtils.createSkull(HeadTextures.INFERNO_DEMONLORD); } |
