3131import com .mojang .serialization .codecs .PrimitiveCodec ;
3232import io .netty .util .AttributeKey ;
3333import net .kyori .adventure .audience .Audience ;
34- import net .kyori .adventure .audience .ForwardingAudience ;
3534import net .kyori .adventure .bossbar .BossBar ;
3635import net .kyori .adventure .key .Key ;
3736import net .kyori .adventure .serializer .configurate4 .ConfigurateComponentSerializer ;
9998import net .minecraft .world .item .ItemStack ;
10099import org .checkerframework .checker .nullness .qual .NonNull ;
101100import org .checkerframework .checker .nullness .qual .Nullable ;
101+ import org .jetbrains .annotations .NotNull ;
102102import org .spongepowered .api .adventure .ResolveOperation ;
103103import org .spongepowered .api .adventure .SpongeComponents ;
104104import org .spongepowered .api .command .CommandCause ;
105- import org .spongepowered .api .entity .Entity ;
106105import org .spongepowered .api .entity .living .player .server .ServerPlayer ;
107106import org .spongepowered .api .registry .DefaultedRegistryReference ;
108107import org .spongepowered .api .util .Tristate ;
@@ -168,16 +167,31 @@ public String toString() {
168167 }
169168 };
170169
171- public static final ComponentRenderer <SpongeRendererContext > SPONGE_COMPONENT_RENDERER = new TranslatableComponentRenderer < >() {
170+ public static final ComponentRenderer <SpongeRendererContext > SPONGE_VIRTUAL_COMPONENT_RENDERER = new ComponentRenderer < SpongeRendererContext >() {
172171
173172 @ Override
174- protected @ NonNull Component renderVirtual (final @ NonNull VirtualComponent component , final @ NonNull SpongeRendererContext context ) {
173+ public @ NotNull Component render (final @ NotNull Component component , final @ NotNull SpongeRendererContext context ) {
174+ if (component instanceof final VirtualComponent virtualComponent ) {
175+ return this .renderVirtual (virtualComponent , context );
176+ }
177+ return component ;
178+ }
179+
180+ public @ NonNull Component renderVirtual (final @ NonNull VirtualComponent component , final @ NonNull SpongeRendererContext context ) {
175181 context .markContainsVirtualComponents ();
176182 if (component .renderer () instanceof final AudienceVirtualComponentRenderer audienceVirtualComponentRenderer
177183 && context .audience () != null ) {
178184 return audienceVirtualComponentRenderer .apply (context .audience ()).asComponent ();
179185 }
180- return super .renderVirtual (component , context );
186+ return component ;
187+ }
188+ };
189+
190+ public static final ComponentRenderer <SpongeRendererContext > SPONGE_COMPONENT_RENDERER = new TranslatableComponentRenderer <>() {
191+
192+ @ Override
193+ protected @ NonNull Component renderVirtual (final @ NonNull VirtualComponent component , final @ NonNull SpongeRendererContext context ) {
194+ return SpongeAdventure .SPONGE_VIRTUAL_COMPONENT_RENDERER .render (component , context );
181195 }
182196
183197 @ Override
@@ -831,29 +845,18 @@ public static class Factory implements SpongeComponents.Factory {
831845 public final @ NonNull Component render (
832846 final @ NonNull Component component ,
833847 final @ NonNull CommandCause senderContext ,
834- @ Nullable Audience viewer ,
848+ final @ NonNull Audience viewer ,
835849 final @ NonNull DefaultedRegistryReference <ResolveOperation > firstOperation ,
836850 final @ NonNull DefaultedRegistryReference <ResolveOperation > @ NonNull ... otherOperations
837851 ) {
838852 Component output = Objects .requireNonNull (component , "component" );
839853 Objects .requireNonNull (senderContext , "senderContext" );
840854
841- // Unwrap the Audience to an entity
842- while (viewer instanceof ForwardingAudience .Single single && !(viewer instanceof Entity )) {
843- viewer = single .audience ();
844- }
845- final @ Nullable Entity backing ;
846- if (viewer instanceof Entity entity ) {
847- backing = entity ;
848- } else {
849- backing = null ;
850- }
851-
852855 output = ((SpongeResolveOperation ) Objects .requireNonNull (firstOperation , "firstOperation" ).get ())
853- .resolve (output , senderContext , backing );
856+ .resolve (output , senderContext , viewer );
854857
855858 for (final DefaultedRegistryReference <ResolveOperation > ref : otherOperations ) {
856- output = ((SpongeResolveOperation ) ref .get ()).resolve (output , senderContext , backing );
859+ output = ((SpongeResolveOperation ) ref .get ()).resolve (output , senderContext , viewer );
857860 }
858861 return output ;
859862 }
@@ -875,8 +878,8 @@ public ComponentFlattener flattener() {
875878 }
876879
877880 @ Override
878- public VirtualComponent receiverVirtualComponent (final @ NonNull Function <Audience , ComponentLike > apply ) {
879- return Component .virtual (Audience .class , new AudienceVirtualComponentRenderer (apply ));
881+ public VirtualComponent receiverVirtualComponent (final @ NonNull Function <Audience , ComponentLike > apply , final @ NonNull String fallbackValue ) {
882+ return Component .virtual (Audience .class , new AudienceVirtualComponentRenderer (apply , fallbackValue ));
880883 }
881884 }
882885
0 commit comments