From 2723fbf7b3c1c77a5be5524e2e2ff9f6f2291380 Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 12 Oct 2024 19:44:34 +0100 Subject: [PATCH] Balloons now change their appearance to reflect their type --- .../client/ModifierTooltipRenderer.java | 1 + .../unicopia/client/URenderers.java | 3 ++ .../datagen/providers/ItemModels.java | 10 ++++ .../datagen/providers/UModelProvider.java | 4 +- .../unicopia/entity/mob/AirBalloonEntity.java | 5 +- .../unicopia/item/GiantBalloonItem.java | 27 ++++++++++ .../minelittlepony/unicopia/item/UItems.java | 3 +- .../component/BalloonDesignComponent.java | 46 ++++++++++++++++++ .../component/BufferflyVariantComponent.java | 1 - .../item/component/UDataComponentTypes.java | 3 +- .../textures/item/dawn_giant_balloon.png | Bin 0 -> 6759 bytes .../textures/item/equality_giant_balloon.png | Bin 0 -> 6620 bytes .../textures/item/luna_giant_balloon.png | Bin 0 -> 6670 bytes .../textures/item/storm_giant_balloon.png | Bin 0 -> 6630 bytes .../textures/item/tale_giant_balloon.png | Bin 0 -> 6723 bytes 15 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/item/GiantBalloonItem.java create mode 100644 src/main/java/com/minelittlepony/unicopia/item/component/BalloonDesignComponent.java create mode 100644 src/main/resources/assets/unicopia/textures/item/dawn_giant_balloon.png create mode 100644 src/main/resources/assets/unicopia/textures/item/equality_giant_balloon.png create mode 100644 src/main/resources/assets/unicopia/textures/item/luna_giant_balloon.png create mode 100644 src/main/resources/assets/unicopia/textures/item/storm_giant_balloon.png create mode 100644 src/main/resources/assets/unicopia/textures/item/tale_giant_balloon.png diff --git a/src/main/java/com/minelittlepony/unicopia/client/ModifierTooltipRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/ModifierTooltipRenderer.java index 6d0f7edf..38011ff6 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/ModifierTooltipRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/ModifierTooltipRenderer.java @@ -36,6 +36,7 @@ public class ModifierTooltipRenderer { appendTooltip(stack, UDataComponentTypes.CHARGES, context, textConsumer, type); appendTooltip(stack, UDataComponentTypes.ISSUER, context, textConsumer, type); appendTooltip(stack, UDataComponentTypes.BUTTERFLY_VARIANT, context, textConsumer, type); + appendTooltip(stack, UDataComponentTypes.BALLOON_DESIGN, context, textConsumer, type); EnchantableItem.getSpellEffect(stack).appendTooltip(context, textConsumer, type); if (GlowableItem.isGlowing(stack)) { textConsumer.accept(Text.translatable("item.unicopia.friendship_bracelet.glowing").formatted(Formatting.ITALIC, Formatting.GRAY)); diff --git a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java index 8f518a0a..46333fe3 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java +++ b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java @@ -28,12 +28,14 @@ import com.minelittlepony.unicopia.client.render.*; import com.minelittlepony.unicopia.client.render.entity.*; import com.minelittlepony.unicopia.client.render.shader.UShaders; import com.minelittlepony.unicopia.client.render.spell.SpellRendererFactory; +import com.minelittlepony.unicopia.entity.mob.AirBalloonEntity; import com.minelittlepony.unicopia.entity.mob.ButterflyEntity; import com.minelittlepony.unicopia.entity.mob.UEntities; import com.minelittlepony.unicopia.item.EnchantableItem; import com.minelittlepony.unicopia.item.FancyBedItem; import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.item.component.Appearance; +import com.minelittlepony.unicopia.item.component.BalloonDesignComponent; import com.minelittlepony.unicopia.item.component.BufferflyVariantComponent; import com.minelittlepony.unicopia.particle.UParticles; import com.terraformersmc.terraform.boat.api.client.TerraformBoatClientHelper; @@ -132,6 +134,7 @@ public interface URenderers { ModelPredicateProviderRegistry.register(UItems.GEMSTONE, Identifier.ofVanilla("shape"), (stack, world, entity, seed) -> EnchantableItem.getSpellKey(stack).getGemShape().getId()); ModelPredicateProviderRegistry.register(UItems.ROCK_CANDY, Identifier.ofVanilla("count"), (stack, world, entity, seed) -> stack.getCount() / (float)stack.getMaxCount()); ModelPredicateProviderRegistry.register(UItems.BUTTERFLY, Identifier.ofVanilla("variant"), (stack, world, entity, seed) -> (float)BufferflyVariantComponent.get(stack).variant().ordinal() / ButterflyEntity.Variant.VALUES.length); + ModelPredicateProviderRegistry.register(UItems.GIANT_BALLOON, Identifier.ofVanilla("design"), (stack, world, entity, seed) -> (float)BalloonDesignComponent.get(stack).design().ordinal() / AirBalloonEntity.BalloonDesign.VALUES.length); ModelPredicateProviderRegistry.register(Unicopia.id("zap_cycle"), new ClampedModelPredicateProvider() { private double targetAngle; private double lastAngle; diff --git a/src/main/java/com/minelittlepony/unicopia/datagen/providers/ItemModels.java b/src/main/java/com/minelittlepony/unicopia/datagen/providers/ItemModels.java index 5cf0dc60..f919c717 100644 --- a/src/main/java/com/minelittlepony/unicopia/datagen/providers/ItemModels.java +++ b/src/main/java/com/minelittlepony/unicopia/datagen/providers/ItemModels.java @@ -6,6 +6,7 @@ import java.util.Optional; import com.google.common.base.Strings; import com.minelittlepony.unicopia.Unicopia; +import com.minelittlepony.unicopia.entity.mob.AirBalloonEntity; import com.minelittlepony.unicopia.entity.mob.ButterflyEntity; import net.minecraft.data.client.ItemModelGenerator; import net.minecraft.data.client.Model; @@ -64,6 +65,15 @@ interface ItemModels { }).upload(item, itemModelGenerator); } + static void registerBalloonDesigns(ItemModelGenerator itemModelGenerator, Item item) { + float step = 1F / AirBalloonEntity.BalloonDesign.VALUES.length; + ModelOverrides.of(GENERATED).addUniform("design", step, 1, step, (i, value) -> { + String name = AirBalloonEntity.BalloonDesign.getType(i + 1).name().toLowerCase(Locale.ROOT); + Identifier subModelId = Registries.ITEM.getId(item).withPath(p -> "item/" + name + "_" + p); + return GENERATED.upload(subModelId, TextureMap.layer0(subModelId), itemModelGenerator.writer); + }).upload(item, itemModelGenerator); + } + static void registerSpectralBlock(ItemModelGenerator itemModelGenerator, Item item) { final float step = 0.025F; String[] suffexes = { "", "_greening", "_flowering", "_fruiting", "_ripe", "" }; diff --git a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UModelProvider.java b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UModelProvider.java index ed092815..5d4b9269 100644 --- a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UModelProvider.java +++ b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UModelProvider.java @@ -75,7 +75,7 @@ public class UModelProvider extends FabricModelProvider { UItems.DAFFODIL_DAISY_SANDWICH, UItems.DRAGON_BREATH_SCROLL, UItems.EMPTY_JAR, UItems.FRIENDSHIP_BRACELET, UItems.FRIED_AXOLOTL, UItems.FROG_LEGS, - UItems.GIANT_BALLOON, UItems.GOLDEN_FEATHER, UItems.GOLDEN_OAK_SEEDS, UItems.GOLDEN_WING, UItems.GREEN_APPLE_SEEDS, UItems.GREEN_APPLE, UItems.GROGARS_BELL, + UItems.GOLDEN_FEATHER, UItems.GOLDEN_OAK_SEEDS, UItems.GOLDEN_WING, UItems.GREEN_APPLE_SEEDS, UItems.GREEN_APPLE, UItems.GROGARS_BELL, UItems.GRYPHON_FEATHER, UItems.GREEN_FRIED_EGG, UItems.HAY_BURGER, UItems.HAY_FRIES, UItems.HORSE_SHOE_FRIES, UItems.IMPORTED_OATS, @@ -131,8 +131,8 @@ public class UModelProvider extends FabricModelProvider { .flatMap(id -> Registries.ITEM.getOrEmpty(id).stream()) .toArray(Item[]::new)); - // butterflies ItemModels.registerButterfly(itemModelGenerator, UItems.BUTTERFLY); + ItemModels.registerBalloonDesigns(itemModelGenerator, UItems.GIANT_BALLOON); ItemModels.registerSpectralBlock(itemModelGenerator, UItems.SPECTRAL_CLOCK); ModelOverrides.of(ItemModels.GENERATED) .addUniform("count", 2, 16, ModelIds.getItemModelId(UItems.ROCK_CANDY)) diff --git a/src/main/java/com/minelittlepony/unicopia/entity/mob/AirBalloonEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/mob/AirBalloonEntity.java index 058b2cb3..d070f311 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/mob/AirBalloonEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/mob/AirBalloonEntity.java @@ -54,6 +54,7 @@ import com.minelittlepony.unicopia.entity.collision.MultiBoundingBoxEntity; import com.minelittlepony.unicopia.entity.collision.MultiBox; import com.minelittlepony.unicopia.item.BasketItem; import com.minelittlepony.unicopia.item.UItems; +import com.minelittlepony.unicopia.item.component.BalloonDesignComponent; import com.minelittlepony.unicopia.item.component.UDataComponentTypes; import com.minelittlepony.unicopia.server.world.WeatherConditions; import com.minelittlepony.unicopia.util.serialization.PacketCodecUtils; @@ -794,7 +795,7 @@ public class AirBalloonEntity extends MobEntity implements EntityCollisions.Comp STORM, TALE; - private static final BalloonDesign[] VALUES = values(); + public static final BalloonDesign[] VALUES = values(); public static final EnumCodec CODEC = StringIdentifiable.createCodec(BalloonDesign::values); public static final PacketCodec PACKET_CODEC = PacketCodecUtils.ofEnum(BalloonDesign.class); @@ -806,7 +807,7 @@ public class AirBalloonEntity extends MobEntity implements EntityCollisions.Comp } public static AirBalloonEntity.BalloonDesign of(World world, ItemStack stack) { - AirBalloonEntity.BalloonDesign design = stack.getOrDefault(UDataComponentTypes.BALLOON_DESIGN, NONE); + AirBalloonEntity.BalloonDesign design = BalloonDesignComponent.get(stack).design(); if (design == NONE) { return VALUES[1 + world.getRandom().nextInt(VALUES.length - 1)]; } diff --git a/src/main/java/com/minelittlepony/unicopia/item/GiantBalloonItem.java b/src/main/java/com/minelittlepony/unicopia/item/GiantBalloonItem.java new file mode 100644 index 00000000..80828311 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/item/GiantBalloonItem.java @@ -0,0 +1,27 @@ +package com.minelittlepony.unicopia.item; + +import java.util.Arrays; +import java.util.List; + +import com.minelittlepony.unicopia.entity.mob.AirBalloonEntity.BalloonDesign; +import com.minelittlepony.unicopia.item.component.BalloonDesignComponent; +import com.minelittlepony.unicopia.item.component.UDataComponentTypes; +import com.minelittlepony.unicopia.item.group.MultiItem; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class GiantBalloonItem extends Item implements MultiItem { + public GiantBalloonItem(Settings settings) { + super(settings); + } + + @Override + public List getDefaultStacks() { + return Arrays.stream(BalloonDesign.VALUES).map(design -> { + ItemStack stack = getDefaultStack(); + stack.set(UDataComponentTypes.BALLOON_DESIGN, new BalloonDesignComponent(design, true)); + return stack; + }).toList(); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/item/UItems.java index a5761146..474831ed 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItems.java @@ -8,6 +8,7 @@ import com.minelittlepony.unicopia.block.cloud.CloudBedBlock; import com.minelittlepony.unicopia.entity.mob.AirBalloonEntity; import com.minelittlepony.unicopia.entity.mob.UEntities; import com.minelittlepony.unicopia.item.cloud.CloudBedItem; +import com.minelittlepony.unicopia.item.component.BalloonDesignComponent; import com.minelittlepony.unicopia.item.component.BreaksIntoItemComponent; import com.minelittlepony.unicopia.item.component.UDataComponentTypes; import com.minelittlepony.unicopia.item.enchantment.UEnchantments; @@ -179,7 +180,7 @@ public interface UItems { Item BAMBOO_BASKET = register("bamboo_basket", new BasketItem(AirBalloonEntity.BasketType.of(BoatEntity.Type.BAMBOO), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); Item PALM_BASKET = register("palm_basket", new BasketItem(AirBalloonEntity.BasketType.of(UWoodTypes.PALM_BOAT_TYPE), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); - Item GIANT_BALLOON = register("giant_balloon", new Item(new Item.Settings().maxCount(1).component(UDataComponentTypes.BALLOON_DESIGN, AirBalloonEntity.BalloonDesign.NONE)), ItemGroups.TOOLS); + Item GIANT_BALLOON = register("giant_balloon", new GiantBalloonItem(new Item.Settings().maxCount(1).component(UDataComponentTypes.BALLOON_DESIGN, BalloonDesignComponent.DEFAULT)), ItemGroups.TOOLS); Item SPECTRAL_CLOCK = register("spectral_clock", new Item(new Item.Settings()), ItemGroups.TOOLS); Item WHITE_BED_SHEETS = register(CloudBedBlock.SheetPattern.WHITE); diff --git a/src/main/java/com/minelittlepony/unicopia/item/component/BalloonDesignComponent.java b/src/main/java/com/minelittlepony/unicopia/item/component/BalloonDesignComponent.java new file mode 100644 index 00000000..a189c425 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/item/component/BalloonDesignComponent.java @@ -0,0 +1,46 @@ +package com.minelittlepony.unicopia.item.component; + +import java.util.function.Consumer; + +import com.minelittlepony.unicopia.entity.mob.AirBalloonEntity; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; + +import io.netty.buffer.ByteBuf; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Item.TooltipContext; +import net.minecraft.item.tooltip.TooltipAppender; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public record BalloonDesignComponent(AirBalloonEntity.BalloonDesign design, boolean showInTooltip) implements TooltipAppender { + public static final BalloonDesignComponent DEFAULT = new BalloonDesignComponent(AirBalloonEntity.BalloonDesign.NONE, false); + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + AirBalloonEntity.BalloonDesign.CODEC.fieldOf("design").forGetter(BalloonDesignComponent::design), + Codec.BOOL.fieldOf("show_in_tooltip").forGetter(BalloonDesignComponent::showInTooltip) + ).apply(instance, BalloonDesignComponent::new)); + public static final PacketCodec PACKET_CODEC = PacketCodec.tuple( + AirBalloonEntity.BalloonDesign.PACKET_CODEC, BalloonDesignComponent::design, + PacketCodecs.BOOL, BalloonDesignComponent::showInTooltip, + BalloonDesignComponent::new + ); + + public static BalloonDesignComponent get(ItemStack stack) { + return stack.getOrDefault(UDataComponentTypes.BALLOON_DESIGN, DEFAULT); + } + + public static ItemStack set(ItemStack stack, BalloonDesignComponent variant) { + stack.set(UDataComponentTypes.BALLOON_DESIGN, variant); + return stack; + } + + @Override + public void appendTooltip(TooltipContext context, Consumer tooltip, TooltipType type) { + if (showInTooltip() && design != AirBalloonEntity.BalloonDesign.NONE) { + tooltip.accept(Text.literal(design().name()).formatted(Formatting.LIGHT_PURPLE)); + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/item/component/BufferflyVariantComponent.java b/src/main/java/com/minelittlepony/unicopia/item/component/BufferflyVariantComponent.java index 4de36ce5..91874ed1 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/component/BufferflyVariantComponent.java +++ b/src/main/java/com/minelittlepony/unicopia/item/component/BufferflyVariantComponent.java @@ -28,7 +28,6 @@ public record BufferflyVariantComponent (ButterflyEntity.Variant variant, boolea BufferflyVariantComponent::new ); - public static BufferflyVariantComponent get(ItemStack stack) { return stack.getOrDefault(UDataComponentTypes.BUTTERFLY_VARIANT, DEFAULT); } diff --git a/src/main/java/com/minelittlepony/unicopia/item/component/UDataComponentTypes.java b/src/main/java/com/minelittlepony/unicopia/item/component/UDataComponentTypes.java index 752c0dff..5dd990d1 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/component/UDataComponentTypes.java +++ b/src/main/java/com/minelittlepony/unicopia/item/component/UDataComponentTypes.java @@ -7,7 +7,6 @@ import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; import com.minelittlepony.unicopia.ability.magic.spell.trait.SpellTraits; import com.minelittlepony.unicopia.container.SpellbookState; import com.minelittlepony.unicopia.diet.DietProfile; -import com.minelittlepony.unicopia.entity.mob.AirBalloonEntity; import com.mojang.serialization.Codec; import net.minecraft.component.ComponentType; @@ -21,7 +20,7 @@ public interface UDataComponentTypes { ComponentType SPELLBOOK_STATE = register("spellbook_state", builder -> builder.codec(SpellbookState.CODEC).packetCodec(SpellbookState.PACKET_CODEC).cache()); ComponentType GLOWING = register("glowing", builder -> builder.codec(Codec.BOOL).packetCodec(PacketCodecs.BOOL)); ComponentType BUTTERFLY_VARIANT = register("butterfly_variant", builder -> builder.codec(BufferflyVariantComponent.CODEC).packetCodec(BufferflyVariantComponent.PACKET_CODEC)); - ComponentType BALLOON_DESIGN = register("balloon_design", builder -> builder.codec(AirBalloonEntity.BalloonDesign.CODEC).packetCodec(AirBalloonEntity.BalloonDesign.PACKET_CODEC)); + ComponentType BALLOON_DESIGN = register("balloon_design", builder -> builder.codec(BalloonDesignComponent.CODEC).packetCodec(BalloonDesignComponent.PACKET_CODEC)); ComponentType ISSUER = register("issuer", builder -> builder.codec(Issuer.CODEC).packetCodec(Issuer.PACKET_CODEC).cache()); ComponentType CHARGES = register("charges", builder -> builder.codec(Charges.CODEC).packetCodec(Charges.PACKET_CODEC)); ComponentType APPEARANCE = register("appearance", builder -> builder.codec(Appearance.CODEC).packetCodec(Appearance.PACKET_CODEC)); diff --git a/src/main/resources/assets/unicopia/textures/item/dawn_giant_balloon.png b/src/main/resources/assets/unicopia/textures/item/dawn_giant_balloon.png new file mode 100644 index 0000000000000000000000000000000000000000..33e0aacdf5d0aceb9bcb7cf420f6ac39650ef951 GIT binary patch literal 6759 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 JHYANJ{TF=e4wnD` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/item/equality_giant_balloon.png b/src/main/resources/assets/unicopia/textures/item/equality_giant_balloon.png new file mode 100644 index 0000000000000000000000000000000000000000..ec103662514bb7740b369f9f5ee281a044707a99 GIT binary patch literal 6620 zcmeHMc~nzZ8h;@`7J`DJrHB%vRzzQt_p*@W5RfHEY@;AlBXhdEBrhZtl8}V8qphe# zsjXG9DqU3EDiu3wwQ2{K3RCiJh^T+sd?t9<; zmf!t;-@W%G7v^P77#GTo;$j#Us?A871kW(k*uij*x!Fl!7(0yCYt3419L5G6crpSp zhR=`TCkHT?7!&j_LF)%H@3>?QBF*T01F6b zFvA(0jaUri8N~2hUMkQJUEgL~?Nd zEQ%#4j38$&T*V%ivU%TtNnf-Lml&KC9PYqJA|H(!@z}`NQE^h4JYJzxrKV}p$7N{8 zXXiXQd5V5&uF*uB^DNfqT<)UclG3vBS+nQ7R5^EE)uP4KOI}~PYNRWEt$$}j z-IlHIZ`=OCj-9(c+TYl8;NZuH4j()I<%yGDeSPZm_vc#9U%1$M>GGBK8#iy={;}iE z-JcLI#Ix)2GJAkmIPeMx3}gnf5HChR2_haI7&Md!?w6d!q6+&9$eHYjl!dD{@8b-U zOllioaDKrZI9&Suh;~HH!|XpJR`G|Jbrb91bsFO_88CUwa4ZSCd#@^XWx)SQ>sx23 zt->mRZQrFxitR=FX*YziQN#vKL}u_S5m{qnV!zNtU|GN47`LAS_kk$*aBWpAb3DpG zhNR8tcCjk9_C@Z$X^HQH8v})}hp~f@d%|JB;NHs8U^xh420{!63Hy!4{09QZAyLL; z@at0yH(oBNl)K;-hxCIXzeg-Ez@TflQ*R-oGm)LRR&Lry_r zta(rm#?@*_s`M>T1|dTU7#I&U)<)#`7HFC8z;HD9@qBqRzd(QBm8WaY6rKXnKgIoti`o2SKryQ=BVK0td<#n|FC1n^DOpl^7zJ0 zkt;86Up~IE>51Yee<;&n)7cc(LT;U})Q+!hxwETs!FwfHZ=bmP?TXdUd^(laHm{K| zFO#(Uc+(OI&$Zp@i~Fs>E=uO9?lLKDXR|JN0>ta{&24&?IO&YVt zl5}=o(hon4aE>}3H*=wpF~IWLQ%QGXez|t?@I+m?cAw(tujdpotH*vWJo=9EvyROz z(g|3n#Ig2+UzVuEKWoeD*J@sU@u=KUc;;BOy4lH!EGJFb#Uqk*LsziQetzkVEqj~s zF#XN)Y1dkAF*35J92(Tz92Pk`^T+bal8)^iKVDyMej#b@3(ohBUtGH!!}|Qinxl8? zbx){__5vYgvKwe&X@SG@-IkD4>Y$9%XgA+L=UHuP!SxUK2>4c$S};YX6YCtQw8ffH z?xeHJC*&B*rx}$dK~f?&p;QF`1+<¨ovPT&hyFz=Nv-8L34AzQ@HqO)b#F@32(6 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 F{U