diff options
Diffstat (limited to 'src/main/java/de/hysky')
7 files changed, 59 insertions, 79 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java index 6ab4e3f2..5522ceca 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java @@ -1,7 +1,5 @@ package de.hysky.skyblocker.skyblock.entity; -import java.util.List; - import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.FrustumUtils; @@ -32,19 +30,11 @@ public class MobBoundingBoxes { String name = entity.getName().getString(); return switch (entity) { - case PlayerEntity p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().locations.dungeons.starredMobBoundingBoxes; - - default -> { - // Regular Mobs - if (!(entity instanceof ArmorStandEntity)) { - List<ArmorStandEntity> armorStands = MobGlow.getArmorStands(entity); - - if (!armorStands.isEmpty() && armorStands.get(0).getName().getString().contains("✯")) - yield SkyblockerConfigManager.get().locations.dungeons.starredMobBoundingBoxes; - } + case PlayerEntity _p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().locations.dungeons.starredMobBoundingBoxes; + case ArmorStandEntity _armorStand -> false; - yield false; - } + // Regular Mobs + default -> SkyblockerConfigManager.get().locations.dungeons.starredMobBoundingBoxes && MobGlow.isStarred(entity); }; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index d21ad881..8343c6a5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -1,8 +1,9 @@ package de.hysky.skyblocker.skyblock.entity; +import com.mojang.authlib.properties.Property; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.end.TheEnd; import de.hysky.skyblocker.skyblock.dungeon.LividColor; +import de.hysky.skyblocker.skyblock.end.TheEnd; import de.hysky.skyblocker.utils.SlayerUtils; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.culling.OcclusionCulling; @@ -22,8 +23,6 @@ import net.minecraft.world.World; import java.util.List; -import com.mojang.authlib.properties.Property; - public class MobGlow { public static boolean shouldMobGlow(Entity entity) { @@ -39,20 +38,14 @@ public class MobGlow { case PlayerEntity p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().locations.dungeons.starredMobGlow; case PlayerEntity p when LividColor.LIVID_NAMES.contains(name) -> LividColor.shouldGlow(name); - //Bats + // Bats case BatEntity b -> SkyblockerConfigManager.get().locations.dungeons.starredMobGlow || SkyblockerConfigManager.get().locations.dungeons.starredMobBoundingBoxes; - default -> { - // Regular Mobs - if (!(entity instanceof ArmorStandEntity)) { - List<ArmorStandEntity> armorStands = getArmorStands(entity); - - if (!armorStands.isEmpty() && armorStands.get(0).getName().getString().contains("✯")) - yield SkyblockerConfigManager.get().locations.dungeons.starredMobGlow; - } + // Armor Stands + case ArmorStandEntity _armorStand -> false; - yield false; - } + // Regular Mobs + default -> SkyblockerConfigManager.get().locations.dungeons.starredMobGlow && isStarred(entity); }; } @@ -74,6 +67,16 @@ public class MobGlow { return false; } + /** + * Checks if an entity is starred by checking if its armor stand contains a star in its name. + * @param entity the entity to check. + * @return true if the entity is starred, false otherwise + */ + public static boolean isStarred(Entity entity) { + List<ArmorStandEntity> armorStands = getArmorStands(entity); + return !armorStands.isEmpty() && armorStands.getFirst().getName().getString().contains("✯"); + } + public static List<ArmorStandEntity> getArmorStands(Entity entity) { return getArmorStands(entity.getWorld(), entity.getBoundingBox()); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/MuseumItemCache.java b/src/main/java/de/hysky/skyblocker/skyblock/item/MuseumItemCache.java index 9b4ffbef..c78724ca 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/MuseumItemCache.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/MuseumItemCache.java @@ -34,7 +34,7 @@ import java.util.concurrent.CompletableFuture; public class MuseumItemCache { private static final Logger LOGGER = LoggerFactory.getLogger(MuseumItemCache.class); private static final Path CACHE_FILE = SkyblockerMod.CONFIG_DIR.resolve("museum_item_cache.json"); - private static final Map<String, Map<String, ProfileMuseumData>> MUSEUM_ITEM_CACHE = new Object2ObjectOpenHashMap<>(); + private static final Map<String, Object2ObjectOpenHashMap<String, ProfileMuseumData>> MUSEUM_ITEM_CACHE = new Object2ObjectOpenHashMap<>(); private static final String ERROR_LOG_TEMPLATE = "[Skyblocker] Failed to refresh museum item data for profile {}"; private static CompletableFuture<Void> loaded; @@ -46,7 +46,7 @@ public class MuseumItemCache { private static void load(MinecraftClient client) { loaded = CompletableFuture.runAsync(() -> { try (BufferedReader reader = Files.newBufferedReader(CACHE_FILE)) { - Map<String, Map<String, ProfileMuseumData>> cachedData = ProfileMuseumData.SERIALIZATION_CODEC.parse(JsonOps.INSTANCE, JsonParser.parseReader(reader)).getOrThrow(); + Map<String, Object2ObjectOpenHashMap<String, ProfileMuseumData>> cachedData = ProfileMuseumData.SERIALIZATION_CODEC.parse(JsonOps.INSTANCE, JsonParser.parseReader(reader)).getOrThrow(); MUSEUM_ITEM_CACHE.putAll(cachedData); LOGGER.info("[Skyblocker] Loaded museum items cache"); @@ -69,7 +69,7 @@ public class MuseumItemCache { private static void updateData4ProfileMember(String uuid, String profileId) { CompletableFuture.runAsync(() -> { - try (ApiResponse response = Http.sendHypixelRequest("skyblock/museum", "?profile=" + profileId)) { + try (ApiResponse response = Http.sendHypixelRequest("skyblock/museum", "?profile=" + profileId)) { //The request was successful if (response.ok()) { JsonObject profileData = JsonParser.parseString(response.content()).getAsJsonObject(); @@ -158,13 +158,12 @@ public class MuseumItemCache { Codec.STRING.listOf() .xmap(ObjectOpenHashSet::new, ObjectArrayList::new) .fieldOf("collectedItemIds") - .forGetter(i -> new ObjectOpenHashSet<String>(i.collectedItemIds()))) - .apply(instance, ProfileMuseumData::new)); + .forGetter(i -> new ObjectOpenHashSet<>(i.collectedItemIds())) + ).apply(instance, ProfileMuseumData::new)); //Mojang's internal Codec implementation uses ImmutableMaps so we'll just xmap those away and type safety while we're at it :') - @SuppressWarnings({ "unchecked", "rawtypes" }) - private static final Codec<Map<String, Map<String, ProfileMuseumData>>> SERIALIZATION_CODEC = Codec.unboundedMap(Codec.STRING, Codec.unboundedMap(Codec.STRING, CODEC) - .xmap(Object2ObjectOpenHashMap::new, Object2ObjectOpenHashMap::new)) - .xmap(Object2ObjectOpenHashMap::new, m -> (Map) new Object2ObjectOpenHashMap(m)); + private static final Codec<Map<String, Object2ObjectOpenHashMap<String, ProfileMuseumData>>> SERIALIZATION_CODEC = Codec.unboundedMap(Codec.STRING, Codec.unboundedMap(Codec.STRING, CODEC) + .xmap(Object2ObjectOpenHashMap::new, Object2ObjectOpenHashMap::new) + ).xmap(Object2ObjectOpenHashMap::new, Object2ObjectOpenHashMap::new); private boolean stale() { return System.currentTimeMillis() > lastUpdated + MAX_AGE; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java index 18a5a9bf..50772789 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/BackpackPreview.java @@ -3,7 +3,6 @@ package de.hysky.skyblocker.skyblock.item.tooltip; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; - import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.ItemProtection; @@ -119,7 +118,7 @@ public class BackpackPreview { String title = handledScreen.getTitle().getString(); int index = getStorageIndexFromTitle(title); if (index != -1) { - storages[index] = new Storage(handledScreen.getScreenHandler().slots.get(0).inventory, title, true); + storages[index] = new Storage(handledScreen.getScreenHandler().slots.getFirst().inventory, title, true); } } @@ -181,8 +180,8 @@ public class BackpackPreview { static class Storage { private static final Codec<Storage> CODEC = RecordCodecBuilder.create(instance -> instance.group( Codec.STRING.fieldOf("name").forGetter(Storage::name), - ItemUtils.EMPTY_ALLOWING_ITEMSTACK_CODEC.listOf().fieldOf("items").forGetter(Storage::getItemList)) - .apply(instance, (name, items) -> Storage.create(name, items))); + ItemUtils.EMPTY_ALLOWING_ITEMSTACK_CODEC.listOf().fieldOf("items").forGetter(Storage::getItemList) + ).apply(instance, Storage::create)); private final Inventory inventory; private final String name; private boolean dirty; @@ -192,7 +191,7 @@ public class BackpackPreview { this.name = name; this.dirty = dirty; } - + private String name() { return name; } 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 d5f2d035..265d276a 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 @@ -22,7 +22,6 @@ import net.minecraft.nbt.NbtElement; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import net.minecraft.util.Util; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; @@ -127,18 +126,18 @@ public class ItemTooltip { } } - final Map<Integer, String> itemTierFloors = Util.make(new HashMap<>(), map -> { - map.put(1, "F1"); - map.put(2, "F2"); - map.put(3, "F3"); - map.put(4, "F4/M1"); - map.put(5, "F5/M2"); - map.put(6, "F6/M3"); - map.put(7, "F7/M4"); - map.put(8, "M5"); - map.put(9, "M6"); - map.put(10, "M7"); - }); + final Map<Integer, String> itemTierFloors = Map.of( + 1, "F1", + 2, "F2", + 3, "F3", + 4, "F4/M1", + 5, "F5/M2", + 6, "F6/M3", + 7, "F7/M4", + 8, "M5", + 9, "M6", + 10, "M7" + ); if (SkyblockerConfigManager.get().general.dungeonQuality) { NbtCompound customData = ItemUtils.getCustomData(stack); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemStackBuilder.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemStackBuilder.java index faad2001..9ee2ecd3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemStackBuilder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemStackBuilder.java @@ -7,14 +7,10 @@ import io.github.moulberry.repo.data.NEUItem; import io.github.moulberry.repo.data.Rarity; import it.unimi.dsi.fastutil.ints.IntArrayList; import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.AttributeModifiersComponent; -import net.minecraft.component.type.DyedColorComponent; -import net.minecraft.component.type.FireworkExplosionComponent; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.component.type.NbtComponent; -import net.minecraft.component.type.ProfileComponent; +import net.minecraft.component.type.*; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.*; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtString; import net.minecraft.registry.Registries; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -43,7 +39,7 @@ public class ItemStackBuilder { String legacyId = item.getMinecraftItemId(); Identifier itemId = new Identifier(ItemFixerUpper.convertItemId(legacyId, item.getDamage())); - + ItemStack stack = new ItemStack(Registries.ITEM.get(itemId)); // Custom Data @@ -57,7 +53,7 @@ public class ItemStackBuilder { stack.set(DataComponentTypes.CUSTOM_NAME, Text.of(name)); // Lore - stack.set(DataComponentTypes.LORE, new LoreComponent(item.getLore().stream().map(line -> Text.of(injectData(line, injectors))).collect(Collectors.toCollection(() -> new ArrayList<>())))); + stack.set(DataComponentTypes.LORE, new LoreComponent(item.getLore().stream().map(line -> Text.of(injectData(line, injectors))).collect(Collectors.toCollection(ArrayList::new)))); String nbttag = item.getNbttag(); // add skull texture @@ -80,7 +76,7 @@ public class ItemStackBuilder { if (nbttag.contains("ench:")) { stack.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true); } - + //Hide weapon damage and other useless info stack.set(DataComponentTypes.ATTRIBUTE_MODIFIERS, new AttributeModifiersComponent(List.of(), false)); @@ -90,7 +86,7 @@ public class ItemStackBuilder { //Forget about the actual ball type because it probably doesn't matter stack.set(DataComponentTypes.FIREWORK_EXPLOSION, new FireworkExplosionComponent(FireworkExplosionComponent.Type.SMALL_BALL, new IntArrayList(Integer.parseInt(explosionColorMatcher.group("color"))), new IntArrayList(), false, false)); } - + // Attach custom nbt data stack.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(customData)); diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java index f7556e4f..453c8b04 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java +++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java @@ -55,10 +55,10 @@ public class ItemUtils { private static final Gson GSON = new Gson(); //GSON Instance with no config private static final Codec<RegistryEntry<Item>> EMPTY_ALLOWING_ITEM_CODEC = Registries.ITEM.getEntryCodec(); public static final Codec<ItemStack> EMPTY_ALLOWING_ITEMSTACK_CODEC = Codec.lazyInitialized(() -> RecordCodecBuilder.create(instance -> instance.group( - EMPTY_ALLOWING_ITEM_CODEC.fieldOf("id").forGetter(ItemStack::getRegistryEntry), - Codec.INT.orElse(1).fieldOf("count").forGetter(ItemStack::getCount), - ComponentChanges.CODEC.optionalFieldOf("components", ComponentChanges.EMPTY).forGetter(ItemStack::getComponentChanges) - ).apply(instance, ItemStack::new))); + EMPTY_ALLOWING_ITEM_CODEC.fieldOf("id").forGetter(ItemStack::getRegistryEntry), + Codec.INT.orElse(1).fieldOf("count").forGetter(ItemStack::getCount), + ComponentChanges.CODEC.optionalFieldOf("components", ComponentChanges.EMPTY).forGetter(ItemStack::getComponentChanges) + ).apply(instance, ItemStack::new))); public static LiteralArgumentBuilder<FabricClientCommandSource> dumpHeldItemCommand() { return literal("dumpHeldItem").executes(context -> { @@ -90,8 +90,7 @@ public class ItemUtils { * @return the internal name of the item stack, or an empty string if the item stack is null or does not have an internal name */ public static String getItemId(@NotNull ItemStack stack) { - NbtCompound customData = getCustomData(stack); - return customData.contains(ID) ? customData.getString(ID) : ""; + return getCustomData(stack).getString(ID); } /** @@ -112,8 +111,7 @@ public class ItemUtils { * @return the UUID of the item stack, or an empty string if the item stack is null or does not have a UUID */ public static String getItemUuid(@NotNull ItemStack stack) { - NbtCompound customData = getCustomData(stack); - return customData.contains(UUID) ? customData.getString(UUID) : ""; + return getCustomData(stack).getString(UUID); } /** @@ -207,9 +205,7 @@ public class ItemUtils { } public static List<Text> getLore(ItemStack item) { - LoreComponent lore = item.getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT); - - return lore.styledLines(); + return item.getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).styledLines(); } public static PropertyMap propertyMapWithTexture(String textureValue) { @@ -220,9 +216,7 @@ public class ItemUtils { try { ItemStack stack = new ItemStack(Items.PLAYER_HEAD); stack.set(DataComponentTypes.PROFILE, new ProfileComponent(Optional.of("SkyblockerStack"), Optional.of(java.util.UUID.randomUUID()), propertyMapWithTexture("e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0="))); - return stack; - //return ItemStack.parseOptional(MinecraftClient.getInstance().player.getRegistryManager(), StringNbtReader.parse("{id:\"minecraft:player_head\",Count:1,tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}}")); } catch (Exception e) { throw new RuntimeException(e); } |