aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authornmccullagh <narhanael64@gmail.com>2024-07-04 06:52:51 +0100
committernmccullagh <narhanael64@gmail.com>2024-07-06 19:01:10 +0100
commit477567dec368705b0b01e5234e789c1d062aa82f (patch)
tree24bc42d50fddde28f760218c5fec3ddaa7cc3123 /src/main/java
parent9bce5935109c2922887e282e8fc093b13e49c0a4 (diff)
downloadSkyblocker-477567dec368705b0b01e5234e789c1d062aa82f.tar.gz
Skyblocker-477567dec368705b0b01e5234e789c1d062aa82f.tar.bz2
Skyblocker-477567dec368705b0b01e5234e789c1d062aa82f.zip
few more changes
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java47
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java6
3 files changed, 47 insertions, 13 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java
index 1d0b21ca..f74526a4 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java
@@ -27,6 +27,7 @@ import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.network.OtherClientPlayerEntity;
import net.minecraft.client.network.PlayerListEntry;
import net.minecraft.client.util.SkinTextures;
+import net.minecraft.command.CommandSource;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerModelPart;
import net.minecraft.text.Text;
@@ -55,6 +56,7 @@ public class ProfileViewerScreen extends Screen {
private String playerName;
private JsonObject hypixelProfile;
private JsonObject playerProfile;
+ private boolean profileNotFound = false;
private int activePage = 0;
private static final String[] PAGE_NAMES = {"Skills", "Slayers", "Dungeons", "Inventories", "Collections"};
@@ -73,6 +75,8 @@ public class ProfileViewerScreen extends Screen {
}
private void initialisePagesAndWidgets() {
+ if (profileNotFound) return;
+
textWidget = new ProfileViewerTextWidget(hypixelProfile, playerProfile);
CompletableFuture<Void> skillsFuture = CompletableFuture.runAsync(() -> profileViewerPages[0] = new SkillsPage(hypixelProfile, playerProfile));
@@ -105,6 +109,7 @@ public class ProfileViewerScreen extends Screen {
button.render(context, mouseX, mouseY, delta);
}
+
if (textWidget != null) textWidget.render(context, textRenderer, rootX + 8, rootY + 120);
drawPlayerEntity(context, playerName != null ? playerName : "Loading...", rootX, rootY, mouseX, mouseY);
@@ -112,7 +117,7 @@ public class ProfileViewerScreen extends Screen {
profileViewerPages[activePage].markWidgetsAsVisible();
profileViewerPages[activePage].render(context, mouseX, mouseY, delta, rootX + 93, rootY + 7);
} else {
- context.drawText(textRenderer, "Loading...", rootX + 180, rootY + 80, Color.WHITE.getRGB(), true);
+ context.drawText(textRenderer, profileNotFound ? "No Profile" : "Loading...", rootX + 180, rootY + 80, Color.WHITE.getRGB(), true);
}
}
@@ -120,18 +125,24 @@ public class ProfileViewerScreen extends Screen {
if (entity != null)
drawEntity(context, rootX + 9, rootY + 16, rootX + 89, rootY + 124, 42, 0.0625F, mouseX, mouseY, entity);
context.drawCenteredTextWithShadow(textRenderer, username.length() > 15 ? username.substring(0, 15) : username, rootX + 47, rootY + 14, Color.WHITE.getRGB());
-
}
private CompletableFuture<Void> fetchPlayerData(String username) {
CompletableFuture<Void> profileFuture = ProfileUtils.fetchFullProfile(username).thenAccept(profiles -> {
- this.hypixelProfile = profiles.getAsJsonArray("profiles").asList().stream()
- .map(JsonElement::getAsJsonObject)
- .filter(profile -> profile.getAsJsonPrimitive("selected").getAsBoolean())
- .findFirst()
- .orElseThrow(() -> new IllegalStateException("No selected profile found!"));
-
- this.playerProfile = hypixelProfile.getAsJsonObject("members").get(ApiUtils.name2Uuid(username)).getAsJsonObject();
+ try {
+ Optional<JsonObject> selectedProfile = profiles.getAsJsonArray("profiles").asList().stream()
+ .map(JsonElement::getAsJsonObject)
+ .filter(profile -> profile.getAsJsonPrimitive("selected").getAsBoolean())
+ .findFirst();
+
+ if (selectedProfile.isPresent()) {
+ this.hypixelProfile = selectedProfile.get();
+ this.playerProfile = hypixelProfile.getAsJsonObject("members").get(ApiUtils.name2Uuid(username)).getAsJsonObject();
+ }
+ } catch (Exception e) {
+ this.profileNotFound = true;
+ LOGGER.warn("[Skyblocker Profile Viewer] Error while looking for profile", e);
+ }
});
CompletableFuture<Void> minecraftProfileFuture = SkullBlockEntityAccessor.invokeFetchProfileByName(username).thenAccept(profile -> {
@@ -156,12 +167,14 @@ public class ProfileViewerScreen extends Screen {
entity.setCustomNameVisible(false);
}).exceptionally(ex -> {
this.playerName = "User not found";
+ this.profileNotFound = true;
return null;
});
return CompletableFuture.allOf(profileFuture, minecraftProfileFuture);
}
+
public void onNavButtonClick(ProfileViewerNavButton clickedButton) {
if (profileViewerPages[activePage] != null) profileViewerPages[activePage].markWidgetsAsInvisible();
for (ProfileViewerNavButton button : profileViewerNavButtons) {
@@ -188,10 +201,11 @@ public class ProfileViewerScreen extends Screen {
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> {
LiteralArgumentBuilder<FabricClientCommandSource> literalArgumentBuilder = ClientCommandManager.literal("pv")
- .then(ClientCommandManager.argument("username", StringArgumentType.string())
- .executes(Scheduler.queueOpenScreenFactoryCommand(context -> new ProfileViewerScreen(StringArgumentType.getString(context, "username"))))
- )
- .executes(Scheduler.queueOpenScreenCommand(() -> new ProfileViewerScreen(MinecraftClient.getInstance().getSession().getUsername())));
+ .then(ClientCommandManager.argument("username", StringArgumentType.string())
+ .suggests((source, builder) -> CommandSource.suggestMatching(getPlayerSuggestions(source.getSource()), builder))
+ .executes(Scheduler.queueOpenScreenFactoryCommand(context -> new ProfileViewerScreen(StringArgumentType.getString(context, "username"))))
+ )
+ .executes(Scheduler.queueOpenScreenCommand(() -> new ProfileViewerScreen(MinecraftClient.getInstance().getSession().getUsername())));
dispatcher.register(literalArgumentBuilder);
dispatcher.register(ClientCommandManager.literal(SkyblockerMod.NAMESPACE).then(literalArgumentBuilder));
});
@@ -227,4 +241,11 @@ public class ProfileViewerScreen extends Screen {
}
return Collections.emptyMap();
}
+
+ /**
+ * Ensures that "dummy" players aren't included in command suggestions
+ */
+ private static String[] getPlayerSuggestions(FabricClientCommandSource source) {
+ return source.getPlayerNames().stream().filter(playerName -> playerName.matches("[A-Za-z0-9_]+")).toArray(String[]::new);
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java
index c24967f9..a114f4d6 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java
@@ -1,6 +1,8 @@
package de.hysky.skyblocker.skyblock.profileviewer.inventory;
import com.google.gson.JsonObject;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds;
import de.hysky.skyblocker.skyblock.profileviewer.ProfileViewerPage;
import de.hysky.skyblocker.skyblock.profileviewer.inventory.itemLoaders.ItemLoader;
import it.unimi.dsi.fastutil.ints.IntIntPair;
@@ -72,6 +74,11 @@ public class Inventory implements ProfileViewerPage {
int x = rootX + 8 + column * 18;
int y = rootYAdjusted + 18 + row * 18;
+
+ if (SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds) {
+ ItemRarityBackgrounds.tryDraw(containerList.get(startIndex + i), context, x, y);
+ }
+
context.drawItem(containerList.get(startIndex + i), x, y);
context.drawItemInSlot(textRenderer, containerList.get(startIndex + i), x, y);
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java
index a44d2edc..969960d8 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java
@@ -1,6 +1,8 @@
package de.hysky.skyblocker.skyblock.profileviewer.inventory;
import com.google.gson.JsonObject;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds;
import de.hysky.skyblocker.skyblock.profileviewer.ProfileViewerPage;
import de.hysky.skyblocker.skyblock.profileviewer.inventory.itemLoaders.InventoryItemLoader;
import it.unimi.dsi.fastutil.ints.IntIntPair;
@@ -61,6 +63,10 @@ public class PlayerInventory implements ProfileViewerPage {
int x = rootX + 8 + column * 18;
int y = (rootY + 18 + row * 18) + (dimensions.leftInt() > 1 && row + 1 == dimensions.leftInt() ? 4 : 0);
+ if (SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds) {
+ ItemRarityBackgrounds.tryDraw(containerList.get(startIndex + i), context, x, y);
+ }
+
context.drawItem(containerList.get(startIndex + i), x, y);
context.drawItemInSlot(textRenderer, containerList.get(startIndex + i), x, y);