From bf18fb9b0054177b3dee145d681c8ff1dd60418e Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 25 Apr 2025 16:25:27 -0400 Subject: 1.21.5 (#1256) * 1.21.5 * Test fixes and clean up * Update test screenshot * Record patterns * Performance optimization * Reset ordered waypoint index on world change (and stop serializing it) * Waypoints clean up and fixes (#1257) * Small waypoints clean up * Fix waypoints test codec field order * Safe config updates Rather than updating the values directly and then calling save, the mod will now handle this behaviour itself to ensure update consistency/visibility with the upcoming thread split. Most usages of the old method were converted but there are some left. --------- Co-authored-by: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> --- src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java | 13 ++++++++++--- .../utils/datafixer/ItemStackComponentizationFixerTest.java | 8 ++++---- .../de/hysky/skyblocker/utils/waypoint/WaypointsTest.java | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java b/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java index 101815ac..4cfd5fe5 100644 --- a/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java +++ b/src/test/java/de/hysky/skyblocker/utils/ItemUtilsTest.java @@ -2,11 +2,14 @@ package de.hysky.skyblocker.utils; import com.google.gson.JsonElement; import com.google.gson.JsonParser; +import com.mojang.serialization.Dynamic; import com.mojang.serialization.JsonOps; import de.hysky.skyblocker.skyblock.item.tooltip.adders.ObtainedDateTooltip; import it.unimi.dsi.fastutil.ints.IntIntPair; import net.minecraft.Bootstrap; import net.minecraft.SharedConstants; +import net.minecraft.datafixer.Schemas; +import net.minecraft.datafixer.TypeReferences; import net.minecraft.item.ItemStack; import net.minecraft.registry.BuiltinRegistries; import net.minecraft.registry.RegistryOps; @@ -35,7 +38,11 @@ public class ItemUtilsTest { private final ItemStack WITHER_SKELETON_PET = create("{\"id\":\"minecraft:player_head\",\"count\":1,\"components\":{\"minecraft:lore\":[\"{\\\"extra\\\":[{\\\"color\\\":\\\"dark_gray\\\",\\\"text\\\":\\\"Mining Pet\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"Defense: \\\"},{\\\"color\\\":\\\"green\\\",\\\"text\\\":\\\"+25\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"Strength: \\\"},{\\\"color\\\":\\\"red\\\",\\\"text\\\":\\\"+25\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"Intelligence: \\\"},{\\\"color\\\":\\\"green\\\",\\\"text\\\":\\\"+25\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"Crit Chance: \\\"},{\\\"color\\\":\\\"red\\\",\\\"text\\\":\\\"+5%\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"Crit Damage: \\\"},{\\\"color\\\":\\\"red\\\",\\\"text\\\":\\\"+25%\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gold\\\",\\\"text\\\":\\\"Stronger Bones\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"\\\"},{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"Take \\\"},{\\\"color\\\":\\\"green\\\",\\\"text\\\":\\\"30% \\\"},{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"less damage from skeletons\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gold\\\",\\\"text\\\":\\\"Wither Blood\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"\\\"},{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"Deal \\\"},{\\\"color\\\":\\\"green\\\",\\\"text\\\":\\\"125% \\\"},{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"more damage to wither\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"mobs\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gold\\\",\\\"text\\\":\\\"Death\\u0027s Touch\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"\\\"},{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"Upon hitting an enemy inflict the\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"wither effect for \\\"},{\\\"color\\\":\\\"green\\\",\\\"text\\\":\\\"200% \\\"},{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"damage over\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"3 seconds\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"dark_gray\\\",\\\"text\\\":\\\"Does not stack\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gold\\\",\\\"text\\\":\\\"Held Item: \\\"},{\\\"color\\\":\\\"blue\\\",\\\"text\\\":\\\"Dwarf Turtle Shelmet\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"Makes the pet\\u0027s owner immune to\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"knockback.\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"bold\\\":true,\\\"color\\\":\\\"aqua\\\",\\\"text\\\":\\\"MAX LEVEL\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"dark_gray\\\",\\\"text\\\":\\\"▸ 29,079,797 XP\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"\\\"},{\\\"color\\\":\\\"red\\\",\\\"text\\\":\\\"Click to despawn!\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"\\\"},{\\\"color\\\":\\\"yellow\\\",\\\"text\\\":\\\"Shift Left-click to toggle as favorite!\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"{\\\"extra\\\":[{\\\"color\\\":\\\"yellow\\\",\\\"text\\\":\\\"Right-click to convert to an item!\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\"],\"minecraft:custom_name\":\"{\\\"extra\\\":[{\\\"color\\\":\\\"gray\\\",\\\"text\\\":\\\"[Lvl 100] \\\"},{\\\"color\\\":\\\"gold\\\",\\\"text\\\":\\\"Wither Skeleton\\\"}],\\\"italic\\\":false,\\\"text\\\":\\\"\\\"}\",\"minecraft:profile\":{\"name\":\"61eebdb5acf149e9\",\"id\":[1643036085,-1393473047,-1459445539,-328222031],\"properties\":[{\"name\":\"textures\",\"value\":\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjVlYzk2NDY0NWE4ZWZhYzc2YmUyZjE2MGQ3Yzk5NTYzNjJmMzJiNjUxNzM5MGM1OWMzMDg1MDM0ZjA1MGNmZiJ9fX0\\u003d\"}]},\"minecraft:custom_data\":{\"petInfo\":\"{\\\"type\\\":\\\"WITHER_SKELETON\\\",\\\"active\\\":true,\\\"exp\\\":2.907979704591799E7,\\\"tier\\\":\\\"LEGENDARY\\\",\\\"hideInfo\\\":false,\\\"heldItem\\\":\\\"DWARF_TURTLE_SHELMET\\\",\\\"candyUsed\\\":0,\\\"uuid\\\":\\\"dcc730ef-2936-461c-b7ec-45a087baa44d\\\",\\\"uniqueId\\\":\\\"7e7270ec-0ff5-460d-8d14-430ea48b596f\\\",\\\"hideRightClick\\\":false,\\\"noMove\\\":false}\",\"uuid\":\"dcc730ef-2936-461c-b7ec-45a087baa44d\",\"id\":\"PET\"}}}"); public ItemStack create(String itemStackJson) { - return ItemStack.CODEC.parse(JSON_OPS, JsonParser.parseString(itemStackJson)).getOrThrow(); + //The hide tooltip fields are consolidated into a single component now so this just fixes it until I want to edit the constants lol + Dynamic dynamic = new Dynamic<>(JSON_OPS, JsonParser.parseString(itemStackJson)); + Dynamic fixed = Schemas.getFixer().update(TypeReferences.ITEM_STACK, dynamic, 4189, 4323); + + return ItemStack.CODEC.parse(fixed).getOrThrow(); } @BeforeAll @@ -122,7 +129,7 @@ public class ItemUtilsTest { void testGetDurability() { IntIntPair durability = ItemUtils.getDurability(TITANIUM_DRILL_DR_X655); Assertions.assertNotNull(durability); - Assertions.assertEquals(durability.leftInt(), 5395); - Assertions.assertEquals(durability.rightInt(), 10_000); + Assertions.assertEquals(5395, durability.leftInt()); + Assertions.assertEquals(10_000, durability.rightInt()); } } diff --git a/src/test/java/de/hysky/skyblocker/utils/datafixer/ItemStackComponentizationFixerTest.java b/src/test/java/de/hysky/skyblocker/utils/datafixer/ItemStackComponentizationFixerTest.java index a21ffd89..bab93dfc 100644 --- a/src/test/java/de/hysky/skyblocker/utils/datafixer/ItemStackComponentizationFixerTest.java +++ b/src/test/java/de/hysky/skyblocker/utils/datafixer/ItemStackComponentizationFixerTest.java @@ -53,12 +53,12 @@ public class ItemStackComponentizationFixerTest { void testComponentsAsString() { String componentString = ItemStackComponentizationFixer.componentsAsString(TEST_STACK); - Assertions.assertEquals("[minecraft:enchantments={levels:{\"minecraft:sharpness\":1}}]", componentString); + Assertions.assertEquals("[minecraft:enchantments={\"minecraft:sharpness\":1}]", componentString); } @Test void testFromComponentsString() { - String componentString = "[minecraft:enchantments={levels:{\"minecraft:sharpness\":1}}]"; + String componentString = "[minecraft:enchantments={\"minecraft:sharpness\":1}]"; ItemStack stack = ItemStackComponentizationFixer.fromComponentsString("minecraft:diamond_sword", 1, componentString); Assertions.assertTrue(ItemStack.areItemsAndComponentsEqual(stack, TEST_STACK)); @@ -66,7 +66,7 @@ public class ItemStackComponentizationFixerTest { @Test void testFromComponentsStringWithInvalidItem() { - String componentString = "[minecraft:enchantments={levels:{\"minecraft:sharpness\":1}}]"; + String componentString = "[minecraft:enchantments={\"minecraft:sharpness\":1}]"; ItemStack stack = ItemStackComponentizationFixer.fromComponentsString("minecraft:does_not_exist", 1, componentString); Assertions.assertEquals(stack, ItemStack.EMPTY); @@ -82,7 +82,7 @@ public class ItemStackComponentizationFixerTest { private static NbtCompound convertToNbt(String nbt) { try { - return StringNbtReader.parse(nbt); + return StringNbtReader.readCompound(nbt); } catch (Exception e) { return new NbtCompound(); } diff --git a/src/test/java/de/hysky/skyblocker/utils/waypoint/WaypointsTest.java b/src/test/java/de/hysky/skyblocker/utils/waypoint/WaypointsTest.java index 200f391e..4e85e3e2 100644 --- a/src/test/java/de/hysky/skyblocker/utils/waypoint/WaypointsTest.java +++ b/src/test/java/de/hysky/skyblocker/utils/waypoint/WaypointsTest.java @@ -417,7 +417,7 @@ public class WaypointsTest { @Test void testToSkyblocker() { String waypointGroupsSkyblocker = Waypoints.toSkyblocker(List.of(SAPPHIRE_WAYPOINTS)); - String expectedWaypointGroupsSkyblocker = "[Skyblocker-Waypoint-Data-V1]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"; + String expectedWaypointGroupsSkyblocker = "[Skyblocker-Waypoint-Data-V1]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"; Assertions.assertEquals(expectedWaypointGroupsSkyblocker, waypointGroupsSkyblocker); } -- cgit