Skip to content

Commit bf6f817

Browse files
committed
Merge branch 'api-14' into api-14-consume-effects
2 parents 99e8e69 + 8691a3f commit bf6f817

5 files changed

Lines changed: 62 additions & 24 deletions

File tree

src/main/java/org/spongepowered/common/adventure/AudienceVirtualComponentRenderer.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,20 @@
3434
public final class AudienceVirtualComponentRenderer implements VirtualComponentRenderer<Audience> {
3535

3636
private final Function<Audience, ComponentLike> apply;
37+
private final String fallbackString;
3738

38-
AudienceVirtualComponentRenderer(final Function<Audience, ComponentLike> apply) {
39+
AudienceVirtualComponentRenderer(final Function<Audience, ComponentLike> apply, final String fallbackString) {
3940
this.apply = apply;
41+
this.fallbackString = fallbackString;
4042
}
4143

4244
@Override
4345
public @NonNull ComponentLike apply(final @NonNull Audience context) {
4446
return this.apply.apply(context);
4547
}
48+
49+
@Override
50+
public @NonNull String fallbackString() {
51+
return this.fallbackString;
52+
}
4653
}

src/main/java/org/spongepowered/common/adventure/SpongeAdventure.java

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import com.mojang.serialization.codecs.PrimitiveCodec;
3232
import io.netty.util.AttributeKey;
3333
import net.kyori.adventure.audience.Audience;
34-
import net.kyori.adventure.audience.ForwardingAudience;
3534
import net.kyori.adventure.bossbar.BossBar;
3635
import net.kyori.adventure.key.Key;
3736
import net.kyori.adventure.serializer.configurate4.ConfigurateComponentSerializer;
@@ -99,10 +98,10 @@
9998
import net.minecraft.world.item.ItemStack;
10099
import org.checkerframework.checker.nullness.qual.NonNull;
101100
import org.checkerframework.checker.nullness.qual.Nullable;
101+
import org.jetbrains.annotations.NotNull;
102102
import org.spongepowered.api.adventure.ResolveOperation;
103103
import org.spongepowered.api.adventure.SpongeComponents;
104104
import org.spongepowered.api.command.CommandCause;
105-
import org.spongepowered.api.entity.Entity;
106105
import org.spongepowered.api.entity.living.player.server.ServerPlayer;
107106
import org.spongepowered.api.registry.DefaultedRegistryReference;
108107
import 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

src/main/java/org/spongepowered/common/adventure/SpongeResolveOperation.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@
2525
package org.spongepowered.common.adventure;
2626

2727
import com.mojang.brigadier.exceptions.CommandSyntaxException;
28+
import net.kyori.adventure.audience.Audience;
29+
import net.kyori.adventure.audience.ForwardingAudience;
2830
import net.kyori.adventure.text.Component;
2931
import net.kyori.adventure.translation.GlobalTranslator;
3032
import net.minecraft.commands.CommandSourceStack;
3133
import net.minecraft.network.chat.ComponentUtils;
34+
import org.apache.commons.lang3.NotImplementedException;
3235
import org.apache.logging.log4j.LogManager;
3336
import org.apache.logging.log4j.Logger;
3437
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -44,7 +47,23 @@ public abstract class SpongeResolveOperation implements ResolveOperation {
4447

4548
private static final Logger LOGGER = LogManager.getLogger();
4649

47-
public abstract Component resolve(final Component input, final CommandCause senderContext, final @Nullable Entity viewer);
50+
public Component resolve(final Component input, final CommandCause senderContext, Audience viewer) {
51+
// Unwrap the Audience to an entity
52+
while (viewer instanceof ForwardingAudience.Single single && !(viewer instanceof Entity)) {
53+
viewer = single.audience();
54+
}
55+
final @Nullable Entity backing;
56+
if (viewer instanceof Entity entity) {
57+
backing = entity;
58+
} else {
59+
backing = null;
60+
}
61+
return this.resolve(input, senderContext, backing);
62+
}
63+
64+
public Component resolve(final Component input, final CommandCause senderContext, final @Nullable Entity viewer) {
65+
throw new NotImplementedException();
66+
}
4867

4968
public static SpongeResolveOperation newCustomTranslations() {
5069
return new SpongeResolveOperation() {
@@ -76,4 +95,12 @@ public Component resolve(final Component input, final CommandCause senderContext
7695
};
7796
}
7897

98+
public static SpongeResolveOperation newVirtualComponents() {
99+
return new SpongeResolveOperation() {
100+
@Override
101+
public Component resolve(final Component input, final CommandCause senderContext, final Audience viewer) {
102+
return SpongeAdventure.SPONGE_VIRTUAL_COMPONENT_RENDERER.render(input, new SpongeRendererContext(null, viewer));
103+
}
104+
};
105+
}
79106
}

src/main/java/org/spongepowered/common/registry/loader/SpongeRegistryLoader.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,7 @@ public static RegistryLoader<ResolveOperation> resolveOperation() {
410410
return RegistryLoader.of(l -> {
411411
l.add(ResolveOperations.CONTEXTUAL_COMPONENTS, SpongeResolveOperation::newContextualComponents);
412412
l.add(ResolveOperations.CUSTOM_TRANSLATIONS, SpongeResolveOperation::newCustomTranslations);
413+
l.add(ResolveOperations.VIRTUAL_COMPONENTS, SpongeResolveOperation::newVirtualComponents);
413414
});
414415
}
415416

0 commit comments

Comments
 (0)