diff options
13 files changed, 61 insertions, 33 deletions
diff --git a/build.gradle b/build.gradle index 4958c16f..f6c0d984 100644 --- a/build.gradle +++ b/build.gradle @@ -97,17 +97,12 @@ processResources { } tasks.withType(JavaCompile).configureEach { - it.options.release = 17 + it.options.release = 21 } java { - // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task - // if it is present. - // If you remove this line, sources will not be generated. - withSourcesJar() - - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } jar { diff --git a/gradle.properties b/gradle.properties index 4be3c383..858605a8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,13 +3,13 @@ org.gradle.parallel=true # Fabric Properties (https://fabricmc.net/versions.html) ## 1.20 -minecraft_version=24w13a -yarn_mappings=24w13a+build.7 -loader_version=0.15.7 +minecraft_version=24w14a +yarn_mappings=24w14a+build.5 +loader_version=0.15.9 #Fabric api ## 1.20 -fabric_api_version=0.96.13+1.20.5 +fabric_api_version=0.96.14+1.20.5 # Minecraft Mods ## YACL (https://github.com/isXander/YetAnotherConfigLib) diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/MinecraftClientAccessor.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/MinecraftClientAccessor.java new file mode 100644 index 00000000..f48037df --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/accessor/MinecraftClientAccessor.java @@ -0,0 +1,15 @@ +package de.hysky.skyblocker.mixin.accessor; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; + +import net.minecraft.client.MinecraftClient; + +@Mixin(MinecraftClient.class) +public interface MinecraftClientAccessor { + + @Accessor + public YggdrasilAuthenticationService getAuthenticationService(); +} diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/SkullBlockEntityAccessor.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/SkullBlockEntityAccessor.java index dfe544bc..875d24d3 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/accessor/SkullBlockEntityAccessor.java +++ b/src/main/java/de/hysky/skyblocker/mixin/accessor/SkullBlockEntityAccessor.java @@ -2,6 +2,8 @@ package de.hysky.skyblocker.mixin.accessor; import com.mojang.authlib.GameProfile; import net.minecraft.block.entity.SkullBlockEntity; +import net.minecraft.util.ApiServices; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; @@ -11,7 +13,7 @@ import java.util.concurrent.CompletableFuture; @Mixin(SkullBlockEntity.class) public interface SkullBlockEntityAccessor { @Invoker - static CompletableFuture<Optional<GameProfile>> invokeFetchProfile(String name) { + static CompletableFuture<Optional<GameProfile>> invokeFetchProfileByName(String name, ApiServices apiServices) { throw new UnsupportedOperationException(); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java b/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java index 5cdca216..c34c853b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java @@ -7,6 +7,7 @@ import de.hysky.skyblocker.mixin.accessor.HandledScreenAccessor; import de.hysky.skyblocker.mixin.accessor.ScreenAccessor; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; +import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; import it.unimi.dsi.fastutil.longs.LongBooleanPair; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; @@ -15,7 +16,6 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.gui.tooltip.Tooltip; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.slot.Slot; @@ -206,7 +206,7 @@ public class ChestValue { * Searches for a specific string of characters in the name and lore of an item */ private static String searchLoreFor(ItemStack stack, MinecraftClient client, String searchString) { - return stack.getTooltip(client.player, TooltipContext.BASIC).stream().map(Text::getString).filter(line -> line.contains(searchString)).findAny().orElse(null); + return ItemUtils.getLoreLineIf(stack, line -> line.contains(searchString)); } static Text getProfitText(long profit, boolean hasIncompleteData) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/FinderSettingsContainer.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/FinderSettingsContainer.java index 0a048775..70902a17 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/FinderSettingsContainer.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/FinderSettingsContainer.java @@ -5,7 +5,6 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.ContainerWidget; -import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.screen.GenericContainerScreenHandler; @@ -15,6 +14,8 @@ import net.minecraft.text.Text; import java.util.ArrayList; import java.util.List; +import de.hysky.skyblocker.utils.ItemUtils; + public class FinderSettingsContainer extends ContainerWidget { private boolean isInitialized = false; private OptionDropdownWidget floorSelector; @@ -161,7 +162,7 @@ public class FinderSettingsContainer extends ContainerWidget { * @return true if all goes well */ private boolean setRangeFromTooltip(ItemStack stack, RangedValueWidget widget) { - for (Text text : stack.getTooltip(null, TooltipContext.BASIC)) { + for (Text text : ItemUtils.getLore(stack)) { String textLowerCase = text.getString().toLowerCase(); if (textLowerCase.contains("selected:")) { String[] split = text.getString().split(":"); @@ -186,7 +187,7 @@ public class FinderSettingsContainer extends ContainerWidget { * @return true if all goes well */ private boolean setSelectedElementFromTooltip(Slot slot, ItemStack stack, OptionDropdownWidget dropdownWidget) { - for (Text text : stack.getTooltip(null, TooltipContext.BASIC)) { + for (Text text : ItemUtils.getLore(stack)) { String textLowerCase = text.getString().toLowerCase(); if (textLowerCase.contains("selected:")) { String[] split = text.getString().split(":"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java index 3dc8cfd6..dd550b4f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.dungeon.partyfinder; import com.mojang.authlib.properties.PropertyMap; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.mixin.accessor.SkullBlockEntityAccessor; +import de.hysky.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; @@ -145,7 +146,7 @@ public class PartyEntry extends ElementListWidget.Entry<PartyEntry> { if (matcher.find()) classLevel = Integer.parseInt(matcher.group(1)); Player player = new Player(playerName, className, classLevel); - SkullBlockEntityAccessor.invokeFetchProfile(playerNameTrim).thenAccept( + SkullBlockEntityAccessor.invokeFetchProfileByName(playerNameTrim, Utils.getApiServices()).thenAccept( gameProfile -> gameProfile.ifPresent(profile -> player.skinTexture = (client.getSkinProvider().getSkinTextures(profile).texture()))); if (playerNameTrim.equals(partyHost)) { @@ -170,7 +171,7 @@ public class PartyEntry extends ElementListWidget.Entry<PartyEntry> { partyLeader = new Player(Text.literal("Error"), "Error", -1); } - SkullBlockEntityAccessor.invokeFetchProfile(partyLeader.name.getString()).thenAccept( + SkullBlockEntityAccessor.invokeFetchProfileByName(partyLeader.name.getString(), Utils.getApiServices()).thenAccept( gameProfile -> gameProfile.ifPresent(profile -> partyLeaderSkin = client.getSkinProvider().getSkinTextures(profile).texture())); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java index 98ab88c0..4ba68256 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java @@ -13,7 +13,6 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.item.TooltipContext; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.toast.SystemToast; import net.minecraft.entity.player.PlayerInventory; @@ -372,7 +371,7 @@ public class PartyFinderScreen extends Screen { if (slot.id > (handler.getRows() - 1) * 9 - 1 || !slot.hasStack()) continue; if (slot.getStack().isOf(Items.PLAYER_HEAD)) { assert this.client != null; - parties.add(new PartyEntry(slot.getStack().getTooltip(this.client.player, TooltipContext.BASIC), this, slot.id)); + parties.add(new PartyEntry(ItemUtils.getLore(slot.getStack()), this, slot.id)); } else if (slot.getStack().isOf(Items.ARROW) && slot.getStack().getName().getString().toLowerCase().contains("previous")) { prevPageSlotId = slot.id; previousPageButton.active = true; @@ -401,7 +400,7 @@ public class PartyFinderScreen extends Screen { deListSlotId = slot.id; } else if (slot.getStack().isOf(Items.PLAYER_HEAD)) { assert this.client != null; - tooltips = slot.getStack().getTooltip(this.client.player, TooltipContext.BASIC); + tooltips = ItemUtils.getLore(slot.getStack()); } } if (tooltips != null) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/PlayerHeadHashCache.java b/src/main/java/de/hysky/skyblocker/skyblock/item/PlayerHeadHashCache.java index 2a1688fc..da832164 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/PlayerHeadHashCache.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/PlayerHeadHashCache.java @@ -1,7 +1,6 @@ package de.hysky.skyblocker.skyblock.item; -import java.net.MalformedURLException; -import java.net.URL; +import java.net.URI; import java.util.Base64; import java.util.concurrent.CompletableFuture; @@ -50,8 +49,8 @@ public class PlayerHeadHashCache { //From MinecraftProfileTexture#getHash public static String getSkinHash(String url) { try { - return FilenameUtils.getBaseName(new URL(url).getPath()); - } catch (MalformedURLException e) { + return FilenameUtils.getBaseName(new URI(url).getPath()); + } catch (Exception e) { LOGGER.error("[Skyblocker Player Head Hash Cache] Malformed Skin URL! URL: {}", url, e); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java index 855a4760..94153c01 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java @@ -12,7 +12,7 @@ import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.scheduler.Scheduler; import it.unimi.dsi.fastutil.Pair; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.item.TooltipContext; +import net.minecraft.client.item.TooltipType; import net.minecraft.component.type.DyedColorComponent; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -34,7 +34,7 @@ public class ItemTooltip { protected static final SkyblockerConfig.ItemTooltip config = SkyblockerConfigManager.get().general.itemTooltip; private static volatile boolean sentNullWarning = false; - public static void getTooltip(ItemStack stack, TooltipContext context, List<Text> lines) { + public static void getTooltip(ItemStack stack, TooltipType context, List<Text> lines) { if (!Utils.isOnSkyblock() || client.player == null) return; String name = getInternalNameFromNBT(stack, false); diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index bbee3ce1..dcd39de7 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.utils; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import de.hysky.skyblocker.events.SkyblockEvents; +import de.hysky.skyblocker.mixin.accessor.MinecraftClientAccessor; import de.hysky.skyblocker.skyblock.item.MuseumItemCache; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; import de.hysky.skyblocker.utils.scheduler.MessageScheduler; @@ -19,6 +20,7 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.PlayerListEntry; import net.minecraft.scoreboard.*; import net.minecraft.text.Text; +import net.minecraft.util.ApiServices; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; @@ -74,6 +76,7 @@ public class Utils { private static boolean canSendLocRaw = false; private static String mayor = ""; + private static ApiServices apiServices; /** * @implNote The parent text will always be empty, the actual text content is inside the text's siblings. @@ -217,7 +220,6 @@ public class Utils { } if (sidebar.isEmpty() && !fabricLoader.isDevelopmentEnvironment()) return; - String string = sidebar.toString(); if (fabricLoader.isDevelopmentEnvironment() || isConnectedToHypixel(client)) { if (!isOnHypixel) { @@ -466,4 +468,16 @@ public class Utils { }); } + + public static ApiServices getApiServices() { + if (apiServices == null) { + MinecraftClient client = MinecraftClient.getInstance(); + ApiServices apiServicesInstance = ApiServices.create(((MinecraftClientAccessor) client).getAuthenticationService(), client.runDirectory); + apiServices = apiServicesInstance; + + return apiServicesInstance; + } else { + return apiServices; + } + } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 3638a9d5..684fd66d 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -33,10 +33,11 @@ ], "accessWidener": "skyblocker.accesswidener", "depends": { - "fabricloader": ">=0.15.7", - "fabric-api": ">=0.96.13+1.20.5", + "fabricloader": ">=0.15.9", + "fabric-api": ">=0.96.14+1.20.5", "yet_another_config_lib_v3": ">=3.3.3+1.20.4+update.1.20.5-SNAPSHOT+update.1.20.5-SNAPSHOT", - "minecraft": "~1.20.5-alpha.24.13.a" + "minecraft": "~1.20.5-alpha.24.14.a", + "java": ">=21" }, "conflicts": { "immediatelyfast": "<=1.2.11+1.20.4" diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index dac3a201..f728f64f 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -44,6 +44,7 @@ "accessor.HandledScreenAccessor", "accessor.LayeredDrawerAccessor", "accessor.MessageHandlerAccessor", + "accessor.MinecraftClientAccessor", "accessor.PlayerListHudAccessor", "accessor.RecipeBookWidgetAccessor", "accessor.ScreenAccessor", |