diff --git a/SpongeAPI b/SpongeAPI index 6cf92a59ebc..992ef50c171 160000 --- a/SpongeAPI +++ b/SpongeAPI @@ -1 +1 @@ -Subproject commit 6cf92a59ebcafcd3c85e0f61257ef0b1f2a55439 +Subproject commit 992ef50c171183070bede2d234379052613d830e diff --git a/build.gradle.kts b/build.gradle.kts index 9ab0e0932e4..fc34ea877e7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -112,7 +112,12 @@ val mixins by sourceSets.registering { configure {} repositories { + mavenLocal() maven("https://files.minecraftforge.net/maven") + maven { + name = "Sonatype Snapshots" + setUrl("https://oss.sonatype.org/content/repositories/snapshots/") + } } dependencies { minecraft("net.minecraft:$minecraftDep:$minecraftVersion") @@ -121,6 +126,10 @@ dependencies { api(project(":SpongeAPI")) api("org.spongepowered:plugin-spi:0.1.1-SNAPSHOT") + api("net.kyori:adventure-api:4.0.0-SNAPSHOT") + api("net.kyori:adventure-text-serializer-gson:4.0.0-SNAPSHOT") + api("net.kyori:adventure-text-serializer-legacy:4.0.0-SNAPSHOT") + // Database stuffs... likely needs to be looked at implementation("com.zaxxer:HikariCP:2.6.3") implementation("org.mariadb.jdbc:mariadb-java-client:2.0.3") @@ -219,6 +228,10 @@ allprojects { setUrl("https://repo-new.spongepowered.org/repository/maven-public/") } maven("https://repo.spongepowered.org/maven") + maven { + name = "Sonatype Snapshots" + setUrl("https://oss.sonatype.org/content/repositories/snapshots/") + } } val spongeSnapshotRepo: String? by project val spongeReleaseRepo: String? by project diff --git a/invalid/main/java/org/spongepowered/common/data/DataRegistrar.java b/invalid/main/java/org/spongepowered/common/data/DataRegistrar.java index 6493dbd54e8..a0d38f32384 100644 --- a/invalid/main/java/org/spongepowered/common/data/DataRegistrar.java +++ b/invalid/main/java/org/spongepowered/common/data/DataRegistrar.java @@ -40,7 +40,6 @@ import org.spongepowered.api.item.inventory.ItemStackSnapshot; import org.spongepowered.api.item.merchant.TradeOffer; import org.spongepowered.api.profile.GameProfile; -import org.spongepowered.api.text.BookView; import org.spongepowered.api.text.Text; import org.spongepowered.api.util.Color; import org.spongepowered.api.util.weighted.VariableAmount; @@ -137,7 +136,6 @@ public static void setupSerialization() { // Text stuff dataManager.registerBuilder(Text.class, new TextConfigSerializer()); - dataManager.registerBuilder(BookView.class, new BookViewDataBuilder()); dataManager.registerBuilder(FluidStackSnapshot.class, new SpongeFluidStackSnapshotBuilder()); // Effects stuff diff --git a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/ScoreTextComponentMixin.java b/invalid/main/java/org/spongepowered/common/mixin/core/util/text/ScoreTextComponentMixin.java deleted file mode 100644 index c358e41b989..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/ScoreTextComponentMixin.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.core.util.text; - -import org.spongepowered.api.Sponge; -import org.spongepowered.api.scoreboard.Score; -import org.spongepowered.api.scoreboard.objective.Objective; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.TextSerializers; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.Optional; -import net.minecraft.util.text.ScoreTextComponent; - -@Mixin(ScoreTextComponent.class) -public abstract class ScoreTextComponentMixin extends TextComponentMixin { - - @Shadow @Final private String objective; - @Shadow @Final private String name; - - @SuppressWarnings("deprecation") - @Override - protected Text.Builder impl$createBuilder() { - if (Sponge.isServerAvailable()) { - final Optional objective = Sponge.getServer().getServerScoreboard().get().getObjective(this.objective); - if (objective.isPresent()) { - final Optional score = objective.get().getScore(TextSerializers.LEGACY_FORMATTING_CODE.get().deserialize(this.name)); - if (score.isPresent()) { - return Text.builder(score.get()); - } - } - } - return Text.builder(); - } - -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/SelectorTextComponentMixin.java b/invalid/main/java/org/spongepowered/common/mixin/core/util/text/SelectorTextComponentMixin.java deleted file mode 100644 index 12b23a7074a..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/SelectorTextComponentMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.core.util.text; - -import net.minecraft.util.text.SelectorTextComponent; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.selector.Selector; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(SelectorTextComponent.class) -public abstract class SelectorTextComponentMixin extends TextComponentMixin { - - @Shadow @Final private String selector; - - @Override - protected Text.Builder impl$createBuilder() { - return Text.builder(Selector.parse(this.selector)); - } - -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/StringTextComponentMixin.java b/invalid/main/java/org/spongepowered/common/mixin/core/util/text/StringTextComponentMixin.java deleted file mode 100644 index 9fbed2f2ca6..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/StringTextComponentMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.core.util.text; - -import net.minecraft.util.text.StringTextComponent; -import org.spongepowered.api.text.Text; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(StringTextComponent.class) -public abstract class StringTextComponentMixin extends TextComponentMixin { - - @Shadow @Final private String text; - - @Override - protected Text.Builder impl$createBuilder() { - return Text.builder(this.text); - } - -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/TextComponentMixin.java b/invalid/main/java/org/spongepowered/common/mixin/core/util/text/TextComponentMixin.java deleted file mode 100644 index 0de60f07d31..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/TextComponentMixin.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.core.util.text; - -import static net.minecraft.util.text.TextFormatting.BOLD; -import static net.minecraft.util.text.TextFormatting.ITALIC; -import static net.minecraft.util.text.TextFormatting.OBFUSCATED; -import static net.minecraft.util.text.TextFormatting.RESET; -import static net.minecraft.util.text.TextFormatting.STRIKETHROUGH; -import static net.minecraft.util.text.TextFormatting.UNDERLINE; -import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; -import static org.spongepowered.common.text.SpongeTexts.COLOR_CHAR; - -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.Style; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TextFormatting; -import org.spongepowered.api.text.Text; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.bridge.util.text.TextComponentBridge; -import org.spongepowered.common.text.ResolvedChatStyle; -import org.spongepowered.common.text.TextComponentIterable; - -import java.util.Iterator; -import java.util.List; - -@Mixin(TextComponent.class) -public abstract class TextComponentMixin implements TextComponentBridge, ITextComponent { - - @Shadow private Style style; - @Shadow protected List siblings; - - protected Text.Builder impl$createBuilder() { - throw new UnsupportedOperationException(); - } - - @Override - public Iterator bridge$childrenIterator() { - return this.getSiblings().iterator(); - } - - @Override - public Iterable bridge$withChildren() { - return new TextComponentIterable(this, true); - } - - @Override - public String bridge$toPlain() { - final StringBuilder builder = new StringBuilder(); - - for (final ITextComponent component : this.bridge$withChildren()) { - builder.append(component.getUnformattedComponentText()); - } - - return builder.toString(); - } - - private StringBuilder getLegacyFormattingBuilder() { - final StringBuilder builder = new StringBuilder(); - - final Style style = this.getStyle(); - apply(builder, COLOR_CHAR, defaultIfNull(style.getColor(), RESET)); - apply(builder, COLOR_CHAR, BOLD, style.getBold()); - apply(builder, COLOR_CHAR, ITALIC, style.getItalic()); - apply(builder, COLOR_CHAR, UNDERLINE, style.getUnderlined()); - apply(builder, COLOR_CHAR, STRIKETHROUGH, style.getStrikethrough()); - apply(builder, COLOR_CHAR, OBFUSCATED, style.getObfuscated()); - - return builder; - } - - @Override - public String bridge$getLegacyFormatting() { - return this.getLegacyFormattingBuilder().toString(); - } - - @Override - public String bridge$toLegacy(final char code) { - final StringBuilder builder = new StringBuilder(); - - ResolvedChatStyle current = null; - Style previous = null; - - for (final ITextComponent component : this.bridge$withChildren()) { - final Style newStyle = component.getStyle(); - final ResolvedChatStyle style = resolve(current, previous, newStyle); - previous = newStyle; - - if (current == null - || (current.color != style.color) - || (current.bold && !style.bold) - || (current.italic && !style.italic) - || (current.underlined && !style.underlined) - || (current.strikethrough && !style.strikethrough) - || (current.obfuscated && !style.obfuscated)) { - - if (style.color != null) { - apply(builder, code, style.color); - } else if (current != null) { - apply(builder, code, RESET); - } - - apply(builder, code, BOLD, style.bold); - apply(builder, code, ITALIC, style.italic); - apply(builder, code, UNDERLINE, style.underlined); - apply(builder, code, STRIKETHROUGH, style.strikethrough); - apply(builder, code, OBFUSCATED, style.obfuscated); - } else { - apply(builder, code, BOLD, current.bold != style.bold); - apply(builder, code, ITALIC, current.italic != style.italic); - apply(builder, code, UNDERLINE, current.underlined != style.underlined); - apply(builder, code, STRIKETHROUGH, current.strikethrough != style.strikethrough); - apply(builder, code, OBFUSCATED, current.obfuscated != style.obfuscated); - } - - current = style; - builder.append(component.getUnformattedComponentText()); - } - - return builder.toString(); - } - - @Override - public String bridge$toLegacySingle(final char code) { - return this.getLegacyFormattingBuilder() - .append(this.getUnformattedComponentText()) - .toString(); - } - - private static ResolvedChatStyle resolve(final ResolvedChatStyle current, final Style previous, final Style style) { - throw new UnsupportedOperationException("implement me"); - } - - private static boolean firstNonNull(final Boolean b1, final boolean b2) { - return b1 != null ? b1 : b2; - } - - @SuppressWarnings("ConstantConditions") - private static void apply(final StringBuilder builder, final char code, final TextFormatting formatting) { - throw new UnsupportedOperationException("implement me"); - } - - private static void apply(final StringBuilder builder, final char code, final TextFormatting formatting, final boolean state) { - if (state) { - apply(builder, code, formatting); - } - } - -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/TranslationTextComponentMixin.java b/invalid/main/java/org/spongepowered/common/mixin/core/util/text/TranslationTextComponentMixin.java deleted file mode 100644 index 6308fcb23eb..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/TranslationTextComponentMixin.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.core.util.text; - -import com.google.common.collect.Iterators; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TranslationTextComponent; -import org.spongepowered.api.text.Text; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.bridge.util.text.TextComponentBridge; -import org.spongepowered.common.text.TextComponentIterable; -import org.spongepowered.common.text.translation.SpongeTranslation; - -import java.util.Iterator; -import java.util.List; - -@Mixin(TranslationTextComponent.class) -public abstract class TranslationTextComponentMixin extends TextComponentMixin { - - @Shadow @Final private String key; - @Shadow @Final private Object[] formatArgs; - @Shadow List children; - - @Shadow abstract void ensureInitialized(); - - @Override - protected Text.Builder impl$createBuilder() { - return Text.builder(new SpongeTranslation(this.key), wrapFormatArgs(this.formatArgs)); - } - - @Override - public Iterator bridge$childrenIterator() { - this.ensureInitialized(); - return Iterators.concat(this.children.iterator(), super.bridge$childrenIterator()); - } - - @Override - public Iterable bridge$withChildren() { - return new TextComponentIterable(this, false); - } - - private static Object[] wrapFormatArgs(final Object... formatArgs) { - final Object[] ret = new Object[formatArgs.length]; - for (int i = 0; i < formatArgs.length; ++i) { - if (formatArgs[i] instanceof TextComponentBridge) { - ret[i] = ((TextComponentBridge) formatArgs[i]).bridge$toText(); - } else { - ret[i] = formatArgs[i]; - } - } - return ret; - } - -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/event/ClickEventMixin.java b/invalid/main/java/org/spongepowered/common/mixin/core/util/text/event/ClickEventMixin.java deleted file mode 100644 index b86f66d0bcb..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/event/ClickEventMixin.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.core.util.text.event; - -import static com.google.common.base.Preconditions.checkNotNull; - -import net.minecraft.util.text.event.ClickEvent; -import org.spongepowered.api.text.action.ClickAction; -import org.spongepowered.api.text.action.TextActions; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.bridge.util.text.event.ClickEventBridge; -import org.spongepowered.common.text.action.SpongeCallbackHolder; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.UUID; - -@Mixin(ClickEvent.class) -public abstract class ClickEventMixin implements ClickEventBridge { - - @Shadow @Final private ClickEvent.Action action; - @Shadow @Final private String value; - - private ClickAction handle; - private volatile boolean initialized; - - @Override - public ClickAction bridge$getHandle() { - if (!this.initialized) { - try { - switch (this.action) { - case OPEN_URL: - try { - this.bridge$setHandle(TextActions.openUrl(new URL(this.value))); - } catch (MalformedURLException e) { - SpongeCommon.getLogger().debug("Tried to parse invalid URL \"{}\": {}", this.value, e.getMessage()); - } - break; - case RUN_COMMAND: - if (this.value.startsWith(SpongeCallbackHolder.CALLBACK_COMMAND_QUALIFIED)) { - try { - UUID callbackId = UUID.fromString(this.value.substring(SpongeCallbackHolder.CALLBACK_COMMAND_QUALIFIED.length() + 1)); -// Optional> callback = SpongeCallbackHolder.getInstance().getCallbackForUUID(callbackId); -// if (callback.isPresent()) { -// this.bridge$setHandle(TextActions.executeCallback(callback.get())); -// break; -// } - } catch (IllegalArgumentException ex) { - } - } - this.bridge$setHandle(TextActions.runCommand(this.value)); - break; - case SUGGEST_COMMAND: - this.bridge$setHandle(TextActions.suggestCommand(this.value)); - break; - case CHANGE_PAGE: - this.bridge$setHandle(TextActions.changePage(Integer.parseInt(this.value))); - break; - default: - } - } finally { - this.initialized = true; - } - } - throw new UnsupportedOperationException("Implement me properly"); - return this.handle; - } - - @Override - public void bridge$setHandle(ClickAction handle) { - if (this.initialized) { - return; - } - - this.handle = checkNotNull(handle, "handle"); - this.initialized = true; - } - -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/event/HoverEventMixin.java b/invalid/main/java/org/spongepowered/common/mixin/core/util/text/event/HoverEventMixin.java deleted file mode 100644 index 5322d028c89..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/event/HoverEventMixin.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.core.util.text.event; - -import static com.google.common.base.Preconditions.checkNotNull; - -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.JsonToNBT; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.event.HoverEvent; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.entity.EntityType; -import org.spongepowered.api.text.action.HoverAction; -import org.spongepowered.api.text.action.TextActions; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.bridge.util.text.TextComponentBridge; -import org.spongepowered.common.bridge.util.text.event.HoverEventBridge; -import org.spongepowered.common.item.util.ItemStackUtil; -import org.spongepowered.common.util.Constants; - -import java.util.UUID; - -@Mixin(HoverEvent.class) -public abstract class HoverEventMixin implements HoverEventBridge { - - @Shadow @Final private HoverEvent.Action action; - @Shadow @Final private ITextComponent value; - - private HoverAction handle; - private boolean initialized; - - @Override - public HoverAction bridge$getHandle() { - if (!this.initialized) { - try { - // This is inefficient, but at least we only need to do it once - switch (this.action) { - case SHOW_TEXT: - this.bridge$setHandle(TextActions.showText(((TextComponentBridge) this.value).bridge$toText())); - break; - case SHOW_ITEM: - this.bridge$setHandle(TextActions.showItem(ItemStackUtil.snapshotOf(net.minecraft.item.ItemStack.read(this.loadNbt())))); - break; - case SHOW_ENTITY: - CompoundNBT nbt = this.loadNbt(); - String name = nbt.getString("name"); - EntityType type = null; - if (nbt.contains("type", Constants.NBT.TAG_STRING)) { - type = SpongeCommon.getGame().getRegistry().getCatalogRegistry().get(EntityType.class, - ResourceKey.resolve(name)).orElse(null); - } - - UUID uniqueId = UUID.fromString(nbt.getString("id")); - this.bridge$setHandle(TextActions.showEntity(uniqueId, name, type)); - break; - default: - } - } finally { - this.initialized = true; - } - } - - return this.handle; - } - - private CompoundNBT loadNbt() { - try { - return checkNotNull(JsonToNBT.getTagFromJson(this.value.getUnformattedComponentText()), "NBT"); - } catch (CommandSyntaxException e) { - throw new RuntimeException(e); - } - } - - @Override - public void bridge$setHandle(HoverAction handle) { - if (this.initialized) { - return; - } - - this.handle = checkNotNull(handle, "handle"); - this.initialized = true; - } - -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/ScoreTextMixin.java b/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/ScoreTextMixin.java deleted file mode 100644 index c12878dbfb0..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/ScoreTextMixin.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.invalid.core.api.text; - -import net.minecraft.command.ICommandSender; -import net.minecraft.util.text.ScoreTextComponent; -import net.minecraft.util.text.TextComponent; -import org.spongepowered.api.Sponge; -import org.spongepowered.api.scoreboard.Score; -import org.spongepowered.api.text.ScoreText; -import org.spongepowered.api.text.serializer.TextSerializers; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.Optional; - -@Mixin(value = ScoreText.class, remap = false) -public abstract class ScoreTextMixin extends TextMixin { - - @Shadow @Final Score score; - @Shadow @Final Optional override; - - @Shadow public abstract Score getScore(); - - @SuppressWarnings("deprecation") - @Override - protected TextComponent createComponent() { - ScoreTextComponent textComponentScore; - String name = TextSerializers.LEGACY_FORMATTING_CODE.serialize(this.score.getName()); - if (this.score.getObjectives().isEmpty()) { - textComponentScore = new ScoreTextComponent(name, ""); - } else { - textComponentScore = new ScoreTextComponent(name, this.score.getObjectives().iterator().next().getName()); - if (Sponge.isServerAvailable()) { - textComponentScore.resolve((ICommandSender) Sponge.getServer()); - } - } - this.override.ifPresent(textComponentScore::setValue); - return textComponentScore; - } -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/SelectorTextMixin.java b/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/SelectorTextMixin.java deleted file mode 100644 index 08415c23cfe..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/SelectorTextMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.invalid.core.api.text; - -import net.minecraft.util.text.SelectorTextComponent; -import net.minecraft.util.text.TextComponent; -import org.spongepowered.api.text.SelectorText; -import org.spongepowered.api.text.selector.Selector; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = SelectorText.class, remap = false) -public abstract class SelectorTextMixin extends TextMixin { - - @Shadow @Final Selector selector; - - @Override - protected TextComponent createComponent() { - return new SelectorTextComponent(this.selector.toPlain()); - } -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/TextMixin.java b/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/TextMixin.java deleted file mode 100644 index 8cb6e070a37..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/TextMixin.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.invalid.core.api.text; - -import com.google.common.collect.ImmutableList; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.Style; -import net.minecraft.util.text.TextComponent; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.action.ClickAction; -import org.spongepowered.api.text.action.HoverAction; -import org.spongepowered.api.text.action.ShiftClickAction; -import org.spongepowered.api.text.format.TextColors; -import org.spongepowered.api.text.format.TextFormat; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.bridge.util.text.TextComponentBridge; -import org.spongepowered.common.bridge.api.text.TextBridge; -import org.spongepowered.common.text.action.SpongeClickAction; -import org.spongepowered.common.text.action.SpongeHoverAction; - -import java.util.Optional; - -@SuppressWarnings("OptionalUsedAsFieldOrParameterType") -@Mixin(value = Text.class, remap = false) -public abstract class TextMixin implements TextBridge { - - @Shadow @Final TextFormat format; - @Shadow @Final ImmutableList children; - @Shadow @Final Optional> clickAction; - @Shadow @Final Optional> hoverAction; - @Shadow @Final Optional> shiftClickAction; - - private ITextComponent component; - private String json; - - protected TextComponent createComponent() { - throw new UnsupportedOperationException(); - } - - private ITextComponent initializeComponent() { - if (this.component == null) { - this.component = this.createComponent(); - Style style = this.component.getStyle(); - - if (this.format.getColor() != TextColors.NONE) { - style.setColor(((SpongeTextColor) this.format.getColor()).getHandle()); - } - - if (!this.format.getStyle().isEmpty()) { - style.setBold(this.format.getStyle().hasBold().orElse(null)); - style.setItalic(this.format.getStyle().hasItalic().orElse(null)); - style.setUnderlined(this.format.getStyle().hasUnderline().orElse(null)); - style.setStrikethrough(this.format.getStyle().hasStrikethrough().orElse(null)); - style.setObfuscated(this.format.getStyle().hasObfuscated().orElse(null)); - } - - if (this.clickAction.isPresent()) { - style.setClickEvent(SpongeClickAction.getHandle(this.clickAction.get())); - } - - if (this.hoverAction.isPresent()) { - style.setHoverEvent(SpongeHoverAction.getHandle(this.hoverAction.get())); - } - - if (this.shiftClickAction.isPresent()) { - ShiftClickAction.InsertText insertion = (ShiftClickAction.InsertText) this.shiftClickAction.get(); - style.setInsertion(insertion.getResult()); - } - - for (Text child : this.children) { - this.component.appendSibling(((TextBridge) child).bridge$toComponent()); - } - } - - return this.component; - } - - private ITextComponent getHandle() { - return this.initializeComponent(); - } - - @Override - public ITextComponent bridge$toComponent() { - return this.getHandle().shallowCopy(); // Mutable instances are not nice :( - } - - /** - * @author gabizou - June 30th, 2019 - 1.12.2 - * @reason After splitting mixins and providing bridges with proper prefixes, - * we find that the previous legacy bridge was soft overwriting the API - * method {@link Text#toPlain()}.... this now properly overwrites... - * - * @return The plain component text - */ - @Overwrite - public final String toPlain() { - return ((TextComponentBridge) this.getHandle()).bridge$toPlain(); - } - - /** - * @author gabizou - June 30th, 2019 - 1.12.2 - * @reason After splitting mixins and providing bridges with proper prefixes, - * we find that the previous legacy bridge was soft overwriting the API - * method {@link Text#toPlainSingle()}.... this now properly overwrites... - * - * @return The plain unformatted component text - */ - @Overwrite - public final String toPlainSingle() { - return this.getHandle().getUnformattedComponentText(); - } - - @Override - public String bridge$toJson() { - if (this.json == null) { - this.json = ITextComponent.Serializer.toJson(this.getHandle()); - } - - return this.json; - } - - @Override - public String bridge$toLegacy(char code) { - return ((TextComponentBridge) this.getHandle()).bridge$toLegacy(code); - } -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/TranslatableTextMixin.java b/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/TranslatableTextMixin.java deleted file mode 100644 index e3e90576357..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/TranslatableTextMixin.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.invalid.core.api.text; - -import com.google.common.collect.ImmutableList; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TranslationTextComponent; -import org.spongepowered.api.text.TranslatableText; -import org.spongepowered.api.text.translation.Translation; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.bridge.api.text.TextBridge; - -@Mixin(value = TranslatableText.class, remap = false) -public abstract class TranslatableTextMixin extends TextMixin { - - @Shadow @Final Translation translation; - @Shadow @Final ImmutableList arguments; - - @Override - protected TextComponent createComponent() { - return new TranslationTextComponent(this.translation.getId(), this.unwrapArguments(this.arguments)); - } - - private Object[] unwrapArguments(final ImmutableList args) { - final Object[] result = new Object[args.size()]; - for (int i = 0; i < args.size(); i++) { - final Object arg = args.get(i); - if (arg instanceof TextBridge) { - result[i] = ((TextBridge) arg).bridge$toComponent(); - } else { - result[i] = arg; - } - } - return result; - } - -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/title/TitleMixin.java b/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/title/TitleMixin.java deleted file mode 100644 index 5bd89caeebc..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/title/TitleMixin.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.invalid.core.api.text.title; - -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.title.Title; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.bridge.api.text.TextBridge; -import org.spongepowered.common.bridge.api.text.title.TitleBridge; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.network.play.server.STitlePacket; - -@Mixin(value = Title.class, remap = false) -public abstract class TitleMixin implements TitleBridge { - - @Shadow @Final Optional title; - @Shadow @Final Optional subtitle; - @Shadow @Final Optional actionBar; - @Shadow @Final Optional fadeIn; - @Shadow @Final Optional stay; - @Shadow @Final Optional fadeOut; - @Shadow @Final boolean clear; - @Shadow @Final boolean reset; - - private List packets; - - @Override - public void bridge$send(ServerPlayerEntity player) { - for (STitlePacket packet : this.getPackets()) { - player.connection.sendPacket(packet); - } - } - - private List getPackets() { - if (this.packets == null) { - this.packets = new ArrayList<>(); - if (this.clear) { - this.packets.add(new STitlePacket(STitlePacket.Type.RESET, null)); // SPacketTitle.Type.RESET is actually CLEAR - } - if (this.reset) { - this.packets.add(new STitlePacket(STitlePacket.Type.RESET, null)); - } - if (this.fadeIn.isPresent() || this.stay.isPresent() || this.fadeOut.isPresent()) { - this.packets.add(new STitlePacket(this.fadeIn.orElse(20), this.stay.orElse(60), this.fadeOut.orElse(20))); - } - if (this.subtitle.isPresent()) { - this.packets.add(new STitlePacket(STitlePacket.Type.SUBTITLE, ((TextBridge) this.subtitle.get()).bridge$toComponent())); - } - if (this.actionBar.isPresent()) { - this.packets.add(new STitlePacket(STitlePacket.Type.ACTIONBAR, ((TextBridge) this.actionBar.get()).bridge$toComponent())); - } - if (this.title.isPresent()) { - this.packets.add(new STitlePacket(STitlePacket.Type.TITLE, ((TextBridge) this.title.get()).bridge$toComponent())); - } - } - - return this.packets; - } -} diff --git a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/entity/player/ServerPlayerEntityMixin.java b/invalid/main/java/org/spongepowered/common/mixin/invalid/core/entity/player/ServerPlayerEntityMixin.java index 1d187dee215..15f74d2b795 100644 --- a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/entity/player/ServerPlayerEntityMixin.java +++ b/invalid/main/java/org/spongepowered/common/mixin/invalid/core/entity/player/ServerPlayerEntityMixin.java @@ -27,6 +27,8 @@ import static com.google.common.base.Preconditions.checkArgument; import com.google.common.collect.ImmutableSet; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.SharedMonsterAttributes; @@ -85,8 +87,8 @@ import org.spongepowered.api.text.Text; import org.spongepowered.api.text.channel.MessageChannel; import org.spongepowered.api.text.channel.MessageReceiver; -import org.spongepowered.api.text.chat.ChatType; -import org.spongepowered.api.text.chat.ChatVisibility; +import org.spongepowered.api.entity.living.player.chat.ChatType; +import org.spongepowered.api.entity.living.player.chat.ChatVisibility; import org.spongepowered.api.util.Tristate; import org.spongepowered.api.world.storage.WorldProperties; import org.spongepowered.asm.mixin.Final; @@ -466,12 +468,12 @@ public String getPlayerIP() { @Override @Nullable - public Text bridge$getDisplayNameText() { - return Text.of(this.shadow$getScoreboardName()); + public Component bridge$getDisplayNameText() { + return TextComponent.of(this.shadow$getScoreboardName()); } @Override - public void bridge$setDisplayName(@Nullable final Text displayName) { + public void bridge$setDisplayName(@Nullable final Component displayName) { // Do nothing } diff --git a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/util/text/TextComponentMixin.java b/invalid/main/java/org/spongepowered/common/mixin/invalid/core/util/text/TextComponentMixin.java deleted file mode 100644 index 3fe77339327..00000000000 --- a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/util/text/TextComponentMixin.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.invalid.core.util.text; - -import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; - -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.Style; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TextFormatting; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.action.TextActions; -import org.spongepowered.api.text.format.TextStyle; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.common.bridge.util.text.TextComponentBridge; -import org.spongepowered.common.bridge.util.text.event.ClickEventBridge; -import org.spongepowered.common.bridge.util.text.event.HoverEventBridge; -import org.spongepowered.common.text.ResolvedChatStyle; - -@Mixin(TextComponent.class) -public abstract class TextComponentMixin implements TextComponentBridge, ITextComponent { - - - private static ResolvedChatStyle resolve(final ResolvedChatStyle current, final Style previous, final Style style) { - final StyleBridge bridge = (StyleBridge) style; - if (current != null && bridge.bridge$getParentStyle() == previous) { - return new ResolvedChatStyle( - defaultIfNull(bridge.bridge$getColor(), current.color), - firstNonNull(bridge.bridge$getBold(), current.bold), - firstNonNull(bridge.bridge$getItalic(), current.italic), - firstNonNull(bridge.bridge$getUnderlined(), current.underlined), - firstNonNull(bridge.bridge$getStrikethrough(), current.strikethrough), - firstNonNull(bridge.bridge$getObfuscated(), current.obfuscated) - ); - } - return new ResolvedChatStyle( - style.getColor(), - style.getBold(), - style.getItalic(), - style.getUnderlined(), - style.getStrikethrough(), - style.getObfuscated() - ); - } - - @SuppressWarnings("ConstantConditions") - private static void apply(final StringBuilder builder, final char code, final TextFormatting formatting) { - builder.append(code).append(((TextFormattingBridge) (Object) formatting).bridge$getFormattingCode()); - } - - - @Override - public Text bridge$toText() { - final Text.Builder builder = this.impl$createBuilder(); - - final StyleBridge style = (StyleBridge) this.style; - if (style != null) { - if (style.bridge$getColor() != null) { - builder.color(SpongeTextColor.of(style.bridge$getColor())); - } - - builder.style(new TextStyle(style.bridge$getBold(), style.bridge$getItalic(), style.bridge$getUnderlined(), style.bridge$getStrikethrough(), - style.bridge$getObfuscated())); - - if (style.bridge$getClickEvent() != null) { - builder.onClick(((ClickEventBridge) style.bridge$getClickEvent()).bridge$getHandle()); - } - if (style.bridge$getHoverEvent() != null) { - builder.onHover(((HoverEventBridge) style.bridge$getHoverEvent()).bridge$getHandle()); - } - if (style.bridge$getInsertion() != null) { - builder.onShiftClick(TextActions.insertText(style.bridge$getInsertion())); - } - } - - for (final ITextComponent child : this.siblings) { - builder.append(((TextComponentBridge) child).bridge$toText()); - } - - return builder.build(); - } - -} diff --git a/invalid/main/java/org/spongepowered/common/service/pagination/ActivePagination.java b/invalid/main/java/org/spongepowered/common/service/pagination/ActivePagination.java index 75b0ca71e6f..fb3aea21101 100644 --- a/invalid/main/java/org/spongepowered/common/service/pagination/ActivePagination.java +++ b/invalid/main/java/org/spongepowered/common/service/pagination/ActivePagination.java @@ -26,12 +26,14 @@ import static org.spongepowered.common.util.SpongeCommonTranslationHelper.t; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.spongepowered.api.command.CommandException; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.action.TextActions; import org.spongepowered.api.text.channel.MessageReceiver; -import org.spongepowered.api.text.format.TextColors; -import org.spongepowered.api.text.format.TextStyles; import javax.annotation.Nullable; import java.util.ArrayList; @@ -45,45 +47,45 @@ */ abstract class ActivePagination { - private static final Text SLASH_TEXT = Text.of("/"); - private static final Text DIVIDER_TEXT = Text.of(" "); - private static final Text CONTINUATION_TEXT = t("..."); + private static final Component SLASH_TEXT = TextComponent.of("/"); + private static final Component DIVIDER_TEXT = TextComponent.space(); + private static final Component CONTINUATION_TEXT = TextComponent.of("..."); private final Supplier> src; private final UUID id = UUID.randomUUID(); - private final Text nextPageText; - private final Text prevPageText; + private final Component nextPageText; + private final Component prevPageText; @Nullable - private final Text title; + private final Component title; @Nullable - private final Text header; + private final Component header; @Nullable - private final Text footer; + private final Component footer; private int currentPage; private final int maxContentLinesPerPage; protected final PaginationCalculator calc; - private final Text padding; + private final Component padding; - public ActivePagination(Supplier> src, PaginationCalculator calc, @Nullable Text title, - @Nullable Text header, @Nullable Text footer, Text padding) { + public ActivePagination(Supplier> src, PaginationCalculator calc, @Nullable Component title, + @Nullable Component header, @Nullable Component footer, Component padding) { this.src = src; this.calc = calc; this.title = title; this.header = header; this.footer = footer; this.padding = padding; - this.nextPageText = t("»").toBuilder() - .color(TextColors.BLUE) - .style(TextStyles.UNDERLINE) - .onClick(TextActions.runCommand("/pagination " + this.id.toString() + " next")) - .onHover(TextActions.showText(Text.of("/page next"))) - .onShiftClick(TextActions.insertText("/page next")) + this.nextPageText = TextComponent.builder("»") + .color(NamedTextColor.BLUE) + .decoration(TextDecoration.UNDERLINED, true) + .clickEvent(ClickEvent.runCommand("/pagination " + this.id.toString() + " next")) + .hoverEvent(HoverEvent.showText(TextComponent.of("/page next"))) + .insertion("/page next") .build(); - this.prevPageText = t("«").toBuilder() - .color(TextColors.BLUE) - .style(TextStyles.UNDERLINE) - .onClick(TextActions.runCommand("/pagination " + this.id.toString() + " prev")) - .onHover(TextActions.showText(Text.of("/page prev"))) - .onShiftClick(TextActions.insertText("/page prev")) + this.prevPageText = TextComponent.builder("«") + .color(NamedTextColor.BLUE) + .decoration(TextDecoration.UNDERLINED, true) + .clickEvent(ClickEvent.runCommand("/pagination " + this.id.toString() + " prev")) + .hoverEvent(HoverEvent.showText(TextComponent.of("/page prev"))) + .insertion("/page prev") .build(); int maxContentLinesPerPage = calc.getLinesPerPage(src.get().get()) - 1; if (title != null) { @@ -103,7 +105,7 @@ public UUID getId() { return this.id; } - protected abstract Iterable getLines(int page) throws CommandException; + protected abstract Iterable getLines(int page) throws CommandException; protected abstract boolean hasPrevious(int page); @@ -161,26 +163,28 @@ protected Text calculateFooter(int currentPage) { boolean hasPrevious = this.hasPrevious(currentPage); boolean hasNext = this.hasNext(currentPage); - Text.Builder ret = Text.builder(); + TextComponent.Builder ret = TextComponent.builder(); if (hasPrevious) { ret.append(this.prevPageText).append(DIVIDER_TEXT); } else { - ret.append(Text.of("«")).append(DIVIDER_TEXT); + ret.append(TextComponent.of("«")).append(DIVIDER_TEXT); } boolean needsDiv = false; int totalPages = this.getTotalPages(); if (totalPages > 1) { - ret.append(Text.of( - TextActions.showText(Text.of("/page " + currentPage)), - TextActions.runCommand("/pagination " + this.id + ' ' + currentPage), - TextActions.insertText("/page " + currentPage), - currentPage - )).append(SLASH_TEXT).append(Text.of( - TextActions.showText(Text.of("/page " + totalPages)), - TextActions.runCommand("/pagination " + this.id + ' ' + totalPages), - TextActions.insertText("/page " + totalPages), - totalPages - )); + ret.append(TextComponent.builder() + .content(String.valueOf(currentPage)) + .clickEvent(ClickEvent.runCommand("/pagination " + this.id + ' ' + currentPage)) + .hoverEvent(HoverEvent.showText(TextComponent.of("/page " + currentPage))) + .insertion("/page " + currentPage) + .build()); + ret.append(SLASH_TEXT); + ret.append(TextComponent.builder() + .content(String.valueOf(currentPage)) + .clickEvent(ClickEvent.runCommand("/pagination " + this.id + ' ' + totalPages)) + .hoverEvent(HoverEvent.showText(TextComponent.of("/page " + totalPages))) + .insertion("/page " + totalPages) + .build()); needsDiv = true; } if (hasNext) { @@ -192,7 +196,7 @@ protected Text calculateFooter(int currentPage) { if (needsDiv) { ret.append(DIVIDER_TEXT); } - ret.append(Text.of("»")); + ret.append(TextComponent.of("»")); } ret.color(this.padding.getColor()); @@ -202,13 +206,13 @@ protected Text calculateFooter(int currentPage) { return ret.build(); } - protected void padPage(final List currentPage, final int currentPageLines, final boolean addContinuation) { + protected void padPage(final List currentPage, final int currentPageLines, final boolean addContinuation) { final int maxContentLinesPerPage = this.getMaxContentLinesPerPage(); for (int i = currentPageLines; i < maxContentLinesPerPage; i++) { if (addContinuation && i == maxContentLinesPerPage - 1) { currentPage.add(CONTINUATION_TEXT); } else { - currentPage.add(0, Text.EMPTY); + currentPage.add(0, TextComponent.empty()); } } } diff --git a/invalid/main/java/org/spongepowered/common/service/pagination/IterablePagination.java b/invalid/main/java/org/spongepowered/common/service/pagination/IterablePagination.java index a267daa1baa..d916199be32 100644 --- a/invalid/main/java/org/spongepowered/common/service/pagination/IterablePagination.java +++ b/invalid/main/java/org/spongepowered/common/service/pagination/IterablePagination.java @@ -30,6 +30,7 @@ import com.google.common.collect.Iterators; import com.google.common.collect.Lists; import com.google.common.collect.PeekingIterator; +import net.kyori.adventure.text.Component; import org.spongepowered.api.command.CommandException; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.channel.MessageReceiver; @@ -46,17 +47,17 @@ */ class IterablePagination extends ActivePagination { - private final PeekingIterator> countIterator; + private final PeekingIterator> countIterator; private int lastPage; - public IterablePagination(Supplier> src, PaginationCalculator calc, Iterable> counts, - @Nullable Text title, @Nullable Text header, @Nullable Text footer, Text padding) { + public IterablePagination(Supplier> src, PaginationCalculator calc, Iterable> counts, + @Nullable Component title, @Nullable Component header, @Nullable Component footer, Component padding) { super(src, calc, title, header, footer, padding); this.countIterator = Iterators.peekingIterator(counts.iterator()); } @Override - protected Iterable getLines(int page) throws CommandException { + protected Iterable getLines(int page) throws CommandException { if (!this.countIterator.hasNext()) { throw new CommandException(t("You're already at the end of the pagination list iterator.")); } @@ -73,17 +74,17 @@ protected Iterable getLines(int page) throws CommandException { this.lastPage = page; if (this.getMaxContentLinesPerPage() <= 0) { - return Lists.newArrayList(Iterators.transform(this.countIterator, new Function, Text>() { + return Lists.newArrayList(Iterators.transform(this.countIterator, new Function, Component>() { @Nullable @Override - public Text apply(Map.Entry input) { + public Component apply(Map.Entry input) { return input.getKey(); } })); } - List ret = new ArrayList<>(this.getMaxContentLinesPerPage()); + List ret = new ArrayList<>(this.getMaxContentLinesPerPage()); int addedLines = 0; while (addedLines <= this.getMaxContentLinesPerPage()) { if (!this.countIterator.hasNext()) { @@ -98,7 +99,7 @@ public Text apply(Map.Entry input) { this.padPage(ret, addedLines, true); break; } - Map.Entry ent = this.countIterator.next(); + Map.Entry ent = this.countIterator.next(); ret.add(ent.getKey()); addedLines += ent.getValue(); } diff --git a/invalid/main/java/org/spongepowered/common/service/pagination/ListPagination.java b/invalid/main/java/org/spongepowered/common/service/pagination/ListPagination.java index d0c2829531e..9f202bfbc5d 100644 --- a/invalid/main/java/org/spongepowered/common/service/pagination/ListPagination.java +++ b/invalid/main/java/org/spongepowered/common/service/pagination/ListPagination.java @@ -27,6 +27,7 @@ import static org.spongepowered.common.util.SpongeCommonTranslationHelper.t; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.Component; import org.spongepowered.api.command.CommandException; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.channel.MessageReceiver; @@ -42,16 +43,16 @@ * Pagination working with a list of values. */ class ListPagination extends ActivePagination { - private final List> pages; + private final List> pages; - public ListPagination(Supplier> src, PaginationCalculator calc, List> lines, - @Nullable Text title, @Nullable Text header, @Nullable Text footer, Text padding) { + public ListPagination(Supplier> src, PaginationCalculator calc, List> lines, + @Nullable Component title, @Nullable Component header, @Nullable Component footer, Component padding) { super(src, calc, title, header, footer, padding); - List> pages = new ArrayList<>(); - List currentPage = new ArrayList<>(); + List> pages = new ArrayList<>(); + List currentPage = new ArrayList<>(); int currentPageLines = 0; - for (Map.Entry ent : lines) { + for (Map.Entry ent : lines) { final boolean finiteLinesPerPage = this.getMaxContentLinesPerPage() > 0; final boolean willExceedPageLength = ent.getValue() + currentPageLines > this.getMaxContentLinesPerPage(); final boolean currentPageNotEmpty = currentPageLines != 0; @@ -78,7 +79,7 @@ public ListPagination(Supplier> src, PaginationCalcula } @Override - protected Iterable getLines(int page) throws CommandException { + protected Iterable getLines(int page) throws CommandException { final int size = this.pages.size(); if (size == 0) { return ImmutableList.of(); diff --git a/invalid/main/java/org/spongepowered/common/service/pagination/PaginationCalculator.java b/invalid/main/java/org/spongepowered/common/service/pagination/PaginationCalculator.java index 2b6e8f784ad..18fd96684d6 100644 --- a/invalid/main/java/org/spongepowered/common/service/pagination/PaginationCalculator.java +++ b/invalid/main/java/org/spongepowered/common/service/pagination/PaginationCalculator.java @@ -25,6 +25,8 @@ package org.spongepowered.common.service.pagination; import com.google.common.annotations.VisibleForTesting; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TranslationTextComponent; @@ -35,6 +37,7 @@ import ninja.leaping.configurate.loader.HeaderMode; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.channel.MessageReceiver; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.util.text.TextComponentBridge; import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.math.GenericMath; @@ -102,7 +105,7 @@ int getLinesPerPage(MessageReceiver source) { * @param text The text to calculate the number of lines for * @return The number of lines that this text flows into */ - int getLines(Text text) { + int getLines(Component text) { //TODO: this needs fixing as well. return (int) Math.ceil((double) this.getWidth(text) / LINE_WIDTH); } @@ -160,8 +163,8 @@ int getWidth(int codePoint, boolean isBold) { * @return The amount of character pixels/columns the text takes up */ @VisibleForTesting - int getWidth(Text text) { - ITextComponent component = SpongeTexts.toComponent(text); + int getWidth(Component text) { + ITextComponent component = SpongeAdventure.vanilla(text); Iterable children = ((TextComponentBridge) component).bridge$withChildren(); int total = 0; @@ -212,26 +215,26 @@ int getWidth(Text text) { */ //TODO: Probably should completely rewrite this to not compute padding, but loop until the padding is done, unless //we can get accurate computation of padding ahead of time. - Text center(Text text, Text padding) { + Component center(Component text, Component padding) { int inputLength = this.getWidth(text); //Minecraft breaks lines when the next character would be > then LINE_WIDTH, this seems most graceful way to fail if (inputLength >= LINE_WIDTH) { return text; } - final Text textWithSpaces = this.addSpaces(Text.of(" "), text); + final Component textWithSpaces = this.addSpaces(TextComponent.space(), text); //Minecraft breaks lines when the next character would be > then LINE_WIDTH boolean addSpaces = this.getWidth(textWithSpaces) <= LINE_WIDTH; //TODO: suspect, why are we changing the style of the padding, they may want different styles on the padding. - Text styledPadding = this.withStyle(padding, text); + Component styledPadding = this.withStyle(padding, text); int paddingLength = this.getWidth(styledPadding); - final Text.Builder output = Text.builder(); + final TextComponent.Builder output = TextComponent.builder(); //Using 0 width unicode symbols as padding throws us into an unending loop, replace them with the default padding if(paddingLength < 1) { - padding = Text.of("="); - styledPadding = this.withColor(this.withStyle(padding, text), text); + padding = TextComponent.of("="); + styledPadding = this.withStyle(padding, text); paddingLength = this.getWidth(styledPadding); } @@ -267,10 +270,8 @@ Text center(Text text, Text padding) { * @param styled The styled text * @return The original text now stylized */ - private Text withStyle(Text text, Text styled) { - return text.toBuilder() - .style(styled.getStyle()) - .build(); + private Component withStyle(Component text, Component styled) { + return text.style(styled.style()); } /** @@ -280,10 +281,8 @@ private Text withStyle(Text text, Text styled) { * @param colored The colored text * @return The original text now colored */ - private Text withColor(Text text, Text colored) { - return text.toBuilder() - .color(colored.getColor()) - .build(); + private Component withColor(Component text, Component colored) { + return text.color(colored.color()); } /** @@ -293,8 +292,8 @@ private Text withColor(Text text, Text colored) { * @param build The work in progress text builder * @return The finalized, properly styled text. */ - private Text finalizeBuilder(Text text, Text.Builder build) { - return build.style(text.getStyle()).build(); + private Component finalizeBuilder(Component text,TextComponent.Builder build) { + return build.style(text.style()).build(); } /** @@ -307,13 +306,12 @@ private Text finalizeBuilder(Text text, Text.Builder build) { * @param text The text to add to * @return The text with the added spaces */ - private Text addSpaces(Text spaces, Text text) { - return Text.builder() + private Component addSpaces(Component spaces, Component text) { + return TextComponent.builder() .append(spaces) .append(text) .append(spaces) - .color(text.getColor()) - .style(text.getStyle()) + .style(text.style()) .build(); } @@ -325,7 +323,7 @@ private Text addSpaces(Text spaces, Text text) { * @param build The work in progress text to add to * @param count The amount of padding to add */ - private void addPadding(Text padding, Text.Builder build, int count) { + private void addPadding(Component padding, TextComponent.Builder build, int count) { if (count > 0) { build.append(Collections.nCopies(count, padding)); } diff --git a/invalid/main/java/org/spongepowered/common/text/action/SpongeClickAction.java b/invalid/main/java/org/spongepowered/common/text/action/SpongeClickAction.java deleted file mode 100644 index 4329cf7d9c7..00000000000 --- a/invalid/main/java/org/spongepowered/common/text/action/SpongeClickAction.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text.action; - -import net.minecraft.util.text.event.ClickEvent; -import org.spongepowered.api.text.action.ClickAction; -import org.spongepowered.common.bridge.util.text.event.ClickEventBridge; - -import java.util.UUID; - -public final class SpongeClickAction { - - private SpongeClickAction() {} - - private static ClickEvent.Action getType(ClickAction action) { - if (action instanceof ClickAction.OpenUrl) { - return ClickEvent.Action.OPEN_URL; - } else if (action instanceof ClickAction.RunCommand || action instanceof ClickAction.ExecuteCallback) { - return ClickEvent.Action.RUN_COMMAND; - } else if (action instanceof ClickAction.SuggestCommand) { - return ClickEvent.Action.SUGGEST_COMMAND; - } else if (action instanceof ClickAction.ChangePage) { - return ClickEvent.Action.CHANGE_PAGE; - } - - throw new UnsupportedOperationException(action.getClass().toString()); - } - - public static ClickEvent getHandle(ClickAction action) { - final String text; - if (action instanceof ClickAction.ExecuteCallback) { - UUID callbackId = SpongeCallbackHolder.getInstance().getOrCreateIdForCallback(((ClickAction.ExecuteCallback) action).getResult()); - text = SpongeCallbackHolder.CALLBACK_COMMAND_QUALIFIED + " " + callbackId; - } else { - text = action.getResult().toString(); - } - - ClickEvent event = new ClickEvent(getType(action), text); - ((ClickEventBridge) event).bridge$setHandle(action); - return event; - } - -} diff --git a/invalid/main/java/org/spongepowered/common/text/chat/ChatUtil.java b/invalid/main/java/org/spongepowered/common/text/chat/ChatUtil.java index 03e46a5620e..96576636845 100644 --- a/invalid/main/java/org/spongepowered/common/text/chat/ChatUtil.java +++ b/invalid/main/java/org/spongepowered/common/text/chat/ChatUtil.java @@ -35,7 +35,7 @@ import org.spongepowered.api.event.message.MessageEvent.MessageFormatter; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.channel.MessageChannel; -import org.spongepowered.api.text.chat.ChatTypes; +import org.spongepowered.api.entity.living.player.chat.ChatTypes; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.SpongeImplHooks; import org.spongepowered.common.text.SpongeTexts; diff --git a/invalid/main/java/org/spongepowered/common/text/selector/SelectorResolver.java b/invalid/main/java/org/spongepowered/common/text/selector/SelectorResolver.java index 45ae39060ab..686c1ff99d2 100644 --- a/invalid/main/java/org/spongepowered/common/text/selector/SelectorResolver.java +++ b/invalid/main/java/org/spongepowered/common/text/selector/SelectorResolver.java @@ -39,14 +39,14 @@ import org.spongepowered.api.scoreboard.TeamMember; import org.spongepowered.api.scoreboard.objective.Objective; import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.selector.Argument; -import org.spongepowered.api.text.selector.Argument.Invertible; -import org.spongepowered.api.text.selector.ArgumentHolder; -import org.spongepowered.api.text.selector.ArgumentType; -import org.spongepowered.api.text.selector.ArgumentTypes; -import org.spongepowered.api.text.selector.Selector; -import org.spongepowered.api.text.selector.SelectorType; -import org.spongepowered.api.text.selector.SelectorTypes; +import org.spongepowered.api.entity.selector.Argument; +import org.spongepowered.api.entity.selector.Argument.Invertible; +import org.spongepowered.api.entity.selector.ArgumentHolder; +import org.spongepowered.api.entity.selector.ArgumentType; +import org.spongepowered.api.entity.selector.ArgumentTypes; +import org.spongepowered.api.entity.selector.Selector; +import org.spongepowered.api.entity.selector.SelectorType; +import org.spongepowered.api.entity.selector.SelectorTypes; import org.spongepowered.api.util.AABB; import org.spongepowered.api.util.Functional; import org.spongepowered.api.world.Locatable; diff --git a/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgument.java b/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgument.java index c81e9a3ac1d..9ca122b7a21 100644 --- a/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgument.java +++ b/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgument.java @@ -25,8 +25,8 @@ package org.spongepowered.common.text.selector; import org.spongepowered.api.CatalogType; -import org.spongepowered.api.text.selector.Argument; -import org.spongepowered.api.text.selector.ArgumentType; +import org.spongepowered.api.entity.selector.Argument; +import org.spongepowered.api.entity.selector.ArgumentType; public class SpongeArgument implements Argument { diff --git a/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgumentHolder.java b/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgumentHolder.java index e8c87e81569..1ff86cf33b2 100644 --- a/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgumentHolder.java +++ b/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgumentHolder.java @@ -28,8 +28,8 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; -import org.spongepowered.api.text.selector.ArgumentHolder; -import org.spongepowered.api.text.selector.ArgumentType; +import org.spongepowered.api.entity.selector.ArgumentHolder; +import org.spongepowered.api.entity.selector.ArgumentType; import org.spongepowered.api.util.annotation.NonnullByDefault; import org.spongepowered.math.vector.Vector3d; import org.spongepowered.math.vector.Vector3f; diff --git a/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgumentType.java b/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgumentType.java index e260fa584d2..d7293820918 100644 --- a/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgumentType.java +++ b/invalid/main/java/org/spongepowered/common/text/selector/SpongeArgumentType.java @@ -31,7 +31,7 @@ import org.spongepowered.api.CatalogType; import org.spongepowered.api.entity.EntityType; import org.spongepowered.api.entity.living.player.gamemode.GameMode; -import org.spongepowered.api.text.selector.ArgumentType; +import org.spongepowered.api.entity.selector.ArgumentType; import org.spongepowered.api.util.annotation.NonnullByDefault; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.registry.type.entity.EntityTypeRegistryModule; diff --git a/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelector.java b/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelector.java index 2ee70968d28..ebd152c6270 100644 --- a/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelector.java +++ b/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelector.java @@ -30,11 +30,11 @@ import com.google.common.collect.ImmutableSet; import org.spongepowered.api.command.CommandSource; import org.spongepowered.api.entity.Entity; -import org.spongepowered.api.text.selector.Argument; -import org.spongepowered.api.text.selector.ArgumentType; -import org.spongepowered.api.text.selector.ArgumentTypes; -import org.spongepowered.api.text.selector.Selector; -import org.spongepowered.api.text.selector.SelectorType; +import org.spongepowered.api.entity.selector.Argument; +import org.spongepowered.api.entity.selector.ArgumentType; +import org.spongepowered.api.entity.selector.ArgumentTypes; +import org.spongepowered.api.entity.selector.Selector; +import org.spongepowered.api.entity.selector.SelectorType; import org.spongepowered.api.util.annotation.NonnullByDefault; import org.spongepowered.api.world.ServerLocation; import org.spongepowered.api.world.extent.Extent; diff --git a/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorBuilder.java b/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorBuilder.java index 1c8253fee4c..90275821c11 100644 --- a/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorBuilder.java +++ b/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorBuilder.java @@ -27,10 +27,10 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.collect.ImmutableMap; -import org.spongepowered.api.text.selector.Argument; -import org.spongepowered.api.text.selector.ArgumentType; -import org.spongepowered.api.text.selector.Selector; -import org.spongepowered.api.text.selector.SelectorType; +import org.spongepowered.api.entity.selector.Argument; +import org.spongepowered.api.entity.selector.ArgumentType; +import org.spongepowered.api.entity.selector.Selector; +import org.spongepowered.api.entity.selector.SelectorType; import org.spongepowered.api.util.annotation.NonnullByDefault; import javax.annotation.Nullable; diff --git a/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorFactory.java b/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorFactory.java index 4e9ad58ebde..2f10a90ca62 100644 --- a/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorFactory.java +++ b/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorFactory.java @@ -33,14 +33,14 @@ import com.google.common.collect.Sets; import org.spongepowered.api.Sponge; import org.spongepowered.api.scoreboard.Score; -import org.spongepowered.api.text.selector.Argument; -import org.spongepowered.api.text.selector.ArgumentHolder; -import org.spongepowered.api.text.selector.ArgumentHolder.Limit; -import org.spongepowered.api.text.selector.ArgumentType; -import org.spongepowered.api.text.selector.ArgumentTypes; -import org.spongepowered.api.text.selector.Selector; -import org.spongepowered.api.text.selector.SelectorFactory; -import org.spongepowered.api.text.selector.SelectorType; +import org.spongepowered.api.entity.selector.Argument; +import org.spongepowered.api.entity.selector.ArgumentHolder; +import org.spongepowered.api.entity.selector.ArgumentHolder.Limit; +import org.spongepowered.api.entity.selector.ArgumentType; +import org.spongepowered.api.entity.selector.ArgumentTypes; +import org.spongepowered.api.entity.selector.Selector; +import org.spongepowered.api.entity.selector.SelectorFactory; +import org.spongepowered.api.entity.selector.SelectorType; import org.spongepowered.api.util.annotation.NonnullByDefault; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.mixin.core.command.EntitySelectorAccessor; diff --git a/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorType.java b/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorType.java index 5e2c409714a..732200cf271 100644 --- a/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorType.java +++ b/invalid/main/java/org/spongepowered/common/text/selector/SpongeSelectorType.java @@ -24,7 +24,7 @@ */ package org.spongepowered.common.text.selector; -import org.spongepowered.api.text.selector.SelectorType; +import org.spongepowered.api.entity.selector.SelectorType; import org.spongepowered.api.util.annotation.NonnullByDefault; import org.spongepowered.common.SpongeCatalogType; diff --git a/src/main/java/org/spongepowered/common/SpongeCatalogType.java b/src/main/java/org/spongepowered/common/SpongeCatalogType.java index 2c2062961b5..6937ce0e2f6 100644 --- a/src/main/java/org/spongepowered/common/SpongeCatalogType.java +++ b/src/main/java/org/spongepowered/common/SpongeCatalogType.java @@ -29,7 +29,6 @@ import com.google.common.base.MoreObjects; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.CatalogType; -import org.spongepowered.api.text.translation.Translation; public abstract class SpongeCatalogType implements CatalogType { @@ -70,25 +69,4 @@ protected MoreObjects.ToStringHelper toStringHelper() { return MoreObjects.toStringHelper(this) .add("key", this.key); } - - public static abstract class Translatable extends SpongeCatalogType implements org.spongepowered.api.text.translation.Translatable { - - private final Translation translation; - - public Translatable(ResourceKey key, Translation translation) { - super(key); - this.translation = checkNotNull(translation, "translation"); - } - - @Override - public final Translation getTranslation() { - return this.translation; - } - - @Override - protected MoreObjects.ToStringHelper toStringHelper() { - return super.toStringHelper() - .add("translation", this.getTranslation()); - } - } } diff --git a/src/main/java/org/spongepowered/common/SpongeGame.java b/src/main/java/org/spongepowered/common/SpongeGame.java index 1cd2f9da544..9bbb804d141 100644 --- a/src/main/java/org/spongepowered/common/SpongeGame.java +++ b/src/main/java/org/spongepowered/common/SpongeGame.java @@ -45,6 +45,7 @@ import org.spongepowered.api.sql.SqlManager; import org.spongepowered.api.util.metric.MetricsConfigManager; import org.spongepowered.common.scheduler.AsyncScheduler; +import org.spongepowered.common.server.ServerConsoleSystemSubject; import org.spongepowered.common.util.LocaleCache; import java.nio.file.Path; @@ -70,6 +71,8 @@ public final class SpongeGame implements Game { private Client client; private Server server; + private SystemSubject systemSubject; + @Inject public SpongeGame(final Platform platform, final GameRegistry registry, final DataManager dataManager, final PluginManager pluginManager, final EventManager eventManager, final AssetManager assetManager, final ConfigManager configManager, final ChannelRegistry channelRegistry, @@ -97,7 +100,10 @@ public Path getGameDirectory() { @Override public SystemSubject getSystemSubject() { - return (SystemSubject) SpongeCommon.getServer(); + if (this.systemSubject == null) { + this.systemSubject = new ServerConsoleSystemSubject(); + } + return this.systemSubject; } @Override diff --git a/src/main/java/org/spongepowered/common/SpongeSystemSubject.java b/src/main/java/org/spongepowered/common/SpongeSystemSubject.java new file mode 100644 index 00000000000..a8b218e5a4f --- /dev/null +++ b/src/main/java/org/spongepowered/common/SpongeSystemSubject.java @@ -0,0 +1,84 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.spongepowered.common; + +import com.google.common.base.MoreObjects; +import org.spongepowered.api.SystemSubject; +import org.spongepowered.api.service.permission.PermissionService; +import org.spongepowered.api.service.permission.Subject; +import org.spongepowered.api.service.permission.SubjectReference; +import org.spongepowered.api.util.Tristate; +import org.spongepowered.common.bridge.permissions.SubjectBridge; +import org.spongepowered.common.service.permission.SpongeBridgeSubject; +import org.spongepowered.common.service.permission.SubjectHelper; + +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +public abstract class SpongeSystemSubject implements Subject, SystemSubject, SpongeBridgeSubject, SubjectBridge { + private SubjectReference impl$subjectReference; + + @Override + public void bridge$setSubject(final SubjectReference subj) { + this.impl$subjectReference = subj; + } + + @Override + public Optional bridge$resolveReferenceOptional() { + if (this.impl$subjectReference == null) { + SubjectHelper.applySubject(this); + } + return Optional.ofNullable(this.impl$subjectReference); + } + + @Override + public Optional bridge$resolveOptional() { + return this.bridge$resolveReferenceOptional().map(SubjectReference::resolve).map(CompletableFuture::join); + } + + @Override + public Subject bridge$resolve() { + return this.bridge$resolveOptional() + .orElseThrow(() -> new IllegalStateException("No subject reference present for subject " + this)); + } + + @Override + public String bridge$getSubjectCollectionIdentifier() { + return PermissionService.SUBJECTS_SYSTEM; + } + + @Override + public Tristate bridge$permDefault(final String permission) { + return Tristate.TRUE; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("identifier", this.getIdentifier()) + .add("reference", this.bridge$resolveOptional()) + .toString(); + } +} diff --git a/src/main/java/org/spongepowered/common/advancement/SpongeAdvancementTree.java b/src/main/java/org/spongepowered/common/advancement/SpongeAdvancementTree.java index 8cd9566c54f..11af386803b 100644 --- a/src/main/java/org/spongepowered/common/advancement/SpongeAdvancementTree.java +++ b/src/main/java/org/spongepowered/common/advancement/SpongeAdvancementTree.java @@ -28,7 +28,6 @@ import org.spongepowered.api.advancement.Advancement; import org.spongepowered.api.advancement.AdvancementTree; import org.spongepowered.api.advancement.DisplayInfo; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.common.bridge.advancements.DisplayInfoBridge; import java.util.Optional; @@ -37,12 +36,12 @@ public final class SpongeAdvancementTree implements AdvancementTree { private final Advancement rootAdvancement; private final ResourceKey key; - private final Translation translation; + private final String name; - public SpongeAdvancementTree(Advancement rootAdvancement, ResourceKey key, Translation translation) { + public SpongeAdvancementTree(Advancement rootAdvancement, ResourceKey key, String name) { this.rootAdvancement = rootAdvancement; this.key = key; - this.translation = translation; + this.name = name; } @Override @@ -52,7 +51,7 @@ public ResourceKey getKey() { @Override public String getName() { - return this.translation.get(); + return this.name; } @Override diff --git a/src/main/java/org/spongepowered/common/advancement/SpongeAdvancementTreeBuilder.java b/src/main/java/org/spongepowered/common/advancement/SpongeAdvancementTreeBuilder.java index 4759b3c4162..cb275b632c1 100644 --- a/src/main/java/org/spongepowered/common/advancement/SpongeAdvancementTreeBuilder.java +++ b/src/main/java/org/spongepowered/common/advancement/SpongeAdvancementTreeBuilder.java @@ -30,8 +30,6 @@ import org.spongepowered.api.ResourceKey; import org.spongepowered.api.advancement.Advancement; import org.spongepowered.api.advancement.AdvancementTree; -import org.spongepowered.api.text.translation.FixedTranslation; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.common.bridge.advancements.AdvancementBridge; import org.spongepowered.common.bridge.advancements.DisplayInfoBridge; import org.spongepowered.common.util.SpongeCatalogBuilder; @@ -40,7 +38,7 @@ public final class SpongeAdvancementTreeBuilder extends SpongeCatalogBuilder implements AdvancementTree.Builder { private Advancement rootAdvancement; - private Translation translation; + private String name; private String background; public SpongeAdvancementTreeBuilder() { @@ -68,13 +66,7 @@ public AdvancementTree.Builder background(final String background) { @Override public AdvancementTree.Builder name(String name) { - this.translation = new FixedTranslation(name); - return this; - } - - @Override - public AdvancementTree.Builder name(Translation translation) { - this.translation = translation; + this.name = name; return this; } @@ -82,7 +74,7 @@ public AdvancementTree.Builder name(Translation translation) { protected AdvancementTree build(ResourceKey key) { checkNotNull(key); checkState(this.rootAdvancement != null, "The root advancement must be set"); - final SpongeAdvancementTree advancementTree = new SpongeAdvancementTree(this.rootAdvancement, key, this.translation); + final SpongeAdvancementTree advancementTree = new SpongeAdvancementTree(this.rootAdvancement, key, this.name); ((DisplayInfoBridge) this.rootAdvancement.getDisplayInfo().get()).bridge$setBackground(this.background); ((AdvancementBridge) this.rootAdvancement).bridge$setParent(null); applyTree(this.rootAdvancement, advancementTree); @@ -99,7 +91,7 @@ private static void applyTree(final Advancement advancement, final AdvancementTr @Override public AdvancementTree.Builder reset() { this.key = null; - this.translation = null; + this.name = null; this.background = "minecraft:textures/gui/advancements/backgrounds/stone.png"; this.rootAdvancement = null; return this; diff --git a/src/main/java/org/spongepowered/common/advancement/SpongeDisplayInfoBuilder.java b/src/main/java/org/spongepowered/common/advancement/SpongeDisplayInfoBuilder.java index 14bab823ab0..871eda21cc9 100644 --- a/src/main/java/org/spongepowered/common/advancement/SpongeDisplayInfoBuilder.java +++ b/src/main/java/org/spongepowered/common/advancement/SpongeDisplayInfoBuilder.java @@ -27,20 +27,21 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.advancements.FrameType; import net.minecraft.util.text.ITextComponent; import org.spongepowered.api.advancement.AdvancementType; import org.spongepowered.api.advancement.AdvancementTypes; import org.spongepowered.api.advancement.DisplayInfo; import org.spongepowered.api.item.inventory.ItemStackSnapshot; -import org.spongepowered.api.text.Text; -import org.spongepowered.common.text.SpongeTexts; +import org.spongepowered.common.adventure.SpongeAdventure; public class SpongeDisplayInfoBuilder implements DisplayInfo.Builder { private AdvancementType advancementType; - private Text description; - private Text title; + private Component description; + private Component title; private ItemStackSnapshot icon; private boolean showToast; private boolean announceToChat; @@ -58,14 +59,14 @@ public DisplayInfo.Builder type(final AdvancementType advancementType) { } @Override - public DisplayInfo.Builder description(final Text description) { + public DisplayInfo.Builder description(final Component description) { checkNotNull(description, "description"); this.description = description; return this; } @Override - public DisplayInfo.Builder title(final Text title) { + public DisplayInfo.Builder title(final Component title) { checkNotNull(title, "title"); this.title = title; return this; @@ -101,8 +102,8 @@ public DisplayInfo.Builder hidden(final boolean hidden) { public DisplayInfo build() { checkState(this.title != null, "Title has not been set"); checkState(this.icon != null, "Icon has not been set"); - final ITextComponent title = SpongeTexts.toComponent(this.title); - final ITextComponent description = SpongeTexts.toComponent(this.description); + final ITextComponent title = SpongeAdventure.asVanilla(this.title); + final ITextComponent description = SpongeAdventure.asVanilla(this.description); final FrameType frameType = (FrameType) (Object) this.advancementType; final net.minecraft.item.ItemStack icon = (net.minecraft.item.ItemStack) (Object) this.icon.createStack(); return (DisplayInfo) new net.minecraft.advancements.DisplayInfo(icon, title, description, null, @@ -124,7 +125,7 @@ public DisplayInfo.Builder from(final DisplayInfo value) { @Override public DisplayInfo.Builder reset() { this.icon = null; - this.description = Text.empty(); + this.description = TextComponent.empty(); this.advancementType = AdvancementTypes.TASK.get(); this.announceToChat = true; this.hidden = false; diff --git a/src/main/java/org/spongepowered/common/adventure/AdventureRegistryImpl.java b/src/main/java/org/spongepowered/common/adventure/AdventureRegistryImpl.java new file mode 100644 index 00000000000..e5aab4c18ba --- /dev/null +++ b/src/main/java/org/spongepowered/common/adventure/AdventureRegistryImpl.java @@ -0,0 +1,112 @@ +/* + * This file is part of adventure, licensed under the MIT License. + * + * Copyright (c) 2020 KyoriPowered + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.spongepowered.common.adventure; + +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.util.Index; +import org.spongepowered.api.adventure.AdventureRegistry; + +import java.util.Optional; +import java.util.Set; + +public final class AdventureRegistryImpl implements AdventureRegistry { + public static final AdventureRegistry INSTANCE = new AdventureRegistryImpl(); + + private final OfType decorations = new ForIndex<>(TextDecoration.NAMES); + private final OfType namedColors = new ForIndex<>(NamedTextColor.NAMES); + private final OfType clickEventActions = new ForIndex<>(ClickEvent.Action.NAMES); + private final OfType> hoverEventActions = new ForIndex<>(HoverEvent.Action.NAMES); + private final OfType bossBarColors = new ForIndex<>(BossBar.Color.NAMES); + private final OfType bossBarOverlays = new ForIndex<>(BossBar.Overlay.NAMES); + private final OfType bossBarFlags = new ForIndex<>(BossBar.Flag.NAMES); + private final OfType soundSources = new ForIndex<>(Sound.Source.NAMES); + + @Override + public OfType getDecorations() { + return this.decorations; + } + + @Override + public OfType getNamedColors() { + return this.namedColors; + } + + @Override + public OfType getClickEventActions() { + return this.clickEventActions; + } + + @Override + public OfType> getHoverEventActions() { + return this.hoverEventActions; + } + + @Override + public OfType getBossBarColors() { + return this.bossBarColors; + } + + @Override + public OfType getBossBarOverlays() { + return this.bossBarOverlays; + } + + @Override + public OfType getBossBarFlags() { + return this.bossBarFlags; + } + + @Override + public OfType getSoundSources() { + return this.soundSources; + } + + static class ForIndex implements OfType { + private final Index registry; + + ForIndex(final Index registry) { + this.registry = registry; + } + + @Override + public String getKey(final T value) { + return this.registry.key(value); + } + + @Override + public Optional getValue(final String key) { + return Optional.ofNullable(this.registry.value(key)); + } + + @Override + public Set keys() { + return this.registry.keys(); + } + } +} diff --git a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/KeybindTextComponentMixin.java b/src/main/java/org/spongepowered/common/adventure/AudienceFactory.java similarity index 72% rename from invalid/main/java/org/spongepowered/common/mixin/core/util/text/KeybindTextComponentMixin.java rename to src/main/java/org/spongepowered/common/adventure/AudienceFactory.java index 58eb5228a82..612018bb772 100644 --- a/invalid/main/java/org/spongepowered/common/mixin/core/util/text/KeybindTextComponentMixin.java +++ b/src/main/java/org/spongepowered/common/adventure/AudienceFactory.java @@ -22,19 +22,18 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.mixin.core.util.text; +package org.spongepowered.common.adventure; -import net.minecraft.util.text.KeybindTextComponent; -import org.spongepowered.api.text.Text; -import org.spongepowered.asm.mixin.Mixin; +import net.kyori.adventure.audience.Audience; +import org.spongepowered.api.adventure.Audiences; +import org.spongepowered.api.entity.living.player.server.ServerPlayer; +import org.spongepowered.common.SpongeCommon; -@Mixin(KeybindTextComponent.class) -public abstract class KeybindTextComponentMixin extends TextComponentMixin { +import java.util.List; +public final class AudienceFactory implements Audiences.Factory { @Override - protected Text.Builder impl$createBuilder() { - // TODO - change this once TextComponentKeybind is representable through the API - return Text.builder(); + public Audience onlinePlayers() { + return Audience.of((List) (List) SpongeCommon.getServer().getPlayerList().getPlayers()); } - } diff --git a/src/main/java/org/spongepowered/common/adventure/NbtLegacyHoverEventSerializer.java b/src/main/java/org/spongepowered/common/adventure/NbtLegacyHoverEventSerializer.java new file mode 100644 index 00000000000..e3873479f73 --- /dev/null +++ b/src/main/java/org/spongepowered/common/adventure/NbtLegacyHoverEventSerializer.java @@ -0,0 +1,115 @@ +/* + * This file is part of adventure, licensed under the MIT License. + * + * Copyright (c) 2020 KyoriPowered + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.spongepowered.common.adventure; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.nbt.api.BinaryTagHolder; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.serializer.gson.LegacyHoverEventSerializer; +import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer; +import net.kyori.adventure.util.Codec; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.INBT; +import net.minecraft.nbt.JsonToNBT; +import org.checkerframework.checker.nullness.qual.NonNull; + +import java.io.IOException; +import java.util.UUID; + +public final class NbtLegacyHoverEventSerializer implements LegacyHoverEventSerializer { + public static final NbtLegacyHoverEventSerializer INSTANCE = new NbtLegacyHoverEventSerializer(); + private static final Codec SNBT_CODEC = Codec.of(JsonToNBT::getTagFromJson, INBT::toString); + + static final String ITEM_TYPE = "id"; + static final String ITEM_COUNT = "Count"; + static final String ITEM_TAG = "tag"; + + static final String ENTITY_NAME = "name"; + static final String ENTITY_TYPE = "type"; + static final String ENTITY_ID = "id"; + + private NbtLegacyHoverEventSerializer() { + } + + @Override + public HoverEvent.ShowItem deserializeShowItem(final Component input) throws IOException { + final String rawContent = PlainComponentSerializer.plain().serialize(input); + try { + final CompoundNBT contents = SNBT_CODEC.decode(rawContent); + final CompoundNBT tag = contents.getCompound(ITEM_TAG); + return new HoverEvent.ShowItem( + Key.of(contents.getString(ITEM_TYPE)), + contents.contains(ITEM_COUNT) ? contents.getByte(ITEM_COUNT) : 1, + tag.isEmpty() ? null : BinaryTagHolder.encode(tag, SNBT_CODEC) + ); + } catch (final CommandSyntaxException ex) { + throw new IOException(ex); + } + } + + @Override + public HoverEvent.@NonNull ShowEntity deserializeShowEntity(final Component input, final Codec.Decoder componentCodec) throws IOException { + final String raw = PlainComponentSerializer.plain().serialize(input); + try { + final CompoundNBT contents = SNBT_CODEC.decode(raw); + return new HoverEvent.ShowEntity( + Key.of(contents.getString(ENTITY_TYPE)), + UUID.fromString(contents.getString(ENTITY_ID)), + componentCodec.decode(contents.getString(ENTITY_NAME)) + ); + } catch (final CommandSyntaxException ex) { + throw new IOException(ex); + } + } + + @Override + public @NonNull Component serializeShowItem(final HoverEvent.@NonNull ShowItem input) throws IOException { + final CompoundNBT tag = new CompoundNBT(); + tag.putString(ITEM_TYPE, input.item().asString()); + tag.putByte(ITEM_COUNT, (byte) input.count()); + if (input.nbt() != null) { + try { + tag.put(ITEM_TAG, input.nbt().get(SNBT_CODEC)); + } catch (final CommandSyntaxException ex) { + throw new IOException(ex); + } + } + + return TextComponent.of(SNBT_CODEC.encode(tag)); + } + + @Override + public @NonNull Component serializeShowEntity(final HoverEvent.ShowEntity input, final Codec.Encoder componentCodec) { + final CompoundNBT tag = new CompoundNBT(); + tag.putString(ENTITY_ID, input.id().toString()); + tag.putString(ENTITY_TYPE, input.type().asString()); + if (input.name() != null) { + tag.putString(ENTITY_NAME, componentCodec.encode(input.name())); + } + return TextComponent.of(SNBT_CODEC.encode(tag)); + } +} diff --git a/src/main/java/org/spongepowered/common/adventure/SpongeAdventure.java b/src/main/java/org/spongepowered/common/adventure/SpongeAdventure.java new file mode 100644 index 00000000000..7602013a8b8 --- /dev/null +++ b/src/main/java/org/spongepowered/common/adventure/SpongeAdventure.java @@ -0,0 +1,481 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.spongepowered.common.adventure; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.kyori.adventure.audience.MessageType; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.nbt.api.BinaryTagHolder; +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer; +import net.kyori.adventure.util.Codec; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.nbt.StringNBT; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.BossInfo; +import net.minecraft.world.ServerBossInfo; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.spongepowered.api.command.CommandCause; +import org.spongepowered.api.item.inventory.ItemStackSnapshot; +import org.spongepowered.api.adventure.SpongeComponents; +import org.spongepowered.common.bridge.adventure.BossBarBridge; +import org.spongepowered.common.bridge.adventure.ComponentBridge; +import org.spongepowered.common.bridge.adventure.StyleBridge; +import org.spongepowered.common.bridge.util.text.TextComponentBridge; +import org.spongepowered.common.bridge.world.BossInfoBridge; +import org.spongepowered.common.item.SpongeItemStackSnapshot; + +import java.io.IOException; +import java.util.List; +import java.util.Set; +import java.util.function.Consumer; + +public final class SpongeAdventure { + public static final GsonComponentSerializer GSON = GsonComponentSerializer.builder() + .legacyHoverEventSerializer(NbtLegacyHoverEventSerializer.INSTANCE) + .downsampleColors() // TODO(1.16) remove + .emitLegacyHoverEvent() // TODO(1.16) remove + .build(); + public static final Codec NBT_CODEC = new Codec() { + @Override + public @NonNull CompoundNBT decode(final @NonNull String encoded) throws IOException { + try { + return JsonToNBT.getTagFromJson(encoded); + } catch (final CommandSyntaxException e) { + throw new IOException(e); + } + } + + @Override + public @NonNull String encode(final @NonNull CompoundNBT decoded) { + return decoded.toString(); + } + }; + + public static Component legacy(final char character, final String string) { + return LegacyComponentSerializer.legacy(character).deserialize(string); + } + + public static String legacySection(final Component component) { + return legacy(LegacyComponentSerializer.SECTION_CHAR, component); + } + + public static String legacy(final char character, final Component component) { + return LegacyComponentSerializer.legacy(character).serialize(component); + } + + public static Component legacySection(final String string) { + return legacy(LegacyComponentSerializer.SECTION_CHAR, string); + } + + public static Component json(final String string) { + return GSON.deserialize(string); + } + + public static String json(final Component string) { + return GSON.serialize(string); + } + + public static String plain(final Component component) { + return PlainComponentSerializer.plain().serialize(component); + } + + public static ITextComponent asVanilla(final Component component) { + return ((ComponentBridge) component).bridge$asVanillaComponent(); + } + + public static Component asAdventure(final ITextComponent component) { + return ((TextComponentBridge) component).bridge$asAdventureComponent(); + } + + public static net.minecraft.util.text.Style asVanilla(final Style style) { + return ((StyleBridge) (Object) style).bridge$asVanilla(); + } + + public static TextFormatting asVanilla(final NamedTextColor color) { + if (color == NamedTextColor.BLACK) { + return TextFormatting.BLACK; + } else if (color == NamedTextColor.DARK_BLUE) { + return TextFormatting.DARK_BLUE; + } else if (color == NamedTextColor.DARK_GREEN) { + return TextFormatting.DARK_GREEN; + } else if (color == NamedTextColor.DARK_AQUA) { + return TextFormatting.DARK_AQUA; + } else if (color == NamedTextColor.DARK_RED) { + return TextFormatting.DARK_RED; + } else if (color == NamedTextColor.DARK_PURPLE) { + return TextFormatting.DARK_PURPLE; + } else if (color == NamedTextColor.GOLD) { + return TextFormatting.GOLD; + } else if (color == NamedTextColor.GRAY) { + return TextFormatting.GRAY; + } else if (color == NamedTextColor.DARK_GRAY) { + return TextFormatting.DARK_GRAY; + } else if (color == NamedTextColor.BLUE) { + return TextFormatting.BLUE; + } else if (color == NamedTextColor.GREEN) { + return TextFormatting.GREEN; + } else if (color == NamedTextColor.AQUA) { + return TextFormatting.AQUA; + } else if (color == NamedTextColor.RED) { + return TextFormatting.RED; + } else if (color == NamedTextColor.LIGHT_PURPLE) { + return TextFormatting.LIGHT_PURPLE; + } else if (color == NamedTextColor.YELLOW) { + return TextFormatting.YELLOW; + } else if (color == NamedTextColor.WHITE) { + return TextFormatting.WHITE; + } + throw new IllegalArgumentException(); + } + + public static @Nullable NamedTextColor asAdventureNamed(final @Nullable TextFormatting color) { + if (color == null) { + return null; + } + if (color == TextFormatting.BLACK) { + return NamedTextColor.BLACK; + } else if (color == TextFormatting.DARK_BLUE) { + return NamedTextColor.DARK_BLUE; + } else if (color == TextFormatting.DARK_GREEN) { + return NamedTextColor.DARK_GREEN; + } else if (color == TextFormatting.DARK_AQUA) { + return NamedTextColor.DARK_AQUA; + } else if (color == TextFormatting.DARK_RED) { + return NamedTextColor.DARK_RED; + } else if (color == TextFormatting.DARK_PURPLE) { + return NamedTextColor.DARK_PURPLE; + } else if (color == TextFormatting.GOLD) { + return NamedTextColor.GOLD; + } else if (color == TextFormatting.GRAY) { + return NamedTextColor.GRAY; + } else if (color == TextFormatting.DARK_GRAY) { + return NamedTextColor.DARK_GRAY; + } else if (color == TextFormatting.BLUE) { + return NamedTextColor.BLUE; + } else if (color == TextFormatting.GREEN) { + return NamedTextColor.GREEN; + } else if (color == TextFormatting.AQUA) { + return NamedTextColor.AQUA; + } else if (color == TextFormatting.RED) { + return NamedTextColor.RED; + } else if (color == TextFormatting.LIGHT_PURPLE) { + return NamedTextColor.LIGHT_PURPLE; + } else if (color == TextFormatting.YELLOW) { + return NamedTextColor.YELLOW; + } else if (color == TextFormatting.WHITE) { + return NamedTextColor.WHITE; + } + throw new IllegalArgumentException(); + } + + public static Boolean asVanilla(final TextDecoration.State state) { + if (state == TextDecoration.State.TRUE) { + return true; + } else if (state == TextDecoration.State.FALSE) { + return false; + } + return null; + } + + public static ChatType asVanilla(final MessageType type) { + if (type == MessageType.SYSTEM) { + return ChatType.SYSTEM; + } else if (type == MessageType.CHAT) { + return ChatType.CHAT; + } + throw new IllegalArgumentException(type.name()); + } + + public static HoverEvent.Action asAdventure(final net.minecraft.util.text.event.HoverEvent.Action action) { + if (action == net.minecraft.util.text.event.HoverEvent.Action.SHOW_TEXT) { + return HoverEvent.Action.SHOW_TEXT; + } else if (action == net.minecraft.util.text.event.HoverEvent.Action.SHOW_ITEM) { + return HoverEvent.Action.SHOW_ITEM; + } else if (action == net.minecraft.util.text.event.HoverEvent.Action.SHOW_ENTITY) { + return HoverEvent.Action.SHOW_ENTITY; + } + throw new IllegalArgumentException(action.toString()); + } + + public static net.minecraft.util.text.event.HoverEvent.Action asVanilla(final HoverEvent.Action action) { + if (action == HoverEvent.Action.SHOW_TEXT) { + return net.minecraft.util.text.event.HoverEvent.Action.SHOW_TEXT; + } else if (action == HoverEvent.Action.SHOW_ITEM) { + return net.minecraft.util.text.event.HoverEvent.Action.SHOW_ITEM; + } else if (action == HoverEvent.Action.SHOW_ENTITY) { + return net.minecraft.util.text.event.HoverEvent.Action.SHOW_ENTITY; + } + throw new IllegalArgumentException(action.toString()); + } + + public static ClickEvent.Action asAdventure(final net.minecraft.util.text.event.ClickEvent.Action action) { + if (action == net.minecraft.util.text.event.ClickEvent.Action.OPEN_URL) { + return ClickEvent.Action.OPEN_URL; + } else if (action == net.minecraft.util.text.event.ClickEvent.Action.OPEN_FILE) { + return ClickEvent.Action.OPEN_FILE; + } else if (action == net.minecraft.util.text.event.ClickEvent.Action.RUN_COMMAND) { + return ClickEvent.Action.RUN_COMMAND; + } else if (action == net.minecraft.util.text.event.ClickEvent.Action.SUGGEST_COMMAND) { + return ClickEvent.Action.SUGGEST_COMMAND; + } else if (action == net.minecraft.util.text.event.ClickEvent.Action.CHANGE_PAGE) { + return ClickEvent.Action.CHANGE_PAGE; + } + throw new IllegalArgumentException(action.toString()); + } + + public static net.minecraft.util.text.event.ClickEvent.Action asVanilla(final ClickEvent.Action action) { + if (action == ClickEvent.Action.OPEN_URL) { + return net.minecraft.util.text.event.ClickEvent.Action.OPEN_URL; + } else if (action == ClickEvent.Action.OPEN_FILE) { + return net.minecraft.util.text.event.ClickEvent.Action.OPEN_FILE; + } else if (action == ClickEvent.Action.RUN_COMMAND) { + return net.minecraft.util.text.event.ClickEvent.Action.RUN_COMMAND; + } else if (action == ClickEvent.Action.SUGGEST_COMMAND) { + return net.minecraft.util.text.event.ClickEvent.Action.SUGGEST_COMMAND; + } else if (action == ClickEvent.Action.CHANGE_PAGE) { + return net.minecraft.util.text.event.ClickEvent.Action.CHANGE_PAGE; + } else if (action == ClickEvent.Action.COPY_TO_CLIPBOARD) { + throw new UnsupportedOperationException("newer minecraft"); + } + throw new IllegalArgumentException(action.toString()); + } + + // Horrible-ness + + public static List json(final List strings) { + final List components = Lists.newArrayList(); + for (final String string : strings) { + components.add(json(string)); + } + return components; + } + + public static ListNBT listTagJson(final List components) { + final ListNBT nbt = new ListNBT(); + for (final Component component : components) { + nbt.add(new StringNBT(json(component))); + } + return nbt; + } + + // ----------------- + // ---- BossBar ---- + // ----------------- + + public static BossBar asAdventure(final BossInfo bar) { + return ((BossInfoBridge) bar).bridge$asAdventure(); + } + + public static ServerBossInfo asVanillaServer(final BossBar bar) { + return ((BossBarBridge) bar).bridge$asVanillaServerBar(); + } + + public static BossInfo.Color asVanilla(final BossBar.Color color) { + if(color == BossBar.Color.PINK) { + return BossInfo.Color.PINK; + } else if(color == BossBar.Color.BLUE) { + return BossInfo.Color.BLUE; + } else if(color == BossBar.Color.RED) { + return BossInfo.Color.RED; + } else if(color == BossBar.Color.GREEN) { + return BossInfo.Color.GREEN; + } else if(color == BossBar.Color.YELLOW) { + return BossInfo.Color.YELLOW; + } else if(color == BossBar.Color.PURPLE) { + return BossInfo.Color.PURPLE; + } else if(color == BossBar.Color.WHITE) { + return BossInfo.Color.WHITE; + } + throw new IllegalArgumentException(color.name()); + } + + public static BossBar.Color asAdventure(final BossInfo.Color color) { + if(color == BossInfo.Color.PINK) { + return BossBar.Color.PINK; + } else if(color == BossInfo.Color.BLUE) { + return BossBar.Color.BLUE; + } else if(color == BossInfo.Color.RED) { + return BossBar.Color.RED; + } else if(color == BossInfo.Color.GREEN) { + return BossBar.Color.GREEN; + } else if(color == BossInfo.Color.YELLOW) { + return BossBar.Color.YELLOW; + } else if(color == BossInfo.Color.PURPLE) { + return BossBar.Color.PURPLE; + } else if(color == BossInfo.Color.WHITE) { + return BossBar.Color.WHITE; + } + throw new IllegalArgumentException(color.name()); + } + + public static BossInfo.Overlay asVanilla(final BossBar.Overlay overlay) { + if (overlay == BossBar.Overlay.PROGRESS) { + return BossInfo.Overlay.PROGRESS; + } else if (overlay == BossBar.Overlay.NOTCHED_6) { + return BossInfo.Overlay.NOTCHED_6; + } else if (overlay == BossBar.Overlay.NOTCHED_10) { + return BossInfo.Overlay.NOTCHED_10; + } else if (overlay == BossBar.Overlay.NOTCHED_12) { + return BossInfo.Overlay.NOTCHED_12; + } else if (overlay == BossBar.Overlay.NOTCHED_20) { + return BossInfo.Overlay.NOTCHED_20; + } + throw new IllegalArgumentException(overlay.name()); + } + + public static BossBar.Overlay asAdventure(final BossInfo.Overlay overlay) { + if (overlay == BossInfo.Overlay.PROGRESS) { + return BossBar.Overlay.PROGRESS; + } else if (overlay == BossInfo.Overlay.NOTCHED_6) { + return BossBar.Overlay.NOTCHED_6; + } else if (overlay == BossInfo.Overlay.NOTCHED_10) { + return BossBar.Overlay.NOTCHED_10; + } else if (overlay == BossInfo.Overlay.NOTCHED_12) { + return BossBar.Overlay.NOTCHED_12; + } else if (overlay == BossInfo.Overlay.NOTCHED_20) { + return BossBar.Overlay.NOTCHED_20; + } + throw new IllegalArgumentException(overlay.name()); + } + + public static Set asAdventureFlags(final boolean darkenScreen, final boolean playBossMusic, final boolean createWorldFog) { + final ImmutableSet.Builder build = ImmutableSet.builder(); + if (darkenScreen) { + build.add(BossBar.Flag.DARKEN_SCREEN); + } + if (playBossMusic) { + build.add(BossBar.Flag.PLAY_BOSS_MUSIC); + } + if (createWorldFog) { + build.add(BossBar.Flag.CREATE_WORLD_FOG); + } + return build.build(); + } + + // NBT + + private static BinaryTagHolder asBinaryTagHolder(final CompoundNBT tag) { + try { + return BinaryTagHolder.encode(tag, NBT_CODEC); + } catch (final IOException e) { + return null; + } + } + + // Key + + public static ResourceLocation asVanilla(final Key key) { + if ((Object) key instanceof ResourceLocation) { + return (ResourceLocation) (Object) key; + } + return new ResourceLocation(key.namespace(), key.value()); + } + + public static @Nullable ResourceLocation asVanillaNullable(final @Nullable Key key) { + if (key == null) { + return null; + } + return asVanilla(key); + } + + // Sound + + public static Sound.Source asAdventure(final SoundCategory source) { + switch (source) { + case MASTER: return Sound.Source.MASTER; + case MUSIC: return Sound.Source.MUSIC; + case RECORDS: return Sound.Source.RECORD; + case WEATHER: return Sound.Source.WEATHER; + case BLOCKS: return Sound.Source.BLOCK; + case HOSTILE: return Sound.Source.HOSTILE; + case NEUTRAL: return Sound.Source.NEUTRAL; + case PLAYERS: return Sound.Source.PLAYER; + case AMBIENT: return Sound.Source.AMBIENT; + case VOICE: return Sound.Source.VOICE; + } + throw new IllegalArgumentException(source.name()); + } + + public static SoundCategory asVanilla(final Sound.Source source) { + switch (source) { + case MASTER: return SoundCategory.MASTER; + case MUSIC: return SoundCategory.MUSIC; + case RECORD: return SoundCategory.RECORDS; + case WEATHER: return SoundCategory.WEATHER; + case BLOCK: return SoundCategory.BLOCKS; + case HOSTILE: return SoundCategory.HOSTILE; + case NEUTRAL: return SoundCategory.NEUTRAL; + case PLAYER: return SoundCategory.PLAYERS; + case AMBIENT: return SoundCategory.AMBIENT; + case VOICE: return SoundCategory.VOICE; + } + throw new IllegalArgumentException(source.name()); + } + + public static @Nullable SoundCategory asVanillaNullable(final Sound.@Nullable Source source) { + if (source == null) { + return null; + } + return asVanilla(source); + } + + public static class Factory implements SpongeComponents.Factory { + @Override + public @NonNull HoverEvent showItem(final @NonNull ItemStackSnapshot item) { + final BinaryTagHolder nbt; + final CompoundNBT tag = ((SpongeItemStackSnapshot) item).getCompound().orElse(null); + if (tag != null) { + nbt = asBinaryTagHolder(((SpongeItemStackSnapshot) item).getCompound().orElse(null)); + } else { + nbt = null; + } + return HoverEvent.showItem(new HoverEvent.ShowItem(item.getType().getKey(), item.getQuantity(), nbt)); + } + + @Override + public ClickEvent callbackClickEvent(final Consumer callback) { + throw new UnsupportedOperationException("TODO"); + } + } +} diff --git a/src/main/java/org/spongepowered/common/ban/SpongeBanBuilder.java b/src/main/java/org/spongepowered/common/ban/SpongeBanBuilder.java index ada0f86b6d4..b307807a5ee 100644 --- a/src/main/java/org/spongepowered/common/ban/SpongeBanBuilder.java +++ b/src/main/java/org/spongepowered/common/ban/SpongeBanBuilder.java @@ -28,16 +28,16 @@ import static com.google.common.base.Preconditions.checkState; import com.mojang.authlib.GameProfile; +import net.kyori.adventure.text.Component; import net.minecraft.server.management.IPBanEntry; import net.minecraft.server.management.IPBanList; import net.minecraft.server.management.ProfileBanEntry; -import org.spongepowered.api.text.Text; import org.spongepowered.api.util.ban.Ban; import org.spongepowered.api.util.ban.BanType; import org.spongepowered.api.util.ban.BanTypes; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.accessor.server.management.IPBanListAccessor; -import org.spongepowered.common.text.SpongeTexts; +import org.spongepowered.common.adventure.SpongeAdventure; import javax.annotation.Nullable; import java.net.InetAddress; @@ -50,10 +50,10 @@ public final class SpongeBanBuilder implements Ban.Builder { private org.spongepowered.api.profile.GameProfile profile; private InetAddress address; private BanType banType; - @Nullable private Text reason; + @Nullable private Component reason; private Instant start = Instant.now(); @Nullable private Instant end; - @Nullable private Text source; + @Nullable private Component source; @Override public Ban.Builder profile(final org.spongepowered.api.profile.GameProfile profile) { @@ -85,7 +85,7 @@ public Ban.Builder type(final BanType type) { } @Override - public Ban.Builder reason(@Nullable final Text reason) { + public Ban.Builder reason(@Nullable final Component reason) { this.reason = reason; return this; } @@ -104,7 +104,7 @@ public Ban.Builder expirationDate(@Nullable final Instant instant) { } @Override - public Ban.Builder source(@Nullable final Text source) { + public Ban.Builder source(@Nullable final Component source) { this.source = source; return this; } @@ -113,13 +113,13 @@ public Ban.Builder source(@Nullable final Text source) { public Ban build() { checkState(this.banType != null, "BanType cannot be null!"); - final String sourceName = this.source != null ? SpongeTexts.toLegacy(this.source) : null; + final String sourceName = this.source != null ? SpongeAdventure.legacySection(this.source) : null; if (this.banType == BanTypes.PROFILE.get()) { checkState(this.profile != null, "User cannot be null!"); return (Ban) new ProfileBanEntry((GameProfile) this.profile, Date.from(this.start), sourceName, this.toDate(this.end), - this.reason != null ? SpongeTexts.toLegacy(this.reason) : null); + this.reason != null ? SpongeAdventure.legacySection(this.reason) : null); } checkState(this.address != null, "Address cannot be null!"); @@ -130,7 +130,7 @@ public Ban build() { Date.from(this.start), sourceName, this.toDate(this.end), - this.reason != null ? SpongeTexts.toLegacy(this.reason) : null); + this.reason != null ? SpongeAdventure.legacySection(this.reason) : null); } private Date toDate(final Instant instant) { diff --git a/src/main/java/org/spongepowered/common/boss/ServerBossBarBuilder.java b/src/main/java/org/spongepowered/common/boss/ServerBossBarBuilder.java deleted file mode 100644 index 95b2b585335..00000000000 --- a/src/main/java/org/spongepowered/common/boss/ServerBossBarBuilder.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.boss; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; - -import net.minecraft.world.BossInfo; -import net.minecraft.world.ServerBossInfo; -import org.spongepowered.api.boss.BossBarColor; -import org.spongepowered.api.boss.BossBarOverlay; -import org.spongepowered.api.boss.ServerBossBar; -import org.spongepowered.api.text.Text; -import org.spongepowered.common.text.SpongeTexts; - -import javax.annotation.Nullable; - -public final class ServerBossBarBuilder implements ServerBossBar.Builder { - - @Nullable private Text name; - private float percent; - @Nullable private BossBarColor color; - @Nullable private BossBarOverlay overlay; - private boolean darkenSky; - private boolean playEndBossMusic; - private boolean createFog; - private boolean visible = true; - - @Override - public ServerBossBar.Builder name(final Text name) { - this.name = name; - return this; - } - - @Override - public ServerBossBar.Builder percent(final float percent) { - checkArgument(percent >= 0.0 && percent <= 1.0, "percent must be between 0.0f and 1.0f (was %s)", percent); - this.percent = percent; - return this; - } - - @Override - public ServerBossBar.Builder color(final BossBarColor color) { - this.color = checkNotNull(color, "color"); - return this; - } - - @Override - public ServerBossBar.Builder overlay(final BossBarOverlay overlay) { - this.overlay = checkNotNull(overlay, "overlay"); - return this; - } - - @Override - public ServerBossBar.Builder darkenSky(final boolean darkenSky) { - this.darkenSky = darkenSky; - return this; - } - - @Override - public ServerBossBar.Builder playEndBossMusic(final boolean playEndBossMusic) { - this.playEndBossMusic = playEndBossMusic; - return this; - } - - @Override - public ServerBossBar.Builder createFog(final boolean createFog) { - this.createFog = createFog; - return this; - } - - @Override - public ServerBossBar.Builder visible(final boolean visible) { - this.visible = visible; - return this; - } - - @Override - public ServerBossBar.Builder from(final ServerBossBar value) { - this.name = value.getName(); - this.percent = value.getPercent(); - this.color = value.getColor(); - this.overlay = value.getOverlay(); - this.darkenSky = value.shouldDarkenSky(); - this.playEndBossMusic = value.shouldPlayEndBossMusic(); - this.createFog = value.shouldCreateFog(); - this.visible = value.isVisible(); - return this; - } - - @Override - public ServerBossBar.Builder reset() { - this.name = null; - this.percent = 0.0f; - this.color = null; - this.overlay = null; - this.darkenSky = false; - this.playEndBossMusic = false; - this.createFog = false; - this.visible = true; - return this; - } - - @Override - public ServerBossBar build() { - checkState(this.name != null, "name must be set"); - checkState(this.color != null, "color must be set"); - checkState(this.overlay != null, "overlay must be set"); - - final ServerBossInfo bar = new ServerBossInfo( - SpongeTexts.toComponent(this.name), - (BossInfo.Color) (Object) this.color, - (BossInfo.Overlay) (Object) this.overlay - ); - bar.setPercent(this.percent); - bar.setDarkenSky(this.darkenSky); - bar.setPlayEndBossMusic(this.playEndBossMusic); - bar.setCreateFog(this.createFog); - bar.setVisible(this.visible); - - return (ServerBossBar) bar; - } - -} diff --git a/src/main/java/org/spongepowered/common/bridge/advancements/AdvancementBridge.java b/src/main/java/org/spongepowered/common/bridge/advancements/AdvancementBridge.java index 6db688c2e6a..29942571a66 100644 --- a/src/main/java/org/spongepowered/common/bridge/advancements/AdvancementBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/advancements/AdvancementBridge.java @@ -24,12 +24,11 @@ */ package org.spongepowered.common.bridge.advancements; +import net.kyori.adventure.text.Component; import net.minecraft.advancements.Advancement; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.advancement.AdvancementTree; import org.spongepowered.api.advancement.criteria.AdvancementCriterion; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.translation.Translation; import java.util.List; import java.util.Optional; @@ -40,10 +39,6 @@ public interface AdvancementBridge { ResourceKey bridge$getKey(); - Translation bridge$getTranslation(); - - void bridge$setTranslation(Translation translation); - Optional bridge$getParent(); void bridge$setParent(@Nullable Advancement advancement); @@ -60,7 +55,7 @@ public interface AdvancementBridge { void bridge$setRegistered(); - Text bridge$getText(); + Component bridge$getText(); - List bridge$getToastText(); + List bridge$getToastText(); } diff --git a/src/main/java/org/spongepowered/common/bridge/api/text/title/TitleBridge.java b/src/main/java/org/spongepowered/common/bridge/adventure/BossBarBridge.java similarity index 86% rename from src/main/java/org/spongepowered/common/bridge/api/text/title/TitleBridge.java rename to src/main/java/org/spongepowered/common/bridge/adventure/BossBarBridge.java index 7f4287d5c06..b5b235fff5c 100644 --- a/src/main/java/org/spongepowered/common/bridge/api/text/title/TitleBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/adventure/BossBarBridge.java @@ -22,11 +22,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.bridge.api.text.title; +package org.spongepowered.common.bridge.adventure; -import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.world.ServerBossInfo; -public interface TitleBridge { - - void bridge$send(ServerPlayerEntity player); +public interface BossBarBridge { + ServerBossInfo bridge$asVanillaServerBar(); } diff --git a/src/main/java/org/spongepowered/common/bridge/util/text/event/ClickEventBridge.java b/src/main/java/org/spongepowered/common/bridge/adventure/ComponentBridge.java similarity index 84% rename from src/main/java/org/spongepowered/common/bridge/util/text/event/ClickEventBridge.java rename to src/main/java/org/spongepowered/common/bridge/adventure/ComponentBridge.java index 8c32cf54207..c8701819dd5 100644 --- a/src/main/java/org/spongepowered/common/bridge/util/text/event/ClickEventBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/adventure/ComponentBridge.java @@ -22,13 +22,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.bridge.util.text.event; +package org.spongepowered.common.bridge.adventure; -import org.spongepowered.api.text.action.ClickAction; +import net.minecraft.util.text.ITextComponent; -public interface ClickEventBridge { - - ClickAction bridge$getHandle(); - - void bridge$setHandle(ClickAction handle); +public interface ComponentBridge { + ITextComponent bridge$asVanillaComponent(); } diff --git a/src/main/java/org/spongepowered/common/bridge/util/text/event/HoverEventBridge.java b/src/main/java/org/spongepowered/common/bridge/adventure/StyleBridge.java similarity index 84% rename from src/main/java/org/spongepowered/common/bridge/util/text/event/HoverEventBridge.java rename to src/main/java/org/spongepowered/common/bridge/adventure/StyleBridge.java index 35c826b66fc..c2f900054fd 100644 --- a/src/main/java/org/spongepowered/common/bridge/util/text/event/HoverEventBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/adventure/StyleBridge.java @@ -22,13 +22,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.bridge.util.text.event; +package org.spongepowered.common.bridge.adventure; -import org.spongepowered.api.text.action.HoverAction; +import net.minecraft.util.text.Style; -public interface HoverEventBridge { - - HoverAction bridge$getHandle(); - - void bridge$setHandle(HoverAction handle); +public interface StyleBridge { + Style bridge$asVanilla(); } diff --git a/src/main/java/org/spongepowered/common/bridge/entity/EntityBridge.java b/src/main/java/org/spongepowered/common/bridge/entity/EntityBridge.java index 09f8e7481fb..9d395cc2265 100644 --- a/src/main/java/org/spongepowered/common/bridge/entity/EntityBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/entity/EntityBridge.java @@ -24,11 +24,11 @@ */ package org.spongepowered.common.bridge.entity; +import net.kyori.adventure.text.Component; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.event.cause.entity.dismount.DismountType; -import org.spongepowered.api.text.Text; import org.spongepowered.api.util.Transform; import org.spongepowered.common.event.tracking.phase.tick.EntityTickContext; import org.spongepowered.math.vector.Vector3d; @@ -58,9 +58,9 @@ public interface EntityBridge { void bridge$setImplVelocity(Vector3d velocity); - @Nullable Text bridge$getDisplayNameText(); + @Nullable Component bridge$getDisplayNameText(); - void bridge$setDisplayName(@Nullable Text displayName); + void bridge$setDisplayName(@Nullable Component displayName); @Nullable BlockPos bridge$getLastCollidedBlockPos(); diff --git a/src/main/java/org/spongepowered/common/bridge/entity/player/ChatVisibilityBridge.java b/src/main/java/org/spongepowered/common/bridge/entity/player/ChatVisibilityBridge.java index 5e9039d1a82..16270670805 100644 --- a/src/main/java/org/spongepowered/common/bridge/entity/player/ChatVisibilityBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/entity/player/ChatVisibilityBridge.java @@ -24,13 +24,13 @@ */ package org.spongepowered.common.bridge.entity.player; -import org.spongepowered.api.text.chat.ChatType; +import net.kyori.adventure.audience.MessageType; import java.util.Set; public interface ChatVisibilityBridge { - void bridge$setChatTypes(Set chatTypes); + void bridge$setChatTypes(Set types); - Set bridge$getVisibleChatTypes(); + Set bridge$getVisibleChatTypes(); } diff --git a/src/main/java/org/spongepowered/common/bridge/entity/player/ServerPlayerEntityBridge.java b/src/main/java/org/spongepowered/common/bridge/entity/player/ServerPlayerEntityBridge.java index 18b718fc0cc..0781bce7e12 100644 --- a/src/main/java/org/spongepowered/common/bridge/entity/player/ServerPlayerEntityBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/entity/player/ServerPlayerEntityBridge.java @@ -24,6 +24,7 @@ */ package org.spongepowered.common.bridge.entity.player; +import net.kyori.adventure.text.Component; import net.minecraft.block.BlockState; import net.minecraft.entity.ai.attributes.IAttributeInstance; import net.minecraft.entity.player.ServerPlayerEntity; @@ -34,8 +35,6 @@ import org.spongepowered.api.data.type.SkinPart; import org.spongepowered.api.entity.living.player.User; import org.spongepowered.api.scoreboard.Scoreboard; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.channel.MessageChannel; import org.spongepowered.common.world.border.PlayerOwnBorderListener; import org.spongepowered.math.vector.Vector3d; @@ -59,8 +58,6 @@ public interface ServerPlayerEntityBridge { void bridge$sendBlockChange(BlockPos pos, BlockState state); - MessageChannel bridge$getDeathMessageChannel(); - void bridge$initScoreboard(); void bridge$removeScoreboardOnRespawn(); @@ -89,7 +86,7 @@ public interface ServerPlayerEntityBridge { boolean bridge$hasForcedGamemodeOverridePermission(); - void bridge$setContainerDisplay(Text displayName); + void bridge$setContainerDisplay(Component displayName); void bridge$setDelegateAfterRespawn(ServerPlayerEntity delegate); diff --git a/src/main/java/org/spongepowered/common/bridge/network/ServerStatusResponseBridge.java b/src/main/java/org/spongepowered/common/bridge/network/ServerStatusResponseBridge.java index 401d2251672..d8e70672271 100644 --- a/src/main/java/org/spongepowered/common/bridge/network/ServerStatusResponseBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/network/ServerStatusResponseBridge.java @@ -24,16 +24,16 @@ */ package org.spongepowered.common.bridge.network; +import net.kyori.adventure.text.Component; import net.minecraft.network.ServerStatusResponse; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.network.status.Favicon; -import org.spongepowered.api.text.Text; public interface ServerStatusResponseBridge { - Text bridge$getDescription(); + Component bridge$getDescription(); - void bridge$setDescription(@Nullable Text text); + void bridge$setDescription(@Nullable Component text); @Nullable Favicon bridge$getFavicon(); diff --git a/src/main/java/org/spongepowered/common/bridge/scoreboard/ScorePlayerTeamBridge.java b/src/main/java/org/spongepowered/common/bridge/scoreboard/ScorePlayerTeamBridge.java index a23c9339f99..7b13880c201 100644 --- a/src/main/java/org/spongepowered/common/bridge/scoreboard/ScorePlayerTeamBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/scoreboard/ScorePlayerTeamBridge.java @@ -24,28 +24,28 @@ */ package org.spongepowered.common.bridge.scoreboard; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.minecraft.entity.player.ServerPlayerEntity; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.channel.MessageChannel; -import org.spongepowered.api.text.format.TextColor; public interface ScorePlayerTeamBridge { - Text bridge$getDisplayName(); + Component bridge$getDisplayName(); - void bridge$setDisplayName(Text text); + void bridge$setDisplayName(Component text); - Text bridge$getPrefix(); + Component bridge$getPrefix(); - void bridge$setPrefix(Text text); + void bridge$setPrefix(Component text); - Text bridge$getSuffix(); + Component bridge$getSuffix(); - void bridge$setSuffix(Text suffix); + void bridge$setSuffix(Component suffix); - void bridge$setColor(TextColor color); + void bridge$setColor(NamedTextColor color); - MessageChannel bridge$getTeamChannel(ServerPlayerEntity player); + Audience bridge$getTeamChannel(ServerPlayerEntity player); - MessageChannel bridge$getNonTeamChannel(); + Audience bridge$getNonTeamChannel(); } diff --git a/src/main/java/org/spongepowered/common/bridge/scoreboard/TeamBridge.java b/src/main/java/org/spongepowered/common/bridge/scoreboard/TeamBridge.java index 534be6e155e..90414d0540e 100644 --- a/src/main/java/org/spongepowered/common/bridge/scoreboard/TeamBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/scoreboard/TeamBridge.java @@ -24,9 +24,9 @@ */ package org.spongepowered.common.bridge.scoreboard; -import org.spongepowered.api.text.format.TextColor; +import net.kyori.adventure.text.format.NamedTextColor; public interface TeamBridge { - TextColor bridge$getColor(); + NamedTextColor bridge$getColor(); } diff --git a/src/main/java/org/spongepowered/common/bridge/server/management/BanUserListEntryBridge.java b/src/main/java/org/spongepowered/common/bridge/server/management/BanUserListEntryBridge.java index e7eca497fe8..cf2f5b6b6dc 100644 --- a/src/main/java/org/spongepowered/common/bridge/server/management/BanUserListEntryBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/server/management/BanUserListEntryBridge.java @@ -24,14 +24,14 @@ */ package org.spongepowered.common.bridge.server.management; -import org.spongepowered.api.text.Text; +import net.kyori.adventure.text.Component; import java.util.Optional; public interface BanUserListEntryBridge { - Optional bridge$getReason(); + Optional bridge$getReason(); - Optional bridge$getSource(); + Optional bridge$getSource(); } diff --git a/src/main/java/org/spongepowered/common/bridge/util/text/StyleBridge.java b/src/main/java/org/spongepowered/common/bridge/util/text/StyleBridge.java new file mode 100644 index 00000000000..7ee20825f21 --- /dev/null +++ b/src/main/java/org/spongepowered/common/bridge/util/text/StyleBridge.java @@ -0,0 +1,31 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.spongepowered.common.bridge.util.text; + +import net.kyori.adventure.text.format.Style; + +public interface StyleBridge { + Style bridge$asAdventure(); +} diff --git a/src/main/java/org/spongepowered/common/bridge/util/text/TextComponentBridge.java b/src/main/java/org/spongepowered/common/bridge/util/text/TextComponentBridge.java index 7f23878a3f3..17975803f12 100644 --- a/src/main/java/org/spongepowered/common/bridge/util/text/TextComponentBridge.java +++ b/src/main/java/org/spongepowered/common/bridge/util/text/TextComponentBridge.java @@ -24,24 +24,8 @@ */ package org.spongepowered.common.bridge.util.text; -import net.minecraft.util.text.ITextComponent; -import org.spongepowered.api.text.Text; - -import java.util.Iterator; +import net.kyori.adventure.text.Component; public interface TextComponentBridge { - - Iterator bridge$childrenIterator(); - - Iterable bridge$withChildren(); - - String bridge$toPlain(); - - String bridge$getLegacyFormatting(); - - String bridge$toLegacy(char code); - - String bridge$toLegacySingle(char code); - - Text bridge$toText(); + Component bridge$asAdventureComponent(); } diff --git a/src/main/java/org/spongepowered/common/bridge/world/BossInfoBridge.java b/src/main/java/org/spongepowered/common/bridge/world/BossInfoBridge.java new file mode 100644 index 00000000000..bfe048002d3 --- /dev/null +++ b/src/main/java/org/spongepowered/common/bridge/world/BossInfoBridge.java @@ -0,0 +1,18 @@ +package org.spongepowered.common.bridge.world; + +import net.kyori.adventure.bossbar.BossBar; + +public interface BossInfoBridge { + /** + * Update this bar's info from its adventure equivalent. + * + *

The adventure bits

+ * + * @param adventure adventure boss bar + */ + void bridge$copyAndAssign(BossBar adventure); + + BossBar bridge$asAdventure(); + + void bridge$setAdventure(BossBar adventure); +} diff --git a/src/main/java/org/spongepowered/common/command/SpongeParameterizedCommand.java b/src/main/java/org/spongepowered/common/command/SpongeParameterizedCommand.java index f376d768fa4..a31eae82e37 100644 --- a/src/main/java/org/spongepowered/common/command/SpongeParameterizedCommand.java +++ b/src/main/java/org/spongepowered/common/command/SpongeParameterizedCommand.java @@ -31,6 +31,8 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.tree.CommandNode; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.command.CommandSource; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.command.Command; @@ -40,7 +42,6 @@ import org.spongepowered.api.command.exception.CommandException; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.TranslatedParameter; import java.util.List; @@ -53,16 +54,16 @@ public final class SpongeParameterizedCommand implements Command.Parameterized { private final TranslatedParameter associatedCommandNode; private final List parameters; - private final Function> shortDescription; - private final Function> extendedDescription; + private final Function> shortDescription; + private final Function> extendedDescription; private final Predicate executionRequirements; private final CommandExecutor executor; SpongeParameterizedCommand( final TranslatedParameter associatedCommandNode, final List parameters, - final Function> shortDescription, - final Function> extendedDescription, + final Function> shortDescription, + final Function> extendedDescription, final Predicate executionRequirements, final CommandExecutor executor) { this.associatedCommandNode = associatedCommandNode; @@ -90,20 +91,19 @@ public boolean canExecute(@NonNull final CommandCause cause) { @Override @NonNull - public Optional getShortDescription(@NonNull final CommandCause cause) { + public Optional getShortDescription(@NonNull final CommandCause cause) { return this.shortDescription.apply(cause); } @Override @NonNull - public Optional getExtendedDescription(@NonNull final CommandCause cause) { + public Optional getExtendedDescription(@NonNull final CommandCause cause) { return this.extendedDescription.apply(cause); } @Override - @NonNull - public Text getUsage(@NonNull final CommandCause cause) { - return Text.of(this.associatedCommandNode.getSourceCommandNode() + public @NonNull Component getUsage(final @NonNull CommandCause cause) { + return TextComponent.of(this.associatedCommandNode.getSourceCommandNode() .getChildrenForSuggestions().stream().map(CommandNode::getUsageText).collect(Collectors.joining("|"))); } diff --git a/src/main/java/org/spongepowered/common/command/SpongeParameterizedCommandBuilder.java b/src/main/java/org/spongepowered/common/command/SpongeParameterizedCommandBuilder.java index 4a6662e64fb..462aacc60d6 100644 --- a/src/main/java/org/spongepowered/common/command/SpongeParameterizedCommandBuilder.java +++ b/src/main/java/org/spongepowered/common/command/SpongeParameterizedCommandBuilder.java @@ -26,13 +26,13 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.command.Command; import org.spongepowered.api.command.CommandCause; import org.spongepowered.api.command.CommandExecutor; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.SpongeParameterTranslator; import org.spongepowered.common.command.brigadier.TranslatedParameter; import org.spongepowered.common.command.parameter.subcommand.SpongeSubcommandParameterBuilder; @@ -54,8 +54,8 @@ public final class SpongeParameterizedCommandBuilder implements Command.Paramete private final Map> subcommands = new HashMap<>(); private final List parameters = new ArrayList<>(); @Nullable private CommandExecutor commandExecutor; - @Nullable private Function> extendedDescription; - @Nullable private Function> shortDescription; + @Nullable private Function> extendedDescription; + @Nullable private Function> shortDescription; @Nullable private Predicate executionRequirements; @Override @@ -86,13 +86,13 @@ public final class SpongeParameterizedCommandBuilder implements Command.Paramete } @Override - public Command.@NonNull Builder setExtendedDescription(@NonNull final Function> extendedDescriptionFunction) { + public Command.@NonNull Builder setExtendedDescription(@NonNull final Function> extendedDescriptionFunction) { this.extendedDescription = extendedDescriptionFunction; return this; } @Override - public Command.@NonNull Builder setShortDescription(@NonNull final Function> descriptionFunction) { + public Command.@NonNull Builder setShortDescription(@NonNull final Function> descriptionFunction) { this.shortDescription = descriptionFunction; return this; } diff --git a/src/main/java/org/spongepowered/common/command/brigadier/SpongeImmutableArgumentReader.java b/src/main/java/org/spongepowered/common/command/brigadier/SpongeImmutableArgumentReader.java index 0d322ccc154..f017a9f8126 100644 --- a/src/main/java/org/spongepowered/common/command/brigadier/SpongeImmutableArgumentReader.java +++ b/src/main/java/org/spongepowered/common/command/brigadier/SpongeImmutableArgumentReader.java @@ -26,10 +26,10 @@ import com.mojang.brigadier.ImmutableStringReader; import com.mojang.brigadier.StringReader; +import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; -import org.spongepowered.api.text.Text; public final class SpongeImmutableArgumentReader implements ArgumentReader.Immutable, ImmutableStringReader { @@ -95,7 +95,7 @@ public boolean canRead() { @Override @NonNull - public ArgumentParseException createException(@NonNull final Text errorMessage) { + public ArgumentParseException createException(@NonNull final Component errorMessage) { return new ArgumentParseException(errorMessage, this.getInput(), this.getCursor()); } diff --git a/src/main/java/org/spongepowered/common/command/brigadier/SpongeStringReader.java b/src/main/java/org/spongepowered/common/command/brigadier/SpongeStringReader.java index bbd8b77b0a6..cdd66f880a2 100644 --- a/src/main/java/org/spongepowered/common/command/brigadier/SpongeStringReader.java +++ b/src/main/java/org/spongepowered/common/command/brigadier/SpongeStringReader.java @@ -24,19 +24,18 @@ */ package org.spongepowered.common.command.brigadier; -import static org.spongepowered.common.util.SpongeCommonTranslationHelper.t; - import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.nbt.*; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; -import org.spongepowered.api.text.Text; import java.util.regex.Pattern; @@ -80,7 +79,7 @@ public int parseInt() throws ArgumentParseException { try { return this.readInt(); } catch (final CommandSyntaxException e) { - throw new ArgumentParseException(t("Could not parse an integer"), e, this.getString(), this.getCursor()); + throw new ArgumentParseException(TextComponent.of("Could not parse an integer"), e, this.getString(), this.getCursor()); } } @@ -89,7 +88,7 @@ public double parseDouble() throws ArgumentParseException { try { return this.readDouble(); } catch (final CommandSyntaxException e) { - throw new ArgumentParseException(t("Could not parse a double"), e, this.getString(), this.getCursor()); + throw new ArgumentParseException(TextComponent.of("Could not parse a double"), e, this.getString(), this.getCursor()); } } @@ -98,7 +97,7 @@ public float parseFloat() throws ArgumentParseException { try { return this.readFloat(); } catch (final CommandSyntaxException e) { - throw new ArgumentParseException(t("Could not parse a float"), e, this.getString(), this.getCursor()); + throw new ArgumentParseException(TextComponent.of("Could not parse a float"), e, this.getString(), this.getCursor()); } } @@ -122,7 +121,7 @@ public String parseString() throws ArgumentParseException { return this.readUnquotedString(); } } catch (final CommandSyntaxException e) { - throw new ArgumentParseException(t("Could not parse string"), e, this.getString(), this.getCursor()); + throw new ArgumentParseException(TextComponent.of("Could not parse string"), e, this.getString(), this.getCursor()); } } @@ -139,7 +138,7 @@ public boolean parseBoolean() throws ArgumentParseException { try { return this.readBoolean(); } catch (final CommandSyntaxException e) { - throw new ArgumentParseException(t("Could not parse a boolean"), e, this.getString(), this.getCursor()); + throw new ArgumentParseException(TextComponent.of("Could not parse a boolean"), e, this.getString(), this.getCursor()); } } @@ -178,12 +177,12 @@ public void setState(@NonNull final ArgumentReader state) throws IllegalArgument @Override @NonNull - public ArgumentParseException createException(@NonNull final Text errorMessage) { + public ArgumentParseException createException(@NonNull final Component errorMessage) { return new ArgumentParseException(errorMessage, this.getInput(), this.getCursor()); } @NonNull - public ArgumentParseException createException(@NonNull final Text errorMessage, @NonNull Throwable inner) { + public ArgumentParseException createException(@NonNull final Component errorMessage, @NonNull Throwable inner) { return new ArgumentParseException(errorMessage, inner, this.getInput(), this.getCursor()); } @@ -191,7 +190,7 @@ public ArgumentParseException createException(@NonNull final Text errorMessage, protected String readKey() throws ArgumentParseException { this.skipWhitespace(); if (!this.canRead()) { - throw this.createException(Text.of("Unable to read JSON key")); + throw this.createException(TextComponent.of("Unable to read JSON key")); } else { return this.getString(); } @@ -200,7 +199,7 @@ protected String readKey() throws ArgumentParseException { public void readValue() throws ArgumentParseException { this.skipWhitespace(); if (!this.canRead()) { - throw this.createException(Text.of("Unable to read JSON value")); + throw this.createException(TextComponent.of("Unable to read JSON value")); } else { final char c0 = this.peek(); if (c0 == '{') { @@ -230,20 +229,20 @@ public void readStruct() throws ArgumentParseException { while(this.canRead() && this.peek() != '}') { final String s = this.readKey(); if (s.isEmpty()) { - throw this.createException(Text.of("Unable to read JSON key")); + throw this.createException(TextComponent.of("Unable to read JSON key")); } try { this.expect(':'); } catch (final CommandSyntaxException e) { - throw this.createException(Text.of(e.getMessage())); + throw this.createException(TextComponent.of(e.getMessage())); } if (!this.hasElementSeparator()) { break; } if (!this.canRead()) { - throw this.createException(Text.of("Unable to read JSON key")); + throw this.createException(TextComponent.of("Unable to read JSON key")); } } @@ -254,7 +253,7 @@ private void readListTag() throws ArgumentParseException { this.expectAfterWhitespace('['); this.skipWhitespace(); if (!this.canRead()) { - throw this.createException(Text.of("Unable to read JSON list")); + throw this.createException(TextComponent.of("Unable to read JSON list")); } else { while(this.peek() != ']') { this.readValue(); @@ -263,7 +262,7 @@ private void readListTag() throws ArgumentParseException { } if (!this.canRead()) { - throw this.createException(Text.of("Unable to read JSON value")); + throw this.createException(TextComponent.of("Unable to read JSON value")); } } @@ -277,7 +276,7 @@ private void readArrayTag() throws ArgumentParseException { this.read(); this.skipWhitespace(); if (!this.canRead()) { - throw this.createException(Text.of("Unable to read JSON array")); + throw this.createException(TextComponent.of("Unable to read JSON array")); } this.readArray(); } @@ -288,7 +287,7 @@ private void readArray() throws ArgumentParseException { this.readValue(); if (this.hasElementSeparator()) { if (!this.canRead()) { - throw this.createException(Text.of("Unable to read JSON value")); + throw this.createException(TextComponent.of("Unable to read JSON value")); } continue; } @@ -315,7 +314,7 @@ private void expectAfterWhitespace(final char expected) throws ArgumentParseExce try { this.expect(expected); } catch (final CommandSyntaxException e) { - throw this.createException(Text.of(e.getMessage())); + throw this.createException(TextComponent.of(e.getMessage())); } } } diff --git a/src/main/java/org/spongepowered/common/command/brigadier/argument/CatalogedZeroAdvanceValueParameter.java b/src/main/java/org/spongepowered/common/command/brigadier/argument/CatalogedZeroAdvanceValueParameter.java index acca0456b6b..8ecaa5ddae8 100644 --- a/src/main/java/org/spongepowered/common/command/brigadier/argument/CatalogedZeroAdvanceValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/brigadier/argument/CatalogedZeroAdvanceValueParameter.java @@ -33,7 +33,6 @@ import org.spongepowered.api.command.parameter.Parameter; import org.spongepowered.api.command.parameter.managed.clientcompletion.ClientCompletionType; import org.spongepowered.api.command.parameter.managed.clientcompletion.ClientCompletionTypes; -import org.spongepowered.api.text.Text; import org.spongepowered.common.util.Constants; import java.util.List; diff --git a/src/main/java/org/spongepowered/common/command/brigadier/argument/CustomArgumentParser.java b/src/main/java/org/spongepowered/common/command/brigadier/argument/CustomArgumentParser.java index b71480308cc..b1a66c827ce 100644 --- a/src/main/java/org/spongepowered/common/command/brigadier/argument/CustomArgumentParser.java +++ b/src/main/java/org/spongepowered/common/command/brigadier/argument/CustomArgumentParser.java @@ -32,6 +32,7 @@ import com.mojang.brigadier.suggestion.SuggestionProvider; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import net.kyori.adventure.text.TextComponent; import net.minecraft.command.CommandSource; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; @@ -39,7 +40,6 @@ import org.spongepowered.api.command.parameter.managed.ValueCompleter; import org.spongepowered.api.command.parameter.managed.ValueParser; import org.spongepowered.api.command.parameter.managed.clientcompletion.ClientCompletionType; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.SpongeStringReader; import org.spongepowered.common.command.brigadier.context.SpongeCommandContext; import org.spongepowered.common.command.brigadier.context.SpongeCommandContextBuilder; @@ -116,9 +116,7 @@ public T parse(final Parameter.Key key, final SpongeCommandContextBui .createWithContext(reader, exceptions); /* throw CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherParseException() .createWithContext(reader, - Text.joinWith(Text.newLine(), exceptions.stream() - .map(ArgumentParseException::getSuperText) - .collect(Collectors.toList()))); */ + TextComponent.join(TextComponent.newline(), exceptions.stream().map(ArgumentParseException::getSuperText).collect(Collectors.toList()))); */ } // TODO: Check this - don't want Brig to blow up. If that happens, mandate everything returns an object. diff --git a/src/main/java/org/spongepowered/common/command/brigadier/argument/StandardArgumentParser.java b/src/main/java/org/spongepowered/common/command/brigadier/argument/StandardArgumentParser.java index cec4db0460f..be03770b44e 100644 --- a/src/main/java/org/spongepowered/common/command/brigadier/argument/StandardArgumentParser.java +++ b/src/main/java/org/spongepowered/common/command/brigadier/argument/StandardArgumentParser.java @@ -31,13 +31,13 @@ import com.mojang.brigadier.suggestion.Suggestion; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; import org.spongepowered.api.command.parameter.managed.ValueParameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.SpongeStringReader; import org.spongepowered.common.command.brigadier.context.SpongeCommandContextBuilder; @@ -120,7 +120,7 @@ public Optional getValue(final Parameter.@NonNull Key pa try { return Optional.of(this.parse(parameterKey, (SpongeCommandContextBuilder) context, (SpongeStringReader) reader)); } catch (final CommandSyntaxException e) { - throw new ArgumentParseException(Text.of(e.getMessage()), e, e.getInput(), e.getCursor()); + throw new ArgumentParseException(TextComponent.of(e.getMessage()), e, e.getInput(), e.getCursor()); } } diff --git a/src/main/java/org/spongepowered/common/command/brigadier/dispatcher/SpongeCommandDispatcher.java b/src/main/java/org/spongepowered/common/command/brigadier/dispatcher/SpongeCommandDispatcher.java index e037575a087..9d513742a43 100644 --- a/src/main/java/org/spongepowered/common/command/brigadier/dispatcher/SpongeCommandDispatcher.java +++ b/src/main/java/org/spongepowered/common/command/brigadier/dispatcher/SpongeCommandDispatcher.java @@ -36,6 +36,7 @@ import org.spongepowered.api.event.CauseStackManager; import org.spongepowered.api.event.cause.EventContextKeys; import org.spongepowered.common.SpongeCommon; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.command.CommandSourceBridge; import org.spongepowered.common.command.brigadier.SpongeStringReader; import org.spongepowered.common.command.brigadier.context.SpongeCommandContextBuilder; @@ -43,7 +44,6 @@ import org.spongepowered.common.command.brigadier.tree.SpongeRootCommandNode; import org.spongepowered.common.command.manager.SpongeCommandManager; import org.spongepowered.common.event.tracking.PhaseTracker; -import org.spongepowered.common.text.SpongeTexts; import java.util.ArrayList; import java.util.Collections; @@ -84,7 +84,7 @@ public int execute(final StringReader input, final CommandSource source) throws frame.addContext(EventContextKeys.COMMAND, input.getString()); return ((SpongeCommandManager) SpongeCommon.getGame().getCommandManager()).process(sourceBridge.bridge$asCommandCause(), input.getRemaining()).getResult(); } catch (final CommandException e) { - throw new net.minecraft.command.CommandException(SpongeTexts.toComponent(e.getText())); + throw new net.minecraft.command.CommandException(SpongeAdventure.asVanilla(e.getText())); } } diff --git a/src/main/java/org/spongepowered/common/command/brigadier/tree/SpongeArgumentCommandNodeBuilder.java b/src/main/java/org/spongepowered/common/command/brigadier/tree/SpongeArgumentCommandNodeBuilder.java index a6431d168ce..42a62b02555 100644 --- a/src/main/java/org/spongepowered/common/command/brigadier/tree/SpongeArgumentCommandNodeBuilder.java +++ b/src/main/java/org/spongepowered/common/command/brigadier/tree/SpongeArgumentCommandNodeBuilder.java @@ -29,7 +29,7 @@ import net.minecraft.command.CommandSource; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.command.parameter.managed.ValueCompleter; -import org.spongepowered.api.text.selector.ArgumentType; +import org.spongepowered.api.entity.selector.ArgumentType; import org.spongepowered.common.command.brigadier.argument.ArgumentParser; import org.spongepowered.common.command.brigadier.argument.StandardCatalogedArgumentParser; import org.spongepowered.common.command.parameter.SpongeParameterKey; diff --git a/src/main/java/org/spongepowered/common/command/exception/SpongeCommandSyntaxException.java b/src/main/java/org/spongepowered/common/command/exception/SpongeCommandSyntaxException.java index b27433b33e2..2e3ebb778c9 100644 --- a/src/main/java/org/spongepowered/common/command/exception/SpongeCommandSyntaxException.java +++ b/src/main/java/org/spongepowered/common/command/exception/SpongeCommandSyntaxException.java @@ -26,28 +26,28 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; -import org.spongepowered.api.command.exception.ArgumentParseException; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.NamedTextColor; import org.spongepowered.api.command.exception.CommandException; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.format.TextColors; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.command.brigadier.context.SpongeCommandContext; -import org.spongepowered.common.text.SpongeTexts; public final class SpongeCommandSyntaxException extends CommandSyntaxException { - private static final Text ERROR_MESSAGE = Text.of(TextColors.RED, "Error running command: "); + private static final Component ERROR_MESSAGE = TextComponent.of("Error running command: ", NamedTextColor.RED); private final CommandException innerException; private final SpongeCommandContext commandContext; public SpongeCommandSyntaxException(final CommandException exception, final SpongeCommandContext commandContext) { - super(new SimpleCommandExceptionType(SpongeTexts.toComponent(exception.getText())), SpongeTexts.toComponent(exception.getText())); + super(new SimpleCommandExceptionType(SpongeAdventure.asVanilla(exception.getText())), SpongeAdventure.asVanilla(exception.getText())); this.innerException = exception; this.commandContext = commandContext; } public SpongeCommandSyntaxException(final CommandException exception, final SpongeCommandContext commandContext, final String command, final int cursor) { - super(new SimpleCommandExceptionType(SpongeTexts.toComponent(exception.getText())), SpongeTexts.toComponent(exception.getText()), command, cursor); + super(new SimpleCommandExceptionType(SpongeAdventure.asVanilla(exception.getText())), SpongeAdventure.asVanilla(exception.getText()), command, cursor); this.innerException = exception; this.commandContext = commandContext; } @@ -61,13 +61,13 @@ public SpongeCommandContext getCommandContext() { return this.commandContext; } - public Text getTextMessage() { - return Text.of(ERROR_MESSAGE, this.innerException.getText()); + public Component getTextMessage() { + return ERROR_MESSAGE.append(this.innerException.getText()); } @Override public String getMessage() { - return this.getTextMessage().toPlain(); + return SpongeAdventure.plain(this.getTextMessage()); } } diff --git a/src/main/java/org/spongepowered/common/command/manager/SpongeCommandManager.java b/src/main/java/org/spongepowered/common/command/manager/SpongeCommandManager.java index 064ab4ca77f..75057fc67f2 100644 --- a/src/main/java/org/spongepowered/common/command/manager/SpongeCommandManager.java +++ b/src/main/java/org/spongepowered/common/command/manager/SpongeCommandManager.java @@ -24,8 +24,6 @@ */ package org.spongepowered.common.command.manager; -import static org.spongepowered.common.util.SpongeCommonTranslationHelper.t; - import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Multimap; @@ -37,6 +35,10 @@ import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; import com.mojang.brigadier.tree.CommandNode; import com.mojang.brigadier.tree.LiteralCommandNode; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.event.HoverEvent; import net.minecraft.command.CommandSource; import org.apache.logging.log4j.Level; import org.checkerframework.checker.nullness.qual.NonNull; @@ -55,12 +57,9 @@ import org.spongepowered.api.event.cause.EventContextKeys; import org.spongepowered.api.event.command.ExecuteCommandEvent; import org.spongepowered.api.service.permission.Subject; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.action.TextActions; -import org.spongepowered.api.text.channel.MessageChannel; -import org.spongepowered.api.text.channel.MessageReceiver; import org.spongepowered.api.util.TextMessageException; import org.spongepowered.common.SpongeCommon; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.command.registrar.BrigadierCommandRegistrar; import org.spongepowered.common.command.registrar.SpongeParameterizedCommandRegistrar; import org.spongepowered.common.command.registrar.tree.RootCommandTreeBuilder; @@ -69,7 +68,6 @@ import org.spongepowered.common.event.lifecycle.RegisterCommandEventImpl; import org.spongepowered.common.event.tracking.PhaseTracker; import org.spongepowered.common.launch.Launcher; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.PrettyPrinter; import org.spongepowered.plugin.PluginContainer; @@ -153,7 +151,7 @@ public CommandMapping registerAlias( try { return registrar.process(spongeContext, command1[0], command1.length == 2 ? command1[1] : "").getResult(); } catch (final CommandException e) { - throw new SimpleCommandExceptionType(SpongeTexts.toComponent(e.getText())).create(); + throw new SimpleCommandExceptionType(SpongeAdventure.asVanilla(e.getText())).create(); } }; @@ -264,7 +262,7 @@ public CommandResult process(@NonNull final String arguments) throws CommandExce frame.addContext(EventContextKeys.COMMAND.get(), arguments); return this.process(CommandCause.create(), arguments); } catch (final CommandSyntaxException commandSyntaxException) { - throw new CommandException(Text.of(commandSyntaxException), commandSyntaxException); + throw new CommandException(TextComponent.of(commandSyntaxException.getMessage()), commandSyntaxException); } } @@ -299,7 +297,7 @@ public CommandResult process(final CommandCause cause, final String arguments) t if (mapping == null) { // no command. // TextColors.RED, - throw new CommandException(Text.of("Unknown command. Type /help for a list of commands.")); + throw new CommandException(TextComponent.of("Unknown command. Type /help for a list of commands.")); } // For when the phase tracker comes back online // final Object source = cause.getCause().root(); @@ -349,22 +347,22 @@ public CommandResult process(final CommandCause cause, final String arguments) t } this.prettyPrintThrowableError(thr, command, fullString, cause); - final Text.Builder excBuilder; + Component excBuilder; if (thr instanceof TextMessageException) { - final Text text = ((TextMessageException) thr).getText(); - excBuilder = text == null ? Text.builder("null") : text.toBuilder(); + final Component text = ((TextMessageException) thr).getText(); + excBuilder = text == null ? TextComponent.of("null") : text; } else { - excBuilder = Text.builder(String.valueOf(thr.getMessage())); + excBuilder = TextComponent.of(String.valueOf(thr.getMessage())); } if (cause.hasPermission("sponge.debug.hover-stacktrace")) { final StringWriter writer = new StringWriter(); thr.printStackTrace(new PrintWriter(writer)); - excBuilder.onHover(TextActions.showText(Text.of(writer.toString() + excBuilder = excBuilder.hoverEvent(HoverEvent.showText(TextComponent.of(writer.toString() .replace("\t", " ") .replace("\r\n", "\n") .replace("\r", "\n")))); // I mean I guess somebody could be running this on like OS 9? } - final Text error = t("Unexpected error occurred while executing command: %s", excBuilder.build()); + final Component error = TextComponent.builder("Unexpected error occurred while executing command: ").append(excBuilder).build(); this.postExecuteCommandPostEvent(cause, originalArgs, args, originalCommand, command, CommandResult.error(error)); throw new CommandException(error, thr); } @@ -376,12 +374,12 @@ public CommandResult process(final CommandCause cause, final String arguments) t @Override @NonNull - public CommandResult process( + public CommandResult process( @NonNull final T subjectReceiver, @NonNull final String arguments) throws CommandException { try (final CauseStackManager.StackFrame frame = PhaseTracker.getCauseStackManager().pushCauseFrame()) { frame.addContext(EventContextKeys.SUBJECT.get(), subjectReceiver); - frame.addContext(EventContextKeys.MESSAGE_CHANNEL.get(), MessageChannel.to(subjectReceiver)); + frame.addContext(EventContextKeys.AUDIENCE.get(), subjectReceiver); return this.process(arguments); } } @@ -390,11 +388,11 @@ public CommandResult process( @NonNull public CommandResult process( @NonNull final Subject subject, - @NonNull final MessageChannel receiver, + @NonNull final Audience receiver, @NonNull final String arguments) throws CommandException { try (final CauseStackManager.StackFrame frame = PhaseTracker.getCauseStackManager().pushCauseFrame()) { frame.addContext(EventContextKeys.SUBJECT.get(), subject); - frame.addContext(EventContextKeys.MESSAGE_CHANNEL.get(), receiver); + frame.addContext(EventContextKeys.AUDIENCE.get(), receiver); return this.process(arguments); } } @@ -471,12 +469,12 @@ public List suggest(@NonNull final String arguments) { @Override @NonNull - public List suggest( + public List suggest( @NonNull final T subjectReceiver, @NonNull final String arguments) { try (final CauseStackManager.StackFrame frame = PhaseTracker.getCauseStackManager().pushCauseFrame()) { frame.addContext(EventContextKeys.SUBJECT.get(), subjectReceiver); - frame.addContext(EventContextKeys.MESSAGE_CHANNEL.get(), MessageChannel.to(subjectReceiver)); + frame.addContext(EventContextKeys.AUDIENCE.get(), subjectReceiver); return this.suggest(arguments); } } @@ -485,11 +483,11 @@ public List suggest( @NonNull public List suggest( @NonNull final Subject subject, - @NonNull final MessageChannel receiver, + @NonNull final Audience receiver, @NonNull final String arguments) { try (final CauseStackManager.StackFrame frame = PhaseTracker.getCauseStackManager().pushCauseFrame()) { frame.addContext(EventContextKeys.SUBJECT.get(), subject); - frame.addContext(EventContextKeys.MESSAGE_CHANNEL.get(), receiver); + frame.addContext(EventContextKeys.AUDIENCE.get(), receiver); return this.suggest(arguments); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/SpongeDefaultValueParser.java b/src/main/java/org/spongepowered/common/command/parameter/SpongeDefaultValueParser.java index ecd6ffcf5e2..005d3dd55e7 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/SpongeDefaultValueParser.java +++ b/src/main/java/org/spongepowered/common/command/parameter/SpongeDefaultValueParser.java @@ -25,6 +25,7 @@ package org.spongepowered.common.command.parameter; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.TextComponent; import org.spongepowered.api.command.CommandCause; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; @@ -32,7 +33,6 @@ import org.spongepowered.api.command.parameter.Parameter; import org.spongepowered.api.command.parameter.managed.ValueParser; import org.spongepowered.api.command.parameter.managed.clientcompletion.ClientCompletionType; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.SpongeStringReader; import org.spongepowered.common.command.brigadier.argument.CustomArgumentParser; @@ -61,10 +61,10 @@ public Optional getValue( result = this.defaultFunction.apply(context); } catch (final Exception ex) { throw ((SpongeStringReader) reader) - .createException(Text.of("An exception was thrown obtaining a default value for ", parameterKey.key()), ex); + .createException(TextComponent.of("An exception was thrown obtaining a default value for " + parameterKey.key()), ex); } if (result == null) { - throw reader.createException(Text.of("No default value was supplied for ", parameterKey.key())); + throw reader.createException(TextComponent.of("No default value was supplied for " + parameterKey.key())); } return Optional.of(result); } diff --git a/src/main/java/org/spongepowered/common/command/parameter/SpongeParameterValue.java b/src/main/java/org/spongepowered/common/command/parameter/SpongeParameterValue.java index 3ef6c5d0044..75e3e7e4802 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/SpongeParameterValue.java +++ b/src/main/java/org/spongepowered/common/command/parameter/SpongeParameterValue.java @@ -25,6 +25,8 @@ package org.spongepowered.common.command.parameter; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.command.CommandException; import net.minecraft.util.text.StringTextComponent; import org.checkerframework.checker.nullness.qual.NonNull; @@ -37,7 +39,6 @@ import org.spongepowered.api.command.parameter.managed.ValueCompleter; import org.spongepowered.api.command.parameter.managed.ValueParser; import org.spongepowered.api.command.parameter.managed.ValueUsage; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.ArgumentParser; import java.util.ArrayList; @@ -147,8 +148,8 @@ private void parseInternal( } else if (currentExceptions.size() == 1) { throw currentExceptions.get(0); } else { - final List errors = currentExceptions.stream().map(ArgumentParseException::getSuperText).collect(Collectors.toList()); - throw new ArgumentParseException(Text.joinWith(Text.newLine(), errors), args.getInput(), args.getCursor()); + final List errors = currentExceptions.stream().map(ArgumentParseException::getSuperText).collect(Collectors.toList()); + throw new ArgumentParseException(TextComponent.join(TextComponent.newline(), errors), args.getInput(), args.getCursor()); } } @@ -167,14 +168,14 @@ public List complete(final ArgumentReader.@NonNull Immutable reader, @No @Override @NonNull - public Text getUsage(@NonNull final CommandCause cause) { + public Component getUsage(@NonNull final CommandCause cause) { if (this.usage != null) { - return this.usage.getUsage(Text.of(this.key.key())); + return this.usage.getUsage(this.key.key()); } - final Text usage = Text.of(this.key.key()); + final Component usage = TextComponent.of(this.key.key()); if (this.isOptional) { - return Text.of("[", usage, "]"); + return TextComponent.builder().append("[").append(usage).append("]").build(); } return usage; diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/builder/SpongeTextParameterBuilder.java b/src/main/java/org/spongepowered/common/command/parameter/managed/builder/SpongeTextParameterBuilder.java index d49254a3602..5236b63d9da 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/builder/SpongeTextParameterBuilder.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/builder/SpongeTextParameterBuilder.java @@ -25,29 +25,29 @@ package org.spongepowered.common.command.parameter.managed.builder; import com.google.common.base.Preconditions; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.ComponentSerializer; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.command.parameter.managed.ValueParameter; import org.spongepowered.api.command.parameter.managed.standard.VariableValueParameters; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.TextSerializer; import org.spongepowered.common.command.parameter.managed.standard.SpongeTextValueParameter; import java.util.function.Supplier; public final class SpongeTextParameterBuilder implements VariableValueParameters.TextBuilder { - @Nullable private TextSerializer textSerializer; + @Nullable private ComponentSerializer textSerializer; private boolean consumeAllArguments; @Override - public VariableValueParameters.@NonNull TextBuilder setSerializer(@NonNull final TextSerializer serializer) { + public VariableValueParameters.@NonNull TextBuilder setSerializer(@NonNull final ComponentSerializer serializer) { Preconditions.checkNotNull(serializer, "The serializer cannot be null"); return this.setSerializerSupplier(() -> serializer); } @Override - public VariableValueParameters.@NonNull TextBuilder setSerializerSupplier(@NonNull final Supplier serializerSupplier) { + public VariableValueParameters.@NonNull TextBuilder setSerializerSupplier(@NonNull final Supplier> serializerSupplier) { this.textSerializer = serializerSupplier.get(); return this; } @@ -59,7 +59,7 @@ public final class SpongeTextParameterBuilder implements VariableValueParameters } @Override - public ValueParameter build() throws IllegalStateException { + public ValueParameter build() throws IllegalStateException { Preconditions.checkState(this.textSerializer != null, "Text Serializer cannot be null."); return new SpongeTextValueParameter(this.textSerializer, this.consumeAllArguments); } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/factory/SpongeVariableValueParameterBuilderFactory.java b/src/main/java/org/spongepowered/common/command/parameter/managed/factory/SpongeVariableValueParameterBuilderFactory.java index 03fb973006f..f2e1fc35ccb 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/factory/SpongeVariableValueParameterBuilderFactory.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/factory/SpongeVariableValueParameterBuilderFactory.java @@ -26,14 +26,13 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; -import com.mojang.brigadier.Message; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; +import net.minecraft.util.text.StringTextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.CatalogType; import org.spongepowered.api.command.parameter.managed.ValueParameter; import org.spongepowered.api.command.parameter.managed.standard.VariableValueParameters; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.StandardArgumentParser; import org.spongepowered.common.command.parameter.managed.builder.*; import org.spongepowered.common.command.parameter.managed.standard.SpongeChoicesValueParameter; @@ -106,7 +105,7 @@ public ValueParameter createValidatedStringParameter(@NonNull final Patt return input; } throw new SimpleCommandExceptionType( - (Message) Text.of("Input \"", input, "\" does not match required pattern \"", pattern.pattern(), "\"")) + new StringTextComponent("Input \"" + input + "\" does not match required pattern \"" + pattern.pattern() + "\"")) .createWithContext(reader); }); } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeBigDecimalValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeBigDecimalValueParameter.java index 04c304d80ae..0b15e3459ae 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeBigDecimalValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeBigDecimalValueParameter.java @@ -25,6 +25,7 @@ package org.spongepowered.common.command.parameter.managed.standard; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.command.exception.ArgumentParseException; @@ -32,7 +33,6 @@ import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; import org.spongepowered.api.command.parameter.managed.standard.CatalogedValueParameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.CatalogedArgumentParser; import java.math.BigDecimal; @@ -65,7 +65,7 @@ public Optional getValue( try { return Optional.of(new BigDecimal(result)); } catch (final NumberFormatException ex) { - throw reader.createException(Text.of(ex)); + throw reader.createException(TextComponent.of(ex.getMessage())); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeBigIntegerValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeBigIntegerValueParameter.java index 9c825043a7d..42e74401418 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeBigIntegerValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeBigIntegerValueParameter.java @@ -25,13 +25,13 @@ package org.spongepowered.common.command.parameter.managed.standard; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.CatalogedArgumentParser; import java.math.BigInteger; @@ -58,7 +58,7 @@ public Optional getValue( try { return Optional.of(new BigInteger(result)); } catch (final NumberFormatException ex) { - throw reader.createException(Text.of(ex)); + throw reader.createException(TextComponent.of(ex.getMessage())); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeCatalogedElementValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeCatalogedElementValueParameter.java index b23940e648e..d698a6a312b 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeCatalogedElementValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeCatalogedElementValueParameter.java @@ -25,6 +25,7 @@ package org.spongepowered.common.command.parameter.managed.standard; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.ResourceKey; @@ -33,7 +34,6 @@ import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.command.brigadier.argument.AbstractArgumentParser; @@ -65,7 +65,7 @@ public Optional getValue(final Parameter.@NonNull Key pa if (check.contains(":")) { result = SpongeCommon.getRegistry().getCatalogRegistry().get(this.catalogType, ResourceKey.resolve(check)); if (!result.isPresent()) { - throw reader.createException(Text.of("No ", this.catalogType.getSimpleName(), " with ID ", check, "exists")); + throw reader.createException(TextComponent.of("No " + this.catalogType.getSimpleName() + " with ID " + check + "exists")); } } else { for (final String prefix : this.prefixes) { @@ -78,7 +78,7 @@ public Optional getValue(final Parameter.@NonNull Key pa if (!result.isPresent()) { final String ids = this.prefixes.stream().map(x -> x + ":" + check).collect(Collectors.joining(", ")); throw reader.createException( - Text.of("No ", this.catalogType.getSimpleName(), " with any of the following IDs exist: ", ids)); + TextComponent.of("No " + this.catalogType.getSimpleName() + " with any of the following IDs exist: " + ids)); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeChoicesValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeChoicesValueParameter.java index 14458b837d7..343da7351a5 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeChoicesValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeChoicesValueParameter.java @@ -25,12 +25,12 @@ package org.spongepowered.common.command.parameter.managed.standard; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.AbstractArgumentParser; import java.util.*; @@ -84,14 +84,14 @@ public Optional getValue( } if (this.showInUsage) { - throw reader.createException(Text.of(entry, " is not a valid choice!", - Text.newLine(), - Text.newLine(), - "Valid choices include: ", this.choices.get().stream() + throw reader.createException(TextComponent.builder(entry + " is not a valid choice!") + .append(TextComponent.newline()) + .append(TextComponent.newline()) + .append("Valid choices include: " + this.choices.get().stream() .filter(x -> !x.equals(entry)) - .limit(5).collect(Collectors.joining(", ")))); + .limit(5).collect(Collectors.joining(", "))).build()); } - throw reader.createException(Text.of(entry, " is not a valid choice!")); + throw reader.createException(TextComponent.of(entry + " is not a valid choice!")); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeColorValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeColorValueParameter.java index 9666a6aae6b..444dddfc758 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeColorValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeColorValueParameter.java @@ -29,6 +29,7 @@ import com.mojang.brigadier.suggestion.Suggestion; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import net.kyori.adventure.text.TextComponent; import net.minecraft.command.arguments.ColorArgument; import net.minecraft.util.text.TextFormatting; import org.checkerframework.checker.nullness.qual.NonNull; @@ -37,7 +38,6 @@ import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.api.util.Color; import org.spongepowered.common.accessor.util.text.TextFormattingAccessor; import org.spongepowered.common.command.brigadier.argument.CatalogedArgumentParser; @@ -111,12 +111,12 @@ public Optional getValue( } } - throw reader.createException(Text.of( - "The color is not in one of the expected formats:", Text.newLine(), - "* Named color (such as \"black\")", Text.newLine(), - "* Hex encoded color, starting with # (such as \"#000000\")", Text.newLine(), - "* Comma separated RGB color, with values from 0 to 255 (such as \"0,128,255\")" - )); + throw reader.createException(TextComponent.builder( + "The color is not in one of the expected formats:").append(TextComponent.newline()) + .append("* Named color (such as \"black\")").append(TextComponent.newline()) + .append("* Hex encoded color, starting with # (such as \"#000000\")").append(TextComponent.newline()) + .append("* Comma separated RGB color, with values from 0 to 255 (such as \"0,128,255\")") + .build()); } // The exceptions will get swallowed above. diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeDataContainerValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeDataContainerValueParameter.java index 430c4710dd0..8d408a61ae5 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeDataContainerValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeDataContainerValueParameter.java @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.brigadier.arguments.ArgumentType; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.command.exception.ArgumentParseException; @@ -34,7 +35,6 @@ import org.spongepowered.api.command.parameter.Parameter; import org.spongepowered.api.data.persistence.DataContainer; import org.spongepowered.api.data.persistence.DataFormats; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.CatalogedArgumentParser; import org.spongepowered.common.util.Constants; @@ -71,7 +71,7 @@ public Optional getValue(final Parameter.@NonNull Key getValue( try { return Optional.of(LocalDateTime.of(LocalDate.parse(date), LocalTime.MIDNIGHT)); } catch (final DateTimeParseException ex3) { - throw reader.createException(Text.of("Invalid date-time!")); + throw reader.createException(TextComponent.of("Invalid date-time!")); } } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeDurationValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeDurationValueParameter.java index b12523b75f2..69b2164aef6 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeDurationValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeDurationValueParameter.java @@ -25,13 +25,13 @@ package org.spongepowered.common.command.parameter.managed.standard; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.CatalogedArgumentParser; import java.time.Duration; @@ -82,7 +82,7 @@ public Optional getValue( try { return Optional.of(Duration.parse(s)); } catch (final DateTimeParseException ex) { - throw reader.createException(Text.of("Invalid duration!")); + throw reader.createException(TextComponent.of("Invalid duration!")); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeIPAddressValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeIPAddressValueParameter.java index 33179f20a35..d7b53389bec 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeIPAddressValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeIPAddressValueParameter.java @@ -25,13 +25,13 @@ package org.spongepowered.common.command.parameter.managed.standard; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.CatalogedArgumentParser; import java.net.InetAddress; @@ -66,7 +66,7 @@ public Optional getValue( try { return Optional.of(InetAddress.getByName(stringToParse)); } catch (final UnknownHostException e) { - throw reader.createException(Text.of(e.getMessage())); + throw reader.createException(TextComponent.of(e.getMessage())); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeLiteralValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeLiteralValueParameter.java index fe765534be3..af489a39eea 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeLiteralValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeLiteralValueParameter.java @@ -26,12 +26,13 @@ import com.google.common.collect.ImmutableList; import com.mojang.brigadier.arguments.ArgumentType; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.AbstractArgumentParser; import org.spongepowered.common.util.Constants; @@ -65,12 +66,12 @@ public Optional getValue( int x = 0; while (iterator.hasNext() && x < toCompare.length) { if (!iterator.next().equals(toCompare[x++])) { - throw reader.createException(Text.of("The provided literal was not ", String.join(" ", collection))); + throw reader.createException(TextComponent.of("The provided literal was not " + String.join(" ", collection))); } } if (iterator.hasNext()) { - throw reader.createException(Text.of("The provided literal was not ", String.join(" ", collection))); + throw reader.createException(TextComponent.of("The provided literal was not " + String.join(" ", collection))); } return Optional.of(this.returnValue.get()); @@ -84,8 +85,8 @@ public List complete(@NonNull final CommandContext context) { @Override @NonNull - public Text getUsage(@NonNull final Text key) { - return Text.of(String.join(" ", this.literalSupplier.get())); + public Component getUsage(@NonNull final String key) { + return TextComponent.of(String.join(" ", this.literalSupplier.get())); } @Override diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeNoneValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeNoneValueParameter.java index 92fda35840b..d3741fa23fb 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeNoneValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeNoneValueParameter.java @@ -26,6 +26,8 @@ import com.google.common.collect.ImmutableList; import com.mojang.brigadier.arguments.ArgumentType; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.command.exception.ArgumentParseException; @@ -34,7 +36,6 @@ import org.spongepowered.api.command.parameter.Parameter; import org.spongepowered.api.command.parameter.managed.clientcompletion.ClientCompletionType; import org.spongepowered.api.command.parameter.managed.clientcompletion.ClientCompletionTypes; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.CatalogedArgumentParser; import java.util.List; @@ -67,8 +68,8 @@ public Optional getValue( @Override @NonNull - public Text getUsage(@NonNull final Text key) { - return Text.of(); + public Component getUsage(@NonNull final String key) { + return TextComponent.empty(); } @Override diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongePluginContainerValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongePluginContainerValueParameter.java index 2960aa45b5b..3467cac69e4 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongePluginContainerValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongePluginContainerValueParameter.java @@ -24,13 +24,13 @@ */ package org.spongepowered.common.command.parameter.managed.standard; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.CatalogedArgumentParser; import org.spongepowered.common.launch.Launcher; import org.spongepowered.plugin.PluginContainer; @@ -68,7 +68,7 @@ public Optional getValue( return container; } - throw reader.createException(Text.of("Could not find plugin with ID \"" + id + "\"")); + throw reader.createException(TextComponent.of("Could not find plugin with ID \"" + id + "\"")); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeServerLocationValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeServerLocationValueParameter.java index 025108462aa..684f4c2efd6 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeServerLocationValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeServerLocationValueParameter.java @@ -28,6 +28,7 @@ import com.mojang.brigadier.StringReader; import com.mojang.brigadier.arguments.ArgumentType; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.kyori.adventure.text.TextComponent; import net.minecraft.command.CommandSource; import net.minecraft.command.arguments.Vec3Argument; import net.minecraft.util.math.Vec3d; @@ -37,7 +38,6 @@ import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.api.world.ServerLocation; import org.spongepowered.api.world.server.ServerWorld; import org.spongepowered.api.world.storage.WorldProperties; @@ -76,13 +76,13 @@ public Optional getValue( final ServerWorld world = SpongeWorldPropertiesValueParameter.getWorldProperties(name) .flatMap(x -> SpongeCommon.getGame().getServer().getWorldManager().getWorld(x.getDirectoryName())) - .orElseThrow(() -> reader.createException(Text.of("Could not get world with name \"" + name + "\""))); + .orElseThrow(() -> reader.createException(TextComponent.of("Could not get world with name \"" + name + "\""))); try { final Vec3d vec3d = VEC_3_ARGUMENT.parse((StringReader) reader).getPosition((CommandSource) context); return Optional.of(world.getLocation(vec3d.x, vec3d.y, vec3d.z)); } catch (final CommandSyntaxException e) { - throw reader.createException(Text.of(e.getMessage())); + throw reader.createException(TextComponent.of(e.getMessage())); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTargetBlockValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTargetBlockValueParameter.java index 8acc6862152..9f2e2a00ed6 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTargetBlockValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTargetBlockValueParameter.java @@ -24,6 +24,7 @@ */ package org.spongepowered.common.command.parameter.managed.standard; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.command.exception.ArgumentParseException; @@ -31,7 +32,6 @@ import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.entity.Entity; import org.spongepowered.api.entity.living.Living; -import org.spongepowered.api.text.Text; import org.spongepowered.api.world.ServerLocation; import org.spongepowered.common.command.brigadier.argument.CatalogedZeroAdvanceValueParameter; @@ -55,10 +55,10 @@ public Optional getValue(final CommandContext.@NonNull final Object root = context.getCause().root(); if (root instanceof Living) { // TODO: BlockRay, where art thou? - throw reader.createException(Text.of("The cause root is not looking at a block!")); + throw reader.createException(TextComponent.of("The cause root is not looking at a block!")); } - throw reader.createException(Text.of("The cause root must be a Living!")); + throw reader.createException(TextComponent.of("The cause root must be a Living!")); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTargetEntityValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTargetEntityValueParameter.java index 391982f8546..6b4acb74bfc 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTargetEntityValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTargetEntityValueParameter.java @@ -24,6 +24,7 @@ */ package org.spongepowered.common.command.parameter.managed.standard; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.command.exception.ArgumentParseException; @@ -32,7 +33,6 @@ import org.spongepowered.api.entity.Entity; import org.spongepowered.api.entity.living.Living; import org.spongepowered.api.entity.living.player.server.ServerPlayer; -import org.spongepowered.api.text.Text; import org.spongepowered.common.command.brigadier.argument.CatalogedZeroAdvanceValueParameter; import java.util.Optional; @@ -68,10 +68,10 @@ public Optional getValue( .filter(this::checkEntity).findFirst() .orElseThrow(() -> reader.createException(Text.of("No entities matched and source was not looking at a valid entity!"))); */ - throw reader.createException(Text.of("The cause root is not looking at a entity!")); + throw reader.createException(TextComponent.of("The cause root is not looking at a entity!")); } - throw reader.createException(Text.of("The cause root must be a Living!")); + throw reader.createException(TextComponent.of("The cause root must be a Living!")); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTextValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTextValueParameter.java index e83afe28bbf..a1225ab28d5 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTextValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeTextValueParameter.java @@ -26,32 +26,32 @@ import com.google.common.collect.ImmutableList; import com.mojang.brigadier.arguments.ArgumentType; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.ComponentSerializer; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.TextSerializer; -import org.spongepowered.api.text.serializer.TextSerializers; import org.spongepowered.common.command.brigadier.argument.AbstractArgumentParser; import org.spongepowered.common.util.Constants; import java.util.List; import java.util.Optional; -public final class SpongeTextValueParameter extends AbstractArgumentParser { +public final class SpongeTextValueParameter extends AbstractArgumentParser { - private final TextSerializer textSerializer; + private final ComponentSerializer textSerializer; private final boolean consumeAll; private final ArgumentType clientCompletionType; - public SpongeTextValueParameter(final TextSerializer textSerializer, final boolean consumeAll) { + public SpongeTextValueParameter(final ComponentSerializer textSerializer, final boolean consumeAll) { this.textSerializer = textSerializer; this.consumeAll = consumeAll; if (this.consumeAll) { this.clientCompletionType = Constants.Command.GREEDY_STRING_ARGUMENT_TYPE; - } else if (this.textSerializer == TextSerializers.JSON.get()) { // TODO: do it by class type instead? + } else if (this.textSerializer instanceof GsonComponentSerializer) { this.clientCompletionType = Constants.Command.NBT_ARGUMENT_TYPE; } else { this.clientCompletionType = Constants.Command.STANDARD_STRING_ARGUMENT_TYPE; @@ -66,8 +66,8 @@ public List complete(@NonNull final CommandContext context) { @Override @NonNull - public Optional getValue( - final Parameter.@NonNull Key parameterKey, + public Optional getValue( + final Parameter.@NonNull Key parameterKey, final ArgumentReader.@NonNull Mutable reader, final CommandContext.@NonNull Builder context) throws ArgumentParseException { diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeUserValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeUserValueParameter.java index bb72c7d6b82..cadcf58b93a 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeUserValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeUserValueParameter.java @@ -29,6 +29,7 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import net.kyori.adventure.text.TextComponent; import net.minecraft.command.arguments.EntityArgument; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; @@ -38,7 +39,6 @@ import org.spongepowered.api.command.parameter.Parameter; import org.spongepowered.api.entity.living.player.User; import org.spongepowered.api.entity.living.player.server.ServerPlayer; -import org.spongepowered.api.text.Text; import org.spongepowered.api.user.UserManager; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.command.brigadier.argument.CatalogedArgumentParser; @@ -88,7 +88,7 @@ public Optional getValue( .selectOnePlayer(((SpongeCommandContextBuilder) context).getSource())); return Optional.of(entity.getUser()); } catch (final CommandSyntaxException e) { - throw reader.createException(Text.of(e.getContext())); + throw reader.createException(TextComponent.of(e.getContext())); } } @@ -106,7 +106,7 @@ public Optional getValue( return user; } - throw reader.createException(Text.of("Could not find user with user name \"" + peek + "\"")); + throw reader.createException(TextComponent.of("Could not find user with user name \"" + peek + "\"")); } } diff --git a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeWorldPropertiesValueParameter.java b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeWorldPropertiesValueParameter.java index d49fa97f908..a9cfca7b9b5 100644 --- a/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeWorldPropertiesValueParameter.java +++ b/src/main/java/org/spongepowered/common/command/parameter/managed/standard/SpongeWorldPropertiesValueParameter.java @@ -24,13 +24,13 @@ */ package org.spongepowered.common.command.parameter.managed.standard; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; -import org.spongepowered.api.text.Text; import org.spongepowered.api.world.storage.WorldProperties; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.command.brigadier.argument.CatalogedArgumentParser; @@ -71,7 +71,7 @@ public Optional getValue( return worldProperties; } - throw reader.createException(Text.of("Could not find world with identifier \"" + name + "\"")); + throw reader.createException(TextComponent.of("Could not find world with identifier \"" + name + "\"")); } static Optional getWorldProperties(final String name) { diff --git a/src/main/java/org/spongepowered/common/command/registrar/BrigadierCommandRegistrar.java b/src/main/java/org/spongepowered/common/command/registrar/BrigadierCommandRegistrar.java index 19b804eb728..190b1a4a1e5 100644 --- a/src/main/java/org/spongepowered/common/command/registrar/BrigadierCommandRegistrar.java +++ b/src/main/java/org/spongepowered/common/command/registrar/BrigadierCommandRegistrar.java @@ -32,6 +32,8 @@ import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.tree.CommandNode; import com.mojang.brigadier.tree.LiteralCommandNode; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.command.CommandSource; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; @@ -42,7 +44,6 @@ import org.spongepowered.api.command.manager.CommandMapping; import org.spongepowered.api.command.registrar.CommandRegistrar; import org.spongepowered.api.event.CauseStackManager; -import org.spongepowered.api.text.Text; import org.spongepowered.api.util.Tuple; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.command.brigadier.dispatcher.SpongeCommandDispatcher; @@ -221,10 +222,10 @@ public List suggestions(@NonNull final CommandCause cause, @NonNull fina @Override @NonNull - public Optional help(@NonNull final CommandCause cause, @NonNull final String command) { + public Optional help(@NonNull final CommandCause cause, @NonNull final String command) { final CommandNode node = this.dispatcher.findNode(Collections.singletonList(command)); if (node != null) { - return Optional.of(Text.of(this.dispatcher.getSmartUsage(node, (CommandSource) cause))); + return Optional.of(TextComponent.of(this.dispatcher.getSmartUsage(node, (CommandSource) cause).toString())); } return Optional.empty(); diff --git a/src/main/java/org/spongepowered/common/command/registrar/SpongeCommandRegistrar.java b/src/main/java/org/spongepowered/common/command/registrar/SpongeCommandRegistrar.java index 5e7f1ebd324..2b2f112d2ca 100644 --- a/src/main/java/org/spongepowered/common/command/registrar/SpongeCommandRegistrar.java +++ b/src/main/java/org/spongepowered/common/command/registrar/SpongeCommandRegistrar.java @@ -30,6 +30,7 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.suggestion.Suggestion; import com.mojang.brigadier.tree.LiteralCommandNode; +import net.kyori.adventure.text.Component; import net.minecraft.command.CommandSource; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.ResourceKey; @@ -40,7 +41,6 @@ import org.spongepowered.api.command.manager.CommandFailedRegistrationException; import org.spongepowered.api.command.manager.CommandMapping; import org.spongepowered.api.command.registrar.CommandRegistrar; -import org.spongepowered.api.text.Text; import org.spongepowered.api.util.Tuple; import org.spongepowered.common.command.manager.SpongeCommandManager; import org.spongepowered.plugin.PluginContainer; @@ -119,7 +119,7 @@ public List suggestions(@NonNull final CommandCause cause, @NonNull fina @Override @NonNull - public Optional help(@NonNull final CommandCause cause, @NonNull final String command) { + public Optional help(@NonNull final CommandCause cause, @NonNull final String command) { final T commandEntry = this.commandMap.get(command.toLowerCase()); if (commandEntry == null) { throw new IllegalArgumentException(command + " is not a valid a valid command!"); diff --git a/src/main/java/org/spongepowered/common/text/TextComponentIterable.java b/src/main/java/org/spongepowered/common/command/registrar/tree/AmountCommandTreeBuilder.java similarity index 60% rename from src/main/java/org/spongepowered/common/text/TextComponentIterable.java rename to src/main/java/org/spongepowered/common/command/registrar/tree/AmountCommandTreeBuilder.java index b109530d1bb..243e16ab039 100644 --- a/src/main/java/org/spongepowered/common/text/TextComponentIterable.java +++ b/src/main/java/org/spongepowered/common/command/registrar/tree/AmountCommandTreeBuilder.java @@ -22,29 +22,29 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.text; +package org.spongepowered.common.command.registrar.tree; -import net.minecraft.util.text.ITextComponent; -import org.spongepowered.common.bridge.util.text.TextComponentBridge; +import com.mojang.brigadier.arguments.ArgumentType; +import org.spongepowered.api.command.registrar.tree.ClientCompletionKey; +import org.spongepowered.api.command.registrar.tree.CommandTreeBuilder; +import org.spongepowered.api.entity.selector.Argument; -import java.util.Iterator; +public class AmountCommandTreeBuilder> + extends ArgumentCommandTreeBuilder implements CommandTreeBuilder.AmountBase { -public class TextComponentIterable implements Iterable { + private ArgumentType argumentType; - private final TextComponentBridge component; - private final boolean includeSelf; - - public TextComponentIterable(TextComponentBridge component, boolean includeSelf) { - this.component = component; - this.includeSelf = includeSelf; + public AmountCommandTreeBuilder(final ClientCompletionKey parameterType, final ArgumentType argumentType) { + super(parameterType); + this.argumentType = argumentType; } @Override - public Iterator iterator() { - if (this.includeSelf) { - return new TextComponentIterator(this.component); - } - return new TextComponentIterator(this.component.bridge$childrenIterator()); + protected ArgumentType getArgumentType() { + return this.argumentType; } + @Override public T single() { + return null; + } } diff --git a/src/main/java/org/spongepowered/common/command/result/SpongeCommandResult.java b/src/main/java/org/spongepowered/common/command/result/SpongeCommandResult.java index 785f5989d55..22cc2948780 100644 --- a/src/main/java/org/spongepowered/common/command/result/SpongeCommandResult.java +++ b/src/main/java/org/spongepowered/common/command/result/SpongeCommandResult.java @@ -24,10 +24,10 @@ */ package org.spongepowered.common.command.result; +import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.command.CommandResult; -import org.spongepowered.api.text.Text; import java.util.Optional; @@ -35,12 +35,12 @@ public final class SpongeCommandResult implements CommandResult { private final boolean isSuccess; private final int result; - @Nullable private final Text errorMessage; + @Nullable private final Component errorMessage; public SpongeCommandResult( final boolean isSuccess, final int result, - @Nullable final Text errorMessage) { + @Nullable final Component errorMessage) { this.isSuccess = isSuccess; this.result = result; this.errorMessage = errorMessage; @@ -58,7 +58,7 @@ public int getResult() { @Override @NonNull - public Optional getErrorMessage() { + public Optional getErrorMessage() { return Optional.ofNullable(this.errorMessage); } diff --git a/src/main/java/org/spongepowered/common/command/result/SpongeCommandResultBuilder.java b/src/main/java/org/spongepowered/common/command/result/SpongeCommandResultBuilder.java index 27e13e100fa..e933340260a 100644 --- a/src/main/java/org/spongepowered/common/command/result/SpongeCommandResultBuilder.java +++ b/src/main/java/org/spongepowered/common/command/result/SpongeCommandResultBuilder.java @@ -25,15 +25,15 @@ package org.spongepowered.common.command.result; import com.google.common.base.Preconditions; +import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.command.CommandResult; -import org.spongepowered.api.text.Text; public final class SpongeCommandResultBuilder implements CommandResult.Builder { private int result; - @Nullable private Text errorMessage; + @Nullable private Component errorMessage; @Override public CommandResult.@NonNull Builder setResult(final int result) { @@ -43,7 +43,7 @@ public final class SpongeCommandResultBuilder implements CommandResult.Builder { } @Override - public CommandResult.@NonNull Builder error(@Nullable final Text errorMessage) { + public CommandResult.@NonNull Builder error(@Nullable final Component errorMessage) { this.errorMessage = errorMessage; return this; } diff --git a/src/main/java/org/spongepowered/common/command/sponge/FilteredPluginContainerParameter.java b/src/main/java/org/spongepowered/common/command/sponge/FilteredPluginContainerParameter.java index cfde825210c..8a876ad88e2 100644 --- a/src/main/java/org/spongepowered/common/command/sponge/FilteredPluginContainerParameter.java +++ b/src/main/java/org/spongepowered/common/command/sponge/FilteredPluginContainerParameter.java @@ -25,12 +25,12 @@ package org.spongepowered.common.command.sponge; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.TextComponent; import org.spongepowered.api.command.exception.ArgumentParseException; import org.spongepowered.api.command.parameter.ArgumentReader; import org.spongepowered.api.command.parameter.CommandContext; import org.spongepowered.api.command.parameter.Parameter; import org.spongepowered.api.command.parameter.managed.ValueParameter; -import org.spongepowered.api.text.Text; import org.spongepowered.common.launch.Launcher; import org.spongepowered.common.launch.plugin.DummyPluginContainer; import org.spongepowered.plugin.PluginContainer; @@ -66,6 +66,6 @@ public Optional getValue( if (pluginContainer != null) { return Optional.of(pluginContainer); } - throw reader.createException(Text.of("Could not find valid plugin to refresh with ID \"" + id + "\"")); + throw reader.createException(TextComponent.of("Could not find valid plugin to refresh with ID \"" + id + "\"")); } } diff --git a/src/main/java/org/spongepowered/common/command/sponge/SpongeCommand.java b/src/main/java/org/spongepowered/common/command/sponge/SpongeCommand.java index 95edbe7c20f..aae90ae105b 100644 --- a/src/main/java/org/spongepowered/common/command/sponge/SpongeCommand.java +++ b/src/main/java/org/spongepowered/common/command/sponge/SpongeCommand.java @@ -25,6 +25,7 @@ package org.spongepowered.common.command.sponge; import co.aikar.timings.Timings; +import net.kyori.adventure.text.TextComponent; import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.command.Command; import org.spongepowered.api.command.CommandResult; @@ -32,7 +33,6 @@ import org.spongepowered.api.command.parameter.Parameter; import org.spongepowered.api.event.SpongeEventFactory; import org.spongepowered.api.event.lifecycle.RefreshGameEvent; -import org.spongepowered.api.text.Text; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.event.SpongeEventManager; import org.spongepowered.common.event.tracking.PhaseTracker; @@ -104,19 +104,16 @@ public static CommandResult rootCommand(final CommandContext context) { final PluginContainer apiPlugin = Launcher.getInstance().getApiPlugin(); final PluginContainer minecraftPlugin = Launcher.getInstance().getMinecraftPlugin(); - SpongeCommon.getLogger().info("SpongePowered Minecraft Plugin Platform (running on Minecraft {})", - minecraftPlugin.getMetadata().getVersion()); - SpongeCommon.getLogger().info("{} {}", apiPlugin.getMetadata().getName().get(), apiPlugin.getMetadata().getVersion()); - SpongeCommon.getLogger().info("Implementation: {}, {}", - platformPlugin.getMetadata().getName().get(), - platformPlugin.getMetadata().getVersion()); - - /* - context.sendMessage(Text.of( + context.sendMessage(TextComponent.of( "SpongePowered Minecraft Plugin Platform (running on Minecraft " + minecraftPlugin.getMetadata().getVersion() + ")")); - context.sendMessage(Text.of("SpongeAPI: ", apiPlugin.getMetadata().getName(), " ", apiPlugin.getMetadata().getVersion())); - context.sendMessage(Text.of("Implementation: ", platformPlugin.getMetadata().getName(), " ", platformPlugin.getMetadata().getVersion())); - */ + context.sendMessage(TextComponent.builder("SpongeAPI: ").append( + TextComponent.of(apiPlugin.getMetadata().getName().get()), + TextComponent.space(), + TextComponent.of(apiPlugin.getMetadata().getVersion())).build()); + context.sendMessage(TextComponent.builder("Implementation: ").append( + TextComponent.of(platformPlugin.getMetadata().getName().get()), + TextComponent.space(), + TextComponent.of(platformPlugin.getMetadata().getVersion())).build()); return CommandResult.success(); } @@ -174,67 +171,67 @@ private static Command.Parameterized timingsSubcommand() { .child(Command.builder() .setExecutor(context -> { if (!Timings.isTimingsEnabled()) { - context.sendMessage(Text.of("Please enable timings by typing /sponge timings on")); + context.sendMessage(TextComponent.of("Please enable timings by typing /sponge timings on")); return CommandResult.empty(); } Timings.reset(); - context.sendMessage(Text.of("Timings reset")); + context.sendMessage(TextComponent.of("Timings reset")); return CommandResult.success(); }) .build(), "reset") .child(Command.builder() .setExecutor(context -> { if (!Timings.isTimingsEnabled()) { - context.sendMessage(Text.of("Please enable timings by typing /sponge timings on")); + context.sendMessage(TextComponent.of("Please enable timings by typing /sponge timings on")); return CommandResult.empty(); } - Timings.generateReport(context.getMessageChannel()); + Timings.generateReport(context.getAudience()); return CommandResult.success(); }) .build(), "report", "paste") .child(Command.builder() .setExecutor(context -> { Timings.setTimingsEnabled(true); - context.sendMessage(Text.of("Enabled Timings & Reset")); + context.sendMessage(TextComponent.of("Enabled Timings & Reset")); return CommandResult.success(); }) .build(), "on") .child(Command.builder() .setExecutor(context -> { Timings.setTimingsEnabled(false); - context.sendMessage(Text.of("Disabled Timings")); + context.sendMessage(TextComponent.of("Disabled Timings")); return CommandResult.success(); }) .build(), "off") .child(Command.builder() .setExecutor(context -> { if (!Timings.isTimingsEnabled()) { - context.sendMessage(Text.of("Please enable timings by typing /sponge timings on")); + context.sendMessage(TextComponent.of("Please enable timings by typing /sponge timings on")); return CommandResult.empty(); } Timings.setVerboseTimingsEnabled(true); - context.sendMessage(Text.of("Enabled Verbose Timings")); + context.sendMessage(TextComponent.of("Enabled Verbose Timings")); return CommandResult.success(); }) .build(), "verbon") .child(Command.builder() .setExecutor(context -> { if (!Timings.isTimingsEnabled()) { - context.sendMessage(Text.of("Please enable timings by typing /sponge timings on")); + context.sendMessage(TextComponent.of("Please enable timings by typing /sponge timings on")); return CommandResult.empty(); } Timings.setVerboseTimingsEnabled(false); - context.sendMessage(Text.of("Disabled Verbose Timings")); + context.sendMessage(TextComponent.of("Disabled Verbose Timings")); return CommandResult.success(); }) .build(), "verboff") .child(Command.builder() .setExecutor(context -> { if (!Timings.isTimingsEnabled()) { - context.sendMessage(Text.of("Please enable timings by typing /sponge timings on")); + context.sendMessage(TextComponent.of("Please enable timings by typing /sponge timings on")); return CommandResult.empty(); } - context.sendMessage(Text.of("Timings cost: " + SpongeTimingsFactory.getCost())); + context.sendMessage(TextComponent.of("Timings cost: " + SpongeTimingsFactory.getCost())); return CommandResult.success(); }) .build(), "cost") diff --git a/src/main/java/org/spongepowered/common/data/datasync/entity/EntityCustomNameConverter.java b/src/main/java/org/spongepowered/common/data/datasync/entity/EntityCustomNameConverter.java index a6b02836b62..a08254d5c34 100644 --- a/src/main/java/org/spongepowered/common/data/datasync/entity/EntityCustomNameConverter.java +++ b/src/main/java/org/spongepowered/common/data/datasync/entity/EntityCustomNameConverter.java @@ -24,15 +24,15 @@ */ package org.spongepowered.common.data.datasync.entity; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.minecraft.entity.Entity; import org.spongepowered.api.data.DataTransactionResult; import org.spongepowered.api.data.Keys; import org.spongepowered.api.data.value.Value; import org.spongepowered.api.data.value.Value.Immutable; -import org.spongepowered.api.text.Text; import org.spongepowered.common.data.datasync.DataParameterConverter; import org.spongepowered.common.accessor.entity.EntityAccessor; -import org.spongepowered.common.text.SpongeTexts; import java.util.List; import java.util.Optional; @@ -45,8 +45,8 @@ public EntityCustomNameConverter() { @Override public Optional createTransaction(final Entity entity, final String currentValue, final String value) { - final Text currentText = SpongeTexts.fromLegacy(currentValue); - final Text newValue = SpongeTexts.fromLegacy(value); + final Component currentText = LegacyComponentSerializer.legacy().deserialize(currentValue); + final Component newValue = LegacyComponentSerializer.legacy().deserialize(value); return Optional.of(DataTransactionResult.builder() .replace(Value.immutableOf(Keys.DISPLAY_NAME, currentText)) @@ -60,7 +60,7 @@ public String getValueFromEvent(final String originalValue, final List value : immutableValues) { if (value.getKey() == Keys.DISPLAY_NAME.get()) { try { - return SpongeTexts.toLegacy((Text) value.get()); + return LegacyComponentSerializer.legacy().serialize((Component) value.get()); } catch (Exception e) { return originalValue; } diff --git a/src/main/java/org/spongepowered/common/data/persistence/DataSerializers.java b/src/main/java/org/spongepowered/common/data/persistence/DataSerializers.java index 68e17b4095a..cb54cd0a6e7 100644 --- a/src/main/java/org/spongepowered/common/data/persistence/DataSerializers.java +++ b/src/main/java/org/spongepowered/common/data/persistence/DataSerializers.java @@ -25,6 +25,7 @@ package org.spongepowered.common.data.persistence; import com.google.common.reflect.TypeToken; +import net.kyori.adventure.text.Component; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.data.persistence.DataContainer; import org.spongepowered.api.data.persistence.DataQuery; @@ -66,6 +67,7 @@ public final class DataSerializers { + public static final DataTranslator COMPONENT_DATA_SERIALIZER; public static final DataTranslator UUID_DATA_SERIALIZER; public static final DataTranslator VECTOR_2_D_DATA_SERIALIZER; public static final DataTranslator VECTOR_2_F_DATA_SERIALIZER; @@ -91,6 +93,30 @@ public final class DataSerializers { public static final DataTranslator MONTH_DATA_SERIALIZER; static { + COMPONENT_DATA_SERIALIZER = new DataTranslator() { + final ResourceKey key = ResourceKey.sponge("component"); + final TypeToken token = TypeToken.of(Component.class); + + @Override + public ResourceKey getKey() { + return this.key; + } + + @Override + public TypeToken getToken() { + return this.token; + } + + @Override + public Component translate(final DataView view) throws InvalidDataException { + throw new UnsupportedOperationException("TODO"); // TODO(adventure) + } + + @Override + public DataContainer translate(final Component obj) throws InvalidDataException { + throw new UnsupportedOperationException("TODO"); // TODO(adventure) + } + }; UUID_DATA_SERIALIZER = new DataTranslator() { final ResourceKey key = ResourceKey.sponge("uuid"); @@ -1101,6 +1127,7 @@ static Supplier invalidDataQuery(DataQuery query) { public static Stream> stream() { return Stream.of( + Tuple.of(COMPONENT_DATA_SERIALIZER, Component.class), Tuple.of(UUID_DATA_SERIALIZER, UUID.class), Tuple.of(VECTOR_2_D_DATA_SERIALIZER, Vector2d.class), Tuple.of(VECTOR_2_F_DATA_SERIALIZER, Vector2f.class), diff --git a/src/main/java/org/spongepowered/common/data/provider/block/entity/SignTileEntityLinesProvider.java b/src/main/java/org/spongepowered/common/data/provider/block/entity/SignTileEntityLinesProvider.java index ab6588895e2..c5ece84eb88 100644 --- a/src/main/java/org/spongepowered/common/data/provider/block/entity/SignTileEntityLinesProvider.java +++ b/src/main/java/org/spongepowered/common/data/provider/block/entity/SignTileEntityLinesProvider.java @@ -24,27 +24,28 @@ */ package org.spongepowered.common.data.provider.block.entity; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.tileentity.SignTileEntity; import org.spongepowered.api.data.Keys; -import org.spongepowered.api.text.Text; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.data.provider.GenericMutableDataProvider; -import org.spongepowered.common.text.SpongeTexts; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; -public class SignTileEntityLinesProvider extends GenericMutableDataProvider> { +public class SignTileEntityLinesProvider extends GenericMutableDataProvider> { public SignTileEntityLinesProvider() { super(Keys.SIGN_LINES); } @Override - protected boolean set(SignTileEntity dataHolder, List value) { + protected boolean set(SignTileEntity dataHolder, List value) { for (int i = 0; i < dataHolder.signText.length; i++) { - dataHolder.signText[i] = SpongeTexts.toComponent(i >= value.size() ? Text.empty() : value.get(i)); + dataHolder.signText[i] = SpongeAdventure.asVanilla(i >= value.size() ? TextComponent.empty() : value.get(i)); } dataHolder.markDirty(); // ((ServerWorld) dataHolder.getWorld()).getPlayerChunkMap().markBlockForUpdate(sign.getPos()); @@ -52,10 +53,10 @@ protected boolean set(SignTileEntity dataHolder, List value) { } @Override - protected Optional> getFrom(SignTileEntity dataHolder) { - final List lines = new ArrayList<>(dataHolder.signText.length); + protected Optional> getFrom(SignTileEntity dataHolder) { + final List lines = new ArrayList<>(dataHolder.signText.length); for (int i = 0; i < dataHolder.signText.length; i++) { - lines.add(SpongeTexts.toText(dataHolder.signText[i])); + lines.add(SpongeAdventure.asAdventure(dataHolder.signText[i])); } return Optional.of(lines); } diff --git a/src/main/java/org/spongepowered/common/data/provider/commandblock/CommandBlockLogicLastCommandOutputProvider.java b/src/main/java/org/spongepowered/common/data/provider/commandblock/CommandBlockLogicLastCommandOutputProvider.java index 4949bb03019..61c62d89a0a 100644 --- a/src/main/java/org/spongepowered/common/data/provider/commandblock/CommandBlockLogicLastCommandOutputProvider.java +++ b/src/main/java/org/spongepowered/common/data/provider/commandblock/CommandBlockLogicLastCommandOutputProvider.java @@ -24,19 +24,19 @@ */ package org.spongepowered.common.data.provider.commandblock; +import net.kyori.adventure.text.Component; import net.minecraft.tileentity.CommandBlockLogic; import net.minecraft.util.text.ITextComponent; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.data.Keys; -import org.spongepowered.api.text.Text; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.data.provider.GenericMutableDataProvider; import org.spongepowered.common.accessor.tileentity.CommandBlockLogicAccessor; -import org.spongepowered.common.text.SpongeTexts; import java.util.Optional; import java.util.function.Function; -public class CommandBlockLogicLastCommandOutputProvider extends GenericMutableDataProvider { +public class CommandBlockLogicLastCommandOutputProvider extends GenericMutableDataProvider { private final Function logicProvider; @@ -46,14 +46,14 @@ public CommandBlockLogicLastCommandOutputProvider(Class holderType, Function< } @Override - protected Optional getFrom(T dataHolder) { + protected Optional getFrom(T dataHolder) { @Nullable final ITextComponent component = ((CommandBlockLogicAccessor) this.logicProvider.apply(dataHolder)).accessor$getLastOutput(); - return component == null ? Optional.empty() : Optional.of(SpongeTexts.toText(component)); + return component == null ? Optional.empty() : Optional.of(SpongeAdventure.asAdventure(component)); } @Override - protected boolean set(T dataHolder, Text value) { - this.logicProvider.apply(dataHolder).setLastOutput(SpongeTexts.toComponent(value)); + protected boolean set(T dataHolder, Component value) { + this.logicProvider.apply(dataHolder).setLastOutput(SpongeAdventure.asVanilla(value)); return true; } diff --git a/src/main/java/org/spongepowered/common/data/provider/entity/EntityDataProviders.java b/src/main/java/org/spongepowered/common/data/provider/entity/EntityDataProviders.java index d36d042ce7b..98c4f64a166 100644 --- a/src/main/java/org/spongepowered/common/data/provider/entity/EntityDataProviders.java +++ b/src/main/java/org/spongepowered/common/data/provider/entity/EntityDataProviders.java @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableList; import com.mojang.authlib.properties.Property; +import net.kyori.adventure.text.Component; import net.minecraft.entity.AgeableEntity; import net.minecraft.entity.AreaEffectCloudEntity; import net.minecraft.entity.Entity; @@ -102,7 +103,6 @@ import net.minecraft.world.GameType; import org.spongepowered.api.Sponge; import org.spongepowered.api.block.BlockState; -import org.spongepowered.api.boss.ServerBossBar; import org.spongepowered.api.data.Keys; import org.spongepowered.api.data.type.CatType; import org.spongepowered.api.data.type.DyeColor; @@ -127,7 +127,6 @@ import org.spongepowered.api.profile.property.ProfileProperty; import org.spongepowered.api.projectile.source.ProjectileSource; import org.spongepowered.api.statistic.Statistic; -import org.spongepowered.api.text.Text; import org.spongepowered.api.util.Color; import org.spongepowered.api.util.Direction; import org.spongepowered.api.util.rotation.Rotation; @@ -170,6 +169,7 @@ import org.spongepowered.common.accessor.entity.passive.horse.TraderLlamaEntityAccessor; import org.spongepowered.common.accessor.entity.projectile.AbstractArrowEntityAccessor; import org.spongepowered.common.accessor.entity.projectile.ShulkerBulletEntityAccessor; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.LocationTargetingBridge; import org.spongepowered.common.bridge.data.InvulnerableTrackedBridge; import org.spongepowered.common.bridge.entity.AggressiveEntityBridge; @@ -471,7 +471,7 @@ public void register() { register(GuardianEntity.class, Keys.BEAM_TARGET_ENTITY, e -> (Living) e.getTargetedEntity(), (e, t) -> ((GuardianEntityAccessor)e).accessor$setTargetedEntity(((LivingEntity) t).getEntityId())); - register(WitherEntityAccessor.class, Keys.BOSS_BAR, e -> (ServerBossBar) e.accessor$getBossInfo()); + register(WitherEntityAccessor.class, Keys.BOSS_BAR, e -> SpongeAdventure.asAdventure(e.accessor$getBossInfo())); register(WitherEntity.class, Keys.WITHER_TARGETS, e -> Stream.of(e.getWatchedTargetId(0), e.getWatchedTargetId(1), e.getWatchedTargetId(2)) .map(id -> e.getEntityWorld().getEntityByID(id)) @@ -941,7 +941,7 @@ private void registerEntityData() { register(Entity.class, Keys.IS_SILENT, Entity::isSilent, Entity::setSilent); register(Entity.class, Keys.IS_GLOWING, Entity::isGlowing, Entity::setGlowing); - register(EntityBridge.class, Keys.DISPLAY_NAME, (Text) null, + register(EntityBridge.class, Keys.DISPLAY_NAME, (Component) null, EntityBridge::bridge$getDisplayNameText, EntityBridge::bridge$setDisplayName); diff --git a/src/main/java/org/spongepowered/common/data/provider/generic/INameableDisplayNameProvider.java b/src/main/java/org/spongepowered/common/data/provider/generic/INameableDisplayNameProvider.java index b97e4a72243..1b6a05aa282 100644 --- a/src/main/java/org/spongepowered/common/data/provider/generic/INameableDisplayNameProvider.java +++ b/src/main/java/org/spongepowered/common/data/provider/generic/INameableDisplayNameProvider.java @@ -24,32 +24,32 @@ */ package org.spongepowered.common.data.provider.generic; +import net.kyori.adventure.text.Component; import net.minecraft.util.INameable; import org.spongepowered.api.data.Keys; -import org.spongepowered.api.text.Text; import org.spongepowered.common.bridge.CustomNameableBridge; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.data.provider.GenericMutableDataProvider; -import org.spongepowered.common.text.SpongeTexts; import java.util.Optional; -public class INameableDisplayNameProvider extends GenericMutableDataProvider { +public class INameableDisplayNameProvider extends GenericMutableDataProvider { public INameableDisplayNameProvider() { super(Keys.DISPLAY_NAME); } @Override - protected boolean set(INameable dataHolder, Text value) { + protected boolean set(INameable dataHolder, Component value) { if (dataHolder instanceof CustomNameableBridge) { - ((CustomNameableBridge) dataHolder).bridge$setCustomDisplayName(SpongeTexts.toComponent(value)); + ((CustomNameableBridge) dataHolder).bridge$setCustomDisplayName(SpongeAdventure.asVanilla(value)); return true; } return false; } @Override - protected Optional getFrom(INameable dataHolder) { - return Optional.of(SpongeTexts.toText(dataHolder.getDisplayName())); + protected Optional getFrom(INameable dataHolder) { + return Optional.of(SpongeAdventure.asAdventure(dataHolder.getDisplayName())); } } diff --git a/src/main/java/org/spongepowered/common/data/provider/item/ItemDisplayNameProvider.java b/src/main/java/org/spongepowered/common/data/provider/item/ItemDisplayNameProvider.java index 2753da6251b..3fa10852b02 100644 --- a/src/main/java/org/spongepowered/common/data/provider/item/ItemDisplayNameProvider.java +++ b/src/main/java/org/spongepowered/common/data/provider/item/ItemDisplayNameProvider.java @@ -24,30 +24,30 @@ */ package org.spongepowered.common.data.provider.item; +import net.kyori.adventure.text.Component; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; import org.spongepowered.api.data.Keys; -import org.spongepowered.api.text.Text; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.data.provider.GenericMutableDataProvider; -import org.spongepowered.common.text.SpongeTexts; import java.util.Optional; -public class ItemDisplayNameProvider extends GenericMutableDataProvider { +public class ItemDisplayNameProvider extends GenericMutableDataProvider { public ItemDisplayNameProvider() { super(Keys.DISPLAY_NAME); } @Override - protected Optional getFrom(Item dataHolder) { + protected Optional getFrom(Item dataHolder) { final ITextComponent displayName = dataHolder.getDisplayName(new ItemStack(dataHolder)); - return Optional.of(SpongeTexts.toText(displayName)); + return Optional.of(SpongeAdventure.asAdventure(displayName)); } @Override - protected boolean set(Item dataHolder, Text value) { + protected boolean set(Item dataHolder, Component value) { return false; } } diff --git a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackBookAuthorProvider.java b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackBookAuthorProvider.java index 6ea54b21022..0bcb3c601dd 100644 --- a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackBookAuthorProvider.java +++ b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackBookAuthorProvider.java @@ -24,6 +24,8 @@ */ package org.spongepowered.common.data.provider.item.stack; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -31,14 +33,12 @@ import net.minecraft.nbt.StringNBT; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.data.Keys; -import org.spongepowered.api.text.Text; import org.spongepowered.common.data.provider.item.ItemStackDataProvider; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.Constants; import java.util.Optional; -public class ItemStackBookAuthorProvider extends ItemStackDataProvider { +public class ItemStackBookAuthorProvider extends ItemStackDataProvider { public ItemStackBookAuthorProvider() { super(Keys.AUTHOR); @@ -50,18 +50,18 @@ protected boolean supports(Item item) { } @Override - protected Optional getFrom(final ItemStack dataHolder) { + protected Optional getFrom(final ItemStack dataHolder) { @Nullable final CompoundNBT tag = dataHolder.getTag(); if (tag == null) { return Optional.empty(); } final String legacy = tag.getString(Constants.Item.Book.ITEM_BOOK_AUTHOR); - return Optional.of(SpongeTexts.fromLegacy(legacy)); + return Optional.of(LegacyComponentSerializer.legacy().deserialize(legacy)); } @Override - protected boolean set(final ItemStack dataHolder, final Text value) { - dataHolder.setTagInfo(Constants.Item.Book.ITEM_BOOK_AUTHOR, new StringNBT(SpongeTexts.toLegacy(value))); + protected boolean set(final ItemStack dataHolder, final Component value) { + dataHolder.setTagInfo(Constants.Item.Book.ITEM_BOOK_AUTHOR, new StringNBT(LegacyComponentSerializer.legacy().serialize(value))); return true; } } diff --git a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackBookPagesProvider.java b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackBookPagesProvider.java index d3adf806ebd..a3e7496f8f0 100644 --- a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackBookPagesProvider.java +++ b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackBookPagesProvider.java @@ -24,13 +24,13 @@ */ package org.spongepowered.common.data.provider.item.stack; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.minecraft.item.Item; import net.minecraft.item.Items; import org.spongepowered.api.data.Keys; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.TextSerializers; -public class ItemStackBookPagesProvider extends AbstractItemStackBookPagesProvider { +public class ItemStackBookPagesProvider extends AbstractItemStackBookPagesProvider { public ItemStackBookPagesProvider() { super(Keys.PAGES); @@ -42,12 +42,12 @@ protected boolean supports(Item item) { } @Override - protected String translateTo(Text text) { - return TextSerializers.JSON.get().serialize(text); + protected String translateTo(Component text) { + return GsonComponentSerializer.gson().serialize(text); } @Override - protected Text translateFrom(String page) { - return TextSerializers.JSON.get().deserialize(page); + protected Component translateFrom(String page) { + return GsonComponentSerializer.gson().deserialize(page); } } diff --git a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackDisplayNameProvider.java b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackDisplayNameProvider.java index f140ba65536..0398a157fbb 100644 --- a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackDisplayNameProvider.java +++ b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackDisplayNameProvider.java @@ -24,32 +24,33 @@ */ package org.spongepowered.common.data.provider.item.stack; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.StringNBT; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.data.Keys; -import org.spongepowered.api.text.Text; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.data.provider.item.ItemStackDataProvider; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.Constants; import java.util.Optional; -public class ItemStackDisplayNameProvider extends ItemStackDataProvider { +public class ItemStackDisplayNameProvider extends ItemStackDataProvider { public ItemStackDisplayNameProvider() { super(Keys.DISPLAY_NAME); } @Override - protected Optional getFrom(ItemStack dataHolder) { + protected Optional getFrom(ItemStack dataHolder) { if (dataHolder.getItem() == Items.WRITTEN_BOOK) { @Nullable final CompoundNBT tag = dataHolder.getTag(); if (tag != null) { final String title = tag.getString(Constants.Item.Book.ITEM_BOOK_TITLE); - return Optional.of(SpongeTexts.fromLegacy(title)); + return Optional.of(LegacyComponentSerializer.legacy().deserialize(title)); } } @@ -60,16 +61,16 @@ protected Optional getFrom(ItemStack dataHolder) { } */ - return Optional.of(SpongeTexts.toText(dataHolder.getDisplayName())); + return Optional.of(SpongeAdventure.asAdventure(dataHolder.getDisplayName())); } @Override - protected boolean set(ItemStack dataHolder, Text value) { + protected boolean set(ItemStack dataHolder, Component value) { if (dataHolder.getItem() == Items.WRITTEN_BOOK) { - final String legacy = SpongeTexts.toLegacy(value); + final String legacy = LegacyComponentSerializer.legacy().serialize(value); dataHolder.setTagInfo(Constants.Item.Book.ITEM_BOOK_TITLE, new StringNBT(legacy)); } else { - dataHolder.setDisplayName(SpongeTexts.toComponent(value)); + dataHolder.setDisplayName(SpongeAdventure.asVanilla(value)); } return true; } diff --git a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackLoreProvider.java b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackLoreProvider.java index 76e1ddc74ad..064bde0f065 100644 --- a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackLoreProvider.java +++ b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackLoreProvider.java @@ -24,28 +24,28 @@ */ package org.spongepowered.common.data.provider.item.stack; +import net.kyori.adventure.text.Component; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.data.Keys; -import org.spongepowered.api.text.Text; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.data.provider.item.ItemStackDataProvider; import org.spongepowered.common.data.util.NbtCollectors; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.Constants; import java.util.List; import java.util.Optional; -public class ItemStackLoreProvider extends ItemStackDataProvider> { +public class ItemStackLoreProvider extends ItemStackDataProvider> { public ItemStackLoreProvider() { super(Keys.LORE); } @Override - protected Optional> getFrom(ItemStack dataHolder) { + protected Optional> getFrom(ItemStack dataHolder) { @Nullable final CompoundNBT tag = dataHolder.getTag(); if (tag == null || tag.contains(Constants.Item.ITEM_DISPLAY)) { return Optional.empty(); @@ -54,15 +54,15 @@ protected Optional> getFrom(ItemStack dataHolder) { if (list.isEmpty()) { return Optional.empty(); } - return Optional.of(SpongeTexts.fromJson(list.stream().collect(NbtCollectors.toStringList()))); + return Optional.of(SpongeAdventure.json(list.stream().collect(NbtCollectors.toStringList()))); } @Override - protected boolean set(ItemStack dataHolder, List value) { + protected boolean set(ItemStack dataHolder, List value) { if (value.isEmpty()) { delete(dataHolder); } else { - final ListNBT list = SpongeTexts.asJsonNBT(value); + final ListNBT list = SpongeAdventure.listTagJson(value); dataHolder.getOrCreateChildTag(Constants.Item.ITEM_DISPLAY).put(Constants.Item.ITEM_LORE, list); } return true; diff --git a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackSignLinesProvider.java b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackSignLinesProvider.java index 62786f80fc2..67f734839c4 100644 --- a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackSignLinesProvider.java +++ b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackSignLinesProvider.java @@ -25,27 +25,27 @@ package org.spongepowered.common.data.provider.item.stack; import com.google.common.collect.Lists; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.data.Keys; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.TextSerializers; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.data.provider.item.ItemStackDataProvider; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.Constants; import java.util.List; import java.util.Optional; -public class ItemStackSignLinesProvider extends ItemStackDataProvider> { +public class ItemStackSignLinesProvider extends ItemStackDataProvider> { public ItemStackSignLinesProvider() { super(Keys.SIGN_LINES); } @Override - protected Optional> getFrom(ItemStack dataHolder) { + protected Optional> getFrom(ItemStack dataHolder) { @Nullable final CompoundNBT tag = dataHolder.getChildTag(Constants.Item.BLOCK_ENTITY_TAG); if (tag == null) { return Optional.empty(); @@ -54,23 +54,23 @@ protected Optional> getFrom(ItemStack dataHolder) { if (!id.equalsIgnoreCase(Constants.TileEntity.SIGN)) { return Optional.empty(); } - final List texts = Lists.newArrayListWithCapacity(4); + final List texts = Lists.newArrayListWithCapacity(4); for (int i = 0; i < 4; i++) { - texts.add(SpongeTexts.fromLegacy(tag.getString("Text" + (i + 1)))); + texts.add(SpongeAdventure.json(tag.getString("Text" + (i + 1)))); } return Optional.of(texts); } @Override - protected boolean set(ItemStack dataHolder, List value) { + protected boolean set(ItemStack dataHolder, List value) { final CompoundNBT tag = dataHolder.getOrCreateChildTag(Constants.Item.BLOCK_ENTITY_TAG); tag.putString(Constants.Item.BLOCK_ENTITY_ID, Constants.TileEntity.SIGN); for (int i = 0; i < 4; i++) { - final Text line = value.size() > i ? value.get(i) : Text.empty(); + final Component line = value.size() > i ? value.get(i) : TextComponent.empty(); if (line == null) { throw new IllegalArgumentException("A null line was given at index " + i); } - tag.putString("Text" + (i + 1), TextSerializers.JSON.get().serialize(line)); + tag.putString("Text" + (i + 1), SpongeAdventure.json(line)); } return true; } diff --git a/src/main/java/org/spongepowered/common/data/type/SpongeSkinPart.java b/src/main/java/org/spongepowered/common/data/type/SpongeSkinPart.java index 784a4e1dc24..109da504942 100644 --- a/src/main/java/org/spongepowered/common/data/type/SpongeSkinPart.java +++ b/src/main/java/org/spongepowered/common/data/type/SpongeSkinPart.java @@ -25,22 +25,29 @@ package org.spongepowered.common.data.type; import com.google.common.base.MoreObjects; +import net.kyori.adventure.text.Component; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.data.type.SkinPart; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.common.SpongeCatalogType; -public final class SpongeSkinPart extends SpongeCatalogType.Translatable implements SkinPart { +public final class SpongeSkinPart extends SpongeCatalogType implements SkinPart { private final int ordinal; private final int mask; + private final Component component; - public SpongeSkinPart(ResourceKey key, Translation translation, int ordinal) { - super(key, translation); + public SpongeSkinPart(ResourceKey key, int ordinal, final Component component) { + super(key); this.ordinal = ordinal; + this.component = component; this.mask = 1 << this.ordinal; } + @Override + public Component asComponent() { + return this.component; + } + public boolean test(int flags) { return (flags & this.mask) != 0; } diff --git a/src/main/java/org/spongepowered/common/data/type/SpongeWoodType.java b/src/main/java/org/spongepowered/common/data/type/SpongeWoodType.java index 05a387cb7b0..d733f2b4b14 100644 --- a/src/main/java/org/spongepowered/common/data/type/SpongeWoodType.java +++ b/src/main/java/org/spongepowered/common/data/type/SpongeWoodType.java @@ -28,16 +28,15 @@ import net.minecraft.tags.Tag; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.data.type.WoodType; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.common.SpongeCatalogType; import org.spongepowered.common.TagHolderCatalogType; -public final class SpongeWoodType extends SpongeCatalogType.Translatable implements WoodType, TagHolderCatalogType { +public final class SpongeWoodType extends SpongeCatalogType implements WoodType, TagHolderCatalogType { private final Tag tag; - public SpongeWoodType(ResourceKey key, Translation translation, Tag tag) { - super(key, translation); + public SpongeWoodType(ResourceKey key, Tag tag) { + super(key); this.tag = tag; } diff --git a/src/main/java/org/spongepowered/common/effect/record/SpongeRecordType.java b/src/main/java/org/spongepowered/common/effect/record/SpongeRecordType.java index 326f968d4bd..871e01aea02 100644 --- a/src/main/java/org/spongepowered/common/effect/record/SpongeRecordType.java +++ b/src/main/java/org/spongepowered/common/effect/record/SpongeRecordType.java @@ -35,11 +35,10 @@ import org.spongepowered.api.effect.sound.music.MusicDisc; import org.spongepowered.common.SpongeCatalogType; import org.spongepowered.common.accessor.item.MusicDiscItemAccessor; -import org.spongepowered.common.text.translation.SpongeTranslation; import org.spongepowered.math.vector.Vector3i; import javax.annotation.Nullable; -public final class SpongeRecordType extends SpongeCatalogType.Translatable implements MusicDisc { +public final class SpongeRecordType extends SpongeCatalogType implements MusicDisc { /** * This is the effect ID that is used by the Effect packet to play a record effect. @@ -51,7 +50,7 @@ public final class SpongeRecordType extends SpongeCatalogType.Translatable imple private final int id; public SpongeRecordType(ResourceKey key, MusicDiscItem item) { - super(key, new SpongeTranslation(item.getTranslationKey())); + super(key); this.item = item; this.id = Registry.ITEM.getId(item); } diff --git a/src/main/java/org/spongepowered/common/entity/living/human/HumanEntity.java b/src/main/java/org/spongepowered/common/entity/living/human/HumanEntity.java index c1989c35ee9..3d6dca98aeb 100644 --- a/src/main/java/org/spongepowered/common/entity/living/human/HumanEntity.java +++ b/src/main/java/org/spongepowered/common/entity/living/human/HumanEntity.java @@ -30,6 +30,8 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import com.mojang.authlib.properties.PropertyMap; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; import net.minecraft.entity.CreatureEntity; @@ -61,7 +63,6 @@ import org.spongepowered.api.profile.property.ProfileProperty; import org.spongepowered.api.scheduler.Task; import org.spongepowered.api.scoreboard.TeamMember; -import org.spongepowered.api.text.Text; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.bridge.data.DataCompoundHolder; import org.spongepowered.common.accessor.entity.LivingEntityAccessor; @@ -143,8 +144,8 @@ public boolean isAIDisabled() { } @Override - public Text getTeamRepresentation() { - return Text.of(this.fakeProfile.getName()); + public Component getTeamRepresentation() { + return TextComponent.of(this.fakeProfile.getName()); } @Override diff --git a/src/main/java/org/spongepowered/common/entity/player/tab/SpongeTabList.java b/src/main/java/org/spongepowered/common/entity/player/tab/SpongeTabList.java index a56dac4dc16..329c1339d97 100644 --- a/src/main/java/org/spongepowered/common/entity/player/tab/SpongeTabList.java +++ b/src/main/java/org/spongepowered/common/entity/player/tab/SpongeTabList.java @@ -31,6 +31,7 @@ import com.google.common.base.MoreObjects; import com.google.common.collect.Maps; import com.mojang.authlib.GameProfile; +import net.kyori.adventure.text.Component; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.play.server.SPlayerListHeaderFooterPacket; import net.minecraft.network.play.server.SPlayerListItemPacket; @@ -41,10 +42,8 @@ import org.spongepowered.api.entity.living.player.server.ServerPlayer; import org.spongepowered.api.entity.living.player.tab.TabList; import org.spongepowered.api.entity.living.player.tab.TabListEntry; -import org.spongepowered.api.text.Text; import org.spongepowered.common.accessor.network.play.server.SPlayerListHeaderFooterPacketAccessor; import org.spongepowered.common.accessor.network.play.server.SPlayerListItemPacketAccessor; -import org.spongepowered.common.text.SpongeTexts; import java.util.Collection; import java.util.Collections; @@ -53,13 +52,14 @@ import java.util.UUID; import javax.annotation.Nullable; +import org.spongepowered.common.adventure.SpongeAdventure; public final class SpongeTabList implements TabList { private static final ITextComponent EMPTY_COMPONENT = new StringTextComponent(""); private final ServerPlayerEntity player; - @Nullable private Text header; - @Nullable private Text footer; + @Nullable private Component header; + @Nullable private Component footer; private final Map entries = Maps.newHashMap(); public SpongeTabList(final ServerPlayerEntity player) { @@ -72,12 +72,12 @@ public ServerPlayer getPlayer() { } @Override - public Optional getHeader() { + public Optional getHeader() { return Optional.ofNullable(this.header); } @Override - public TabList setHeader(@Nullable final Text header) { + public TabList setHeader(@Nullable final Component header) { this.header = header; this.refreshClientHeaderFooter(); @@ -86,12 +86,12 @@ public TabList setHeader(@Nullable final Text header) { } @Override - public Optional getFooter() { + public Optional getFooter() { return Optional.ofNullable(this.footer); } @Override - public TabList setFooter(@Nullable final Text footer) { + public TabList setFooter(@Nullable final Component footer) { this.footer = footer; this.refreshClientHeaderFooter(); @@ -100,7 +100,7 @@ public TabList setFooter(@Nullable final Text footer) { } @Override - public TabList setHeaderAndFooter(@Nullable final Text header, @Nullable final Text footer) { + public TabList setHeaderAndFooter(@Nullable final Component header, @Nullable final Component footer) { // Do not call the methods, set directly this.header = header; this.footer = footer; @@ -114,8 +114,8 @@ public TabList setHeaderAndFooter(@Nullable final Text header, @Nullable final T private void refreshClientHeaderFooter() { final SPlayerListHeaderFooterPacket packet = new SPlayerListHeaderFooterPacket(); // MC-98180 - Sending null as header or footer will cause an exception on the client - ((SPlayerListHeaderFooterPacketAccessor) packet).accessor$setHeader(this.header == null ? EMPTY_COMPONENT : SpongeTexts.toComponent(this.header)); - ((SPlayerListHeaderFooterPacketAccessor) packet).accessor$setFooter(this.footer == null ? EMPTY_COMPONENT : SpongeTexts.toComponent(this.footer)); + ((SPlayerListHeaderFooterPacketAccessor) packet).accessor$setHeader(this.header == null ? EMPTY_COMPONENT : SpongeAdventure.asVanilla(this.header)); + ((SPlayerListHeaderFooterPacketAccessor) packet).accessor$setFooter(this.footer == null ? EMPTY_COMPONENT : SpongeAdventure.asVanilla(this.footer)); this.player.connection.sendPacket(packet); } @@ -145,7 +145,7 @@ private void addEntry(final SPlayerListItemPacket.AddPlayerData entry) { this.addEntry(new SpongeTabListEntry( this, (org.spongepowered.api.profile.GameProfile) entry.getProfile(), - entry.getDisplayName() == null ? null : SpongeTexts.toText(entry.getDisplayName()), + entry.getDisplayName() == null ? null : SpongeAdventure.asAdventure(entry.getDisplayName()), entry.getPing(), (GameMode) (Object) entry.getGameMode() ), false); @@ -193,7 +193,7 @@ void sendUpdate(final TabListEntry entry, final SPlayerListItemPacket.Action act ((SPlayerListItemPacketAccessor) packet).accessor$setAction(action); final SPlayerListItemPacket.AddPlayerData data = packet.new AddPlayerData((GameProfile) entry.getProfile(), entry.getLatency(), (GameType) (Object) entry.getGameMode(), - entry.getDisplayName().isPresent() ? SpongeTexts.toComponent(entry.getDisplayName().get()) : null); + entry.getDisplayName().isPresent() ? SpongeAdventure.asVanilla(entry.getDisplayName().get()) : null); ((SPlayerListItemPacketAccessor) packet).accessor$getPlayers().add(data); this.player.connection.sendPacket(packet); } @@ -219,7 +219,7 @@ public void updateEntriesOnSend(final SPlayerListItemPacket packet) { this.getEntry(data.getProfile().getId()).ifPresent(entry -> { if (action == SPlayerListItemPacket.Action.UPDATE_DISPLAY_NAME) { ((SpongeTabListEntry) entry).updateWithoutSend(); - entry.setDisplayName(data.getDisplayName() == null ? null : SpongeTexts.toText(data.getDisplayName())); + entry.setDisplayName(data.getDisplayName() == null ? null : SpongeAdventure.asAdventure(data.getDisplayName())); } else if (action == SPlayerListItemPacket.Action.UPDATE_LATENCY) { ((SpongeTabListEntry) entry).updateWithoutSend(); entry.setLatency(data.getPing()); diff --git a/src/main/java/org/spongepowered/common/entity/player/tab/SpongeTabListEntry.java b/src/main/java/org/spongepowered/common/entity/player/tab/SpongeTabListEntry.java index 2ecda6cd66b..badd3dcafe9 100644 --- a/src/main/java/org/spongepowered/common/entity/player/tab/SpongeTabListEntry.java +++ b/src/main/java/org/spongepowered/common/entity/player/tab/SpongeTabListEntry.java @@ -29,11 +29,11 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import net.kyori.adventure.text.Component; import org.spongepowered.api.entity.living.player.gamemode.GameMode; import org.spongepowered.api.entity.living.player.tab.TabList; import org.spongepowered.api.entity.living.player.tab.TabListEntry; import org.spongepowered.api.profile.GameProfile; -import org.spongepowered.api.text.Text; import java.util.Optional; @@ -47,12 +47,12 @@ public final class SpongeTabListEntry implements TabListEntry { private SpongeTabList list; private final GameProfile profile; - @Nullable private Text displayName; + @Nullable private Component displayName; private int latency; private GameMode gameMode; private boolean updateWithoutSend; - public SpongeTabListEntry(TabList list, GameProfile profile, @Nullable Text displayName, int latency, GameMode gameMode) { + public SpongeTabListEntry(TabList list, GameProfile profile, @Nullable Component displayName, int latency, GameMode gameMode) { checkState(list instanceof SpongeTabList, "list is not a SpongeTabList"); this.list = (SpongeTabList) list; this.profile = checkNotNull(profile, "profile"); @@ -72,12 +72,12 @@ public GameProfile getProfile() { } @Override - public Optional getDisplayName() { + public Optional getDisplayName() { return Optional.ofNullable(this.displayName); } @Override - public TabListEntry setDisplayName(@Nullable Text displayName) { + public TabListEntry setDisplayName(@Nullable Component displayName) { this.displayName = displayName; this.sendUpdate(SPlayerListItemPacket.Action.UPDATE_DISPLAY_NAME); return this; diff --git a/src/main/java/org/spongepowered/common/entity/player/tab/TabListEntryBuilder.java b/src/main/java/org/spongepowered/common/entity/player/tab/TabListEntryBuilder.java index d255ce18303..ef1810c6f93 100644 --- a/src/main/java/org/spongepowered/common/entity/player/tab/TabListEntryBuilder.java +++ b/src/main/java/org/spongepowered/common/entity/player/tab/TabListEntryBuilder.java @@ -27,11 +27,11 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; +import net.kyori.adventure.text.Component; import org.spongepowered.api.entity.living.player.gamemode.GameMode; import org.spongepowered.api.entity.living.player.tab.TabList; import org.spongepowered.api.entity.living.player.tab.TabListEntry; import org.spongepowered.api.profile.GameProfile; -import org.spongepowered.api.text.Text; import javax.annotation.Nullable; @@ -39,7 +39,7 @@ public final class TabListEntryBuilder implements TabListEntry.Builder { @Nullable private TabList list; @Nullable private GameProfile profile; - @Nullable private Text displayName; + @Nullable private Component displayName; private int latency; @Nullable private GameMode gameMode; @@ -56,7 +56,7 @@ public TabListEntry.Builder profile(GameProfile profile) { } @Override - public TabListEntry.Builder displayName(@Nullable Text displayName) { + public TabListEntry.Builder displayName(@Nullable Component displayName) { this.displayName = displayName; return this; } diff --git a/src/main/java/org/spongepowered/common/event/SpongeCommonEventFactory.java b/src/main/java/org/spongepowered/common/event/SpongeCommonEventFactory.java index 760cb9b5366..b1d29af3878 100644 --- a/src/main/java/org/spongepowered/common/event/SpongeCommonEventFactory.java +++ b/src/main/java/org/spongepowered/common/event/SpongeCommonEventFactory.java @@ -27,6 +27,10 @@ import static org.spongepowered.common.event.tracking.phase.packet.PacketPhaseUtil.handleCustomCursor; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.block.Block; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.item.ItemEntity; @@ -61,8 +65,6 @@ import org.spongepowered.api.data.type.HandType; import org.spongepowered.api.data.type.InstrumentType; import org.spongepowered.api.data.type.NotePitch; -import org.spongepowered.api.effect.sound.SoundCategories; -import org.spongepowered.api.effect.sound.SoundCategory; import org.spongepowered.api.effect.sound.SoundType; import org.spongepowered.api.effect.sound.SoundTypes; import org.spongepowered.api.effect.sound.music.MusicDisc; @@ -97,12 +99,9 @@ import org.spongepowered.api.event.item.inventory.DropItemEvent; import org.spongepowered.api.event.item.inventory.InteractItemEvent; import org.spongepowered.api.event.item.inventory.container.InteractContainerEvent; -import org.spongepowered.api.event.message.MessageEvent; import org.spongepowered.api.event.sound.PlaySoundEvent; import org.spongepowered.api.item.inventory.ItemStackSnapshot; import org.spongepowered.api.projectile.source.ProjectileSource; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.channel.MessageChannel; import org.spongepowered.api.util.Direction; import org.spongepowered.api.util.Tristate; import org.spongepowered.api.world.LocatableBlock; @@ -112,13 +111,13 @@ import org.spongepowered.api.world.storage.WorldProperties; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.SpongeImplHooks; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.block.SpongeBlockSnapshot; import org.spongepowered.common.block.SpongeBlockSnapshotBuilder; import org.spongepowered.common.bridge.CreatorTrackedBridge; import org.spongepowered.common.bridge.block.BlockBridge; import org.spongepowered.common.bridge.entity.EntityBridge; import org.spongepowered.common.bridge.entity.player.PlayerEntityBridge; -import org.spongepowered.common.bridge.entity.player.ServerPlayerEntityBridge; import org.spongepowered.common.bridge.explosives.ExplosiveBridge; import org.spongepowered.common.bridge.inventory.container.TrackedInventoryBridge; import org.spongepowered.common.bridge.world.ServerWorldBridge; @@ -136,7 +135,6 @@ import org.spongepowered.common.inventory.util.ContainerUtil; import org.spongepowered.common.item.util.ItemStackUtil; import org.spongepowered.common.registry.provider.DirectionFacingProvider; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.Constants; import org.spongepowered.common.util.PrettyPrinter; import org.spongepowered.common.util.VecHelper; @@ -709,18 +707,17 @@ public static Event callMoveEntityEvent(final net.minecraft.entity.Entity entity return null; } public static Optional callDestructEntityEventDeath(final LivingEntity entity, @Nullable final DamageSource source, final boolean isMainThread) { - final MessageEvent.MessageFormatter formatter = new MessageEvent.MessageFormatter(); - final MessageChannel originalChannel; - final MessageChannel channel; - final Text originalMessage; + final Audience originalChannel; + final Audience channel; + final Component originalMessage; Optional sourceCreator = Optional.empty(); final boolean messageCancelled = false; if (entity instanceof ServerPlayerEntity) { - originalChannel = channel = ((ServerPlayerEntityBridge) entity).bridge$getDeathMessageChannel(); + originalChannel = channel = (Player) entity; } else { - originalChannel = MessageChannel.toNone(); - channel = MessageChannel.toNone(); + originalChannel = Audience.empty(); + channel = Audience.empty(); } if (source instanceof EntityDamageSource) { final EntityDamageSource damageSource = (EntityDamageSource) source; @@ -732,8 +729,7 @@ public static Optional callDestructEntityEventDeath(f } } - originalMessage = SpongeTexts.toText(entity.getCombatTracker().getDeathMessage()); - formatter.getBody().add(new MessageEvent.DefaultBodyApplier(originalMessage)); + originalMessage = SpongeAdventure.asAdventure(entity.getCombatTracker().getDeathMessage()); // Try-with-resources will not produce an NPE when trying to autoclose the frame if it is null. Client sided // checks need to be made here since entities can die on the client world. try (final CauseStackManager.StackFrame frame = isMainThread ? PhaseTracker.getCauseStackManager().pushCauseFrame() : null) { @@ -748,13 +744,13 @@ public static Optional callDestructEntityEventDeath(f final Cause cause = isMainThread ? PhaseTracker.getCauseStackManager().getCurrentCause() : Cause.of(EventContext.empty(), source == null ? entity : source); final DestructEntityEvent.Death event = SpongeEventFactory.createDestructEntityEventDeath(cause, - originalChannel, Optional.of(channel), (Living) entity, - formatter, entity.world.getGameRules().getBoolean(GameRules.KEEP_INVENTORY), messageCancelled); + originalChannel, Optional.of(channel), originalMessage, originalMessage, (Living) entity, + entity.world.getGameRules().getBoolean(GameRules.KEEP_INVENTORY), messageCancelled); SpongeCommon.postEvent(event, true); // Client code should be able to cancel the death event if server cancels it. - final Text message = event.getMessage(); + final Component message = event.getMessage(); // Check the event isn't cancelled either. If it is, then don't spawn the message. - if (!event.isCancelled() && !event.isMessageCancelled() && !message.isEmpty()) { - event.getChannel().ifPresent(eventChannel -> eventChannel.send(entity, event.getMessage())); + if (!event.isCancelled() && !event.isMessageCancelled() && message != TextComponent.empty()) { + event.getAudience().ifPresent(eventChannel -> eventChannel.sendMessage(message)); } return Optional.of(event); } @@ -1022,7 +1018,7 @@ public static PlaySoundEvent.Broadcast callPlaySoundBroadcastEvent(final CauseSt } final ServerLocation location = ServerLocation.of((org.spongepowered.api.world.server.ServerWorld) bridge, pos.getX(), pos.getY(), pos.getZ()); final PlaySoundEvent.Broadcast event = SpongeEventFactory.createPlaySoundEventBroadcast(frame.getCurrentCause(), location, - SoundCategories.HOSTILE.get(), soundType.get(), 1.0F, volume); + Sound.Source.HOSTILE, soundType.get(), 1.0F, volume); SpongeCommon.postEvent(event); return event; } @@ -1034,9 +1030,9 @@ public static PlaySoundEvent.Record callPlaySoundRecordEvent(final Cause cause, final PlaySoundEvent.Record event = data == 0 ? SpongeEventFactory - .createPlaySoundEventRecordStart(cause, apiJuke, location, recordType, SoundCategories.RECORD.get(), recordType.getSound(), 1.0F, 4.0F) + .createPlaySoundEventRecordStart(cause, apiJuke, location, recordType, Sound.Source.RECORD, recordType.getSound(), 1.0F, 4.0F) : SpongeEventFactory - .createPlaySoundEventRecordStop(cause, apiJuke, location, recordType, SoundCategories.RECORD.get(), recordType.getSound(), 1.0F, 4.0F); + .createPlaySoundEventRecordStop(cause, apiJuke, location, recordType, Sound.Source.RECORD, recordType.getSound(), 1.0F, 4.0F); SpongeCommon.postEvent(event); return event; } @@ -1047,14 +1043,14 @@ public static PlaySoundEvent.AtEntity callPlaySoundAtEntityEvent(final Cause cau final SoundEvent name, final float pitch, final float volume) { final ServerLocation location = ServerLocation.of((org.spongepowered.api.world.server.ServerWorld) worldMixin, x, y, z); final PlaySoundEvent.AtEntity event = SpongeEventFactory.createPlaySoundEventAtEntity(cause, location, Optional.ofNullable(entity), - (SoundCategory) (Object) category, (SoundType) name, pitch, volume); + SpongeAdventure.asAdventure(category), (SoundType) name, pitch, volume); SpongeCommon.postEvent(event); return event; } public static PlaySoundEvent.NoteBlock callPlaySoundNoteBlockEvent(final Cause cause, final World world, final BlockPos pos, final SoundEvent soundEvent, final InstrumentType instrument, final NotePitch notePitch, final Float pitch) { final ServerLocation location = ServerLocation.of((org.spongepowered.api.world.server.ServerWorld) world, pos.getX(), pos.getY(), pos.getZ()); - final PlaySoundEvent.NoteBlock event = SpongeEventFactory.createPlaySoundEventNoteBlock(cause, instrument, location, notePitch, SoundCategories.RECORD.get(), (SoundType)soundEvent, pitch, 3.0F); + final PlaySoundEvent.NoteBlock event = SpongeEventFactory.createPlaySoundEventNoteBlock(cause, instrument, location, notePitch, Sound.Source.RECORD, (SoundType)soundEvent, pitch, 3.0F); SpongeCommon.postEvent(event); return event; } diff --git a/src/main/java/org/spongepowered/common/event/inventory/InventoryEventFactory.java b/src/main/java/org/spongepowered/common/event/inventory/InventoryEventFactory.java index 487b820fad2..7fdcdacad02 100644 --- a/src/main/java/org/spongepowered/common/event/inventory/InventoryEventFactory.java +++ b/src/main/java/org/spongepowered/common/event/inventory/InventoryEventFactory.java @@ -26,6 +26,7 @@ import static org.spongepowered.common.event.tracking.phase.packet.PacketPhaseUtil.handleCustomCursor; +import net.kyori.adventure.text.Component; import net.minecraft.enchantment.EnchantmentData; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.item.ItemEntity; @@ -69,8 +70,8 @@ import org.spongepowered.api.item.inventory.type.CarriedInventory; import org.spongepowered.api.item.inventory.type.ViewableInventory; import org.spongepowered.api.item.recipe.crafting.CraftingRecipe; -import org.spongepowered.api.text.Text; import org.spongepowered.common.SpongeCommon; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.entity.player.ServerPlayerEntityBridge; import org.spongepowered.common.bridge.inventory.container.ContainerBridge; import org.spongepowered.common.bridge.inventory.container.TrackedContainerBridge; @@ -83,7 +84,6 @@ import org.spongepowered.common.inventory.util.InventoryUtil; import org.spongepowered.common.item.enchantment.SpongeRandomEnchantmentListBuilder; import org.spongepowered.common.item.util.ItemStackUtil; -import org.spongepowered.common.text.SpongeTexts; import javax.annotation.Nullable; import java.util.ArrayList; @@ -314,7 +314,7 @@ public static boolean callInteractInventoryOpenEvent(final ServerPlayerEntity pl } @Nullable - public static Container displayContainer(final ServerPlayerEntity player, final Inventory inventory, final Text displayName) { + public static Container displayContainer(final ServerPlayerEntity player, final Inventory inventory, final Component displayName) { final net.minecraft.inventory.container.Container previousContainer = player.openContainer; final net.minecraft.inventory.container.Container container; @@ -346,7 +346,7 @@ public static Container displayContainer(final ServerPlayerEntity player, final level = 1; } if (displayName != null) { - display = SpongeTexts.toComponent(displayName); + display = SpongeAdventure.asVanilla(displayName); } OptionalInt containerId = player.openContainer(new SimpleNamedContainerProvider((id, playerInv, p) -> new MerchantContainer(id, playerInv, merchant), display)); diff --git a/src/main/java/org/spongepowered/common/inventory/custom/SpongeInventoryMenu.java b/src/main/java/org/spongepowered/common/inventory/custom/SpongeInventoryMenu.java index 78f1ae2ae11..a8d88b20404 100644 --- a/src/main/java/org/spongepowered/common/inventory/custom/SpongeInventoryMenu.java +++ b/src/main/java/org/spongepowered/common/inventory/custom/SpongeInventoryMenu.java @@ -24,6 +24,7 @@ */ package org.spongepowered.common.inventory.custom; +import net.kyori.adventure.text.Component; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.ClickType; import net.minecraft.inventory.container.Slot; @@ -42,7 +43,6 @@ import org.spongepowered.api.item.inventory.menu.handler.SlotChangeHandler; import org.spongepowered.api.item.inventory.menu.handler.SlotClickHandler; import org.spongepowered.api.item.inventory.type.ViewableInventory; -import org.spongepowered.api.text.Text; import org.spongepowered.common.bridge.inventory.container.TrackedContainerBridge; import org.spongepowered.common.event.tracking.PhaseTracker; import org.spongepowered.common.item.util.ItemStackUtil; @@ -58,7 +58,7 @@ public class SpongeInventoryMenu implements InventoryMenu { private ViewableInventory inventory; private Map tracked = new HashMap<>(); - private Text title; + private Component title; @Nullable private SlotClickHandler slotClickHandler; @@ -95,7 +95,7 @@ private void reopen() { new ArrayList<>(this.tracked.values()).stream().distinct().forEach(this::open); } - public void setTitle(Text title) { + public void setTitle(Component title) { this.title = title; this.reopen(); } diff --git a/src/main/java/org/spongepowered/common/inventory/fabric/InventoryTranslator.java b/src/main/java/org/spongepowered/common/inventory/fabric/InventoryTranslator.java index 6af42838dc8..b214fb5aa19 100644 --- a/src/main/java/org/spongepowered/common/inventory/fabric/InventoryTranslator.java +++ b/src/main/java/org/spongepowered/common/inventory/fabric/InventoryTranslator.java @@ -25,7 +25,6 @@ package org.spongepowered.common.inventory.fabric; import net.minecraft.item.ItemStack; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.common.bridge.inventory.InventoryBridge; import java.util.Collection; diff --git a/src/main/java/org/spongepowered/common/item/SpongeItemStackSnapshot.java b/src/main/java/org/spongepowered/common/item/SpongeItemStackSnapshot.java index a04624c9533..b2570d8129d 100644 --- a/src/main/java/org/spongepowered/common/item/SpongeItemStackSnapshot.java +++ b/src/main/java/org/spongepowered/common/item/SpongeItemStackSnapshot.java @@ -44,7 +44,6 @@ import org.spongepowered.api.item.ItemType; import org.spongepowered.api.item.inventory.ItemStack; import org.spongepowered.api.item.inventory.ItemStackSnapshot; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.common.bridge.data.CustomDataHolderBridge; import org.spongepowered.common.data.persistence.NbtTranslator; import org.spongepowered.common.item.util.ItemStackUtil; @@ -164,11 +163,6 @@ public boolean isNone() { throw new UnsupportedOperationException("Implement is empty"); } - @Override - public Translation getTranslation() { - return this.privateStack.getTranslation(); - } - @Override public ItemStack createStack() { final net.minecraft.item.ItemStack nativeStack = ItemStackUtil.cloneDefensiveNative(ItemStackUtil.toNative(this.privateStack.copy())); diff --git a/src/main/java/org/spongepowered/common/network/status/SpongeStatusResponse.java b/src/main/java/org/spongepowered/common/network/status/SpongeStatusResponse.java index 3c53cf94281..3385c53ae0e 100644 --- a/src/main/java/org/spongepowered/common/network/status/SpongeStatusResponse.java +++ b/src/main/java/org/spongepowered/common/network/status/SpongeStatusResponse.java @@ -24,8 +24,6 @@ */ package org.spongepowered.common.network.status; -import static org.spongepowered.common.text.SpongeTexts.COLOR_CHAR; - import net.minecraft.network.ServerStatusResponse; import net.minecraft.server.MinecraftServer; import org.spongepowered.api.MinecraftVersion; @@ -37,8 +35,7 @@ import org.spongepowered.api.network.status.StatusClient; import org.spongepowered.api.network.status.StatusResponse; import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.text.SpongeTexts; -import org.spongepowered.common.text.serializer.LegacyTexts; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.util.NetworkUtil; import java.net.InetSocketAddress; @@ -109,11 +106,11 @@ private static ServerStatusResponse.Version clone(@Nullable ServerStatusResponse } public static String getMotd(ServerStatusResponse response) { - return getFirstLine(SpongeTexts.toLegacy(response.getServerDescription())); + return getFirstLine(SpongeAdventure.legacySection(SpongeAdventure.asAdventure(response.getServerDescription()))); } public static String getUnformattedMotd(ServerStatusResponse response) { - return getFirstLine(LegacyTexts.stripAll(response.getServerDescription().getUnformattedComponentText(), COLOR_CHAR)); + return getFirstLine(SpongeAdventure.plain(SpongeAdventure.asAdventure(response.getServerDescription()))); } private static String getFirstLine(String s) { diff --git a/src/main/java/org/spongepowered/common/registry/SpongeBuilderRegistry.java b/src/main/java/org/spongepowered/common/registry/SpongeBuilderRegistry.java index c4884ecd4ab..5bcb236ae9d 100644 --- a/src/main/java/org/spongepowered/common/registry/SpongeBuilderRegistry.java +++ b/src/main/java/org/spongepowered/common/registry/SpongeBuilderRegistry.java @@ -36,7 +36,6 @@ import org.spongepowered.api.advancement.criteria.trigger.Trigger; import org.spongepowered.api.block.BlockSnapshot; import org.spongepowered.api.block.BlockState; -import org.spongepowered.api.boss.ServerBossBar; import org.spongepowered.api.command.Command; import org.spongepowered.api.command.CommandResult; import org.spongepowered.api.command.parameter.Parameter; @@ -103,7 +102,6 @@ import org.spongepowered.common.ban.SpongeBanBuilder; import org.spongepowered.common.block.SpongeBlockSnapshotBuilder; import org.spongepowered.common.block.SpongeBlockStateBuilder; -import org.spongepowered.common.boss.ServerBossBarBuilder; import org.spongepowered.common.command.SpongeParameterizedCommandBuilder; import org.spongepowered.common.command.parameter.managed.builder.SpongeTextParameterBuilder; import org.spongepowered.common.command.parameter.multi.SpongeFirstOfParameterBuilder; @@ -235,7 +233,6 @@ public void registerDefaultBuilders() { .register(TabListEntry.Builder.class, TabListEntryBuilder::new) .register(TradeOfferGenerator.Builder.class, SpongeTradeOfferGenerator.Builder::new) .register(ItemStackGenerator.Builder.class, SpongeItemStackGenerator.Builder::new) - .register(ServerBossBar.Builder.class, ServerBossBarBuilder::new) // .register(EntityArchetype.Builder.class, SpongeEntityArchetypeBuilder::new) // .register(BlockEntityArchetype.Builder.class, SpongeBlockEntityArchetypeBuilder::new) // .register(Schematic.Builder.class, SpongeSchematicBuilder::new) diff --git a/src/main/java/org/spongepowered/common/registry/SpongeCatalogRegistry.java b/src/main/java/org/spongepowered/common/registry/SpongeCatalogRegistry.java index 75e22ff6d7f..3c5e8632bde 100644 --- a/src/main/java/org/spongepowered/common/registry/SpongeCatalogRegistry.java +++ b/src/main/java/org/spongepowered/common/registry/SpongeCatalogRegistry.java @@ -136,7 +136,6 @@ import org.spongepowered.api.scoreboard.displayslot.DisplaySlot; import org.spongepowered.api.service.economy.Currency; import org.spongepowered.api.service.economy.account.AccountDeletionResultType; -import org.spongepowered.api.text.chat.ChatVisibility; import org.spongepowered.api.util.Tuple; import org.spongepowered.api.util.ban.BanType; import org.spongepowered.api.world.SerializationBehavior; @@ -145,6 +144,7 @@ import org.spongepowered.api.world.dimension.DimensionType; import org.spongepowered.api.world.teleport.PortalAgentType; import org.spongepowered.common.accessor.util.registry.SimpleRegistryAccessor; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.data.persistence.DataSerializers; import org.spongepowered.common.event.lifecycle.RegisterCatalogEventImpl; import org.spongepowered.common.registry.builtin.sponge.AccountDeletionResultTypeStreamGenerator; @@ -240,7 +240,7 @@ public Supplier provideSupplier(final Cl } @Override - public Optional get(final Class typeClass, final ResourceKey key) { + public Optional get(final Class typeClass, final net.kyori.adventure.key.Key key) { Preconditions.checkNotNull(key); final Registry registry = this.registriesByType.get(typeClass); @@ -248,7 +248,7 @@ public Optional get(final Class typeClass, final R return Optional.empty(); } - return (Optional) registry.getValue((ResourceLocation) (Object) key); + return (Optional) registry.getValue(SpongeAdventure.asVanilla(key)); } @Override @@ -319,7 +319,7 @@ public SpongeCatalogRegistry registerCatalo return this.registerSupplier(catalogClass, suggestedId, supplier); } - public SpongeCatalogRegistry registerSupplier(final Class catalogClass, final String suggestedId, Supplier supplier) { + public SpongeCatalogRegistry registerSupplier(final Class catalogClass, final String suggestedId, final Supplier supplier) { Preconditions.checkNotNull(supplier); final Map> catalogSuppliers = this.suppliers.computeIfAbsent((Class) (Object) catalogClass, k -> new Object2ObjectArrayMap<>()); @@ -375,7 +375,7 @@ public SpongeCatalogRegistry registerRegistry(final Clas return this; } - private SpongeCatalogRegistry generateCallbackRegistry(Class catalogClass, ResourceKey key, BiConsumer callback) { + private SpongeCatalogRegistry generateCallbackRegistry(final Class catalogClass, final ResourceKey key, final BiConsumer callback) { Preconditions.checkNotNull(key); final Registry registry = this.registries.putIfAbsent(key, (Registry) new CallbackRegistry<>(callback)); @@ -418,11 +418,11 @@ private SpongeCatalogRegistry registerMappedRegistry( return this; } - public > @Nullable R getRegistry(Class catalogClass) { + public > @Nullable R getRegistry(final Class catalogClass) { return (R) this.registriesByType.get(catalogClass); } - public > @NonNull R requireRegistry(Class catalogClass) { + public > @NonNull R requireRegistry(final Class catalogClass) { final R registry = this.getRegistry(catalogClass); if (registry == null) { throw new IllegalArgumentException("No registry is registered for " + catalogClass); @@ -430,7 +430,7 @@ private SpongeCatalogRegistry registerMappedRegistry( return registry; } - public C registerCatalog(C catalogType) { + public C registerCatalog(final C catalogType) { Preconditions.checkNotNull(catalogType); final Registry registry = (Registry) this.registriesByType.get(catalogType.getClass()); @@ -458,12 +458,6 @@ public void registerDefaultRegistries() { // TODO 1.14 - We'll take on a case by case basis if any mods are extending/replacing Enum values and therefore breaks this. Otherwise it will // TODO 1.14 - get to the point of insanity if literally every enum in the game becomes hardcoded lines that we have to map out... - // TODO 1.14 - Text stuff needs to be registered as soon as possible in the engine, needed by BossBarOverlay (as an example) -// this -// .generateMappedRegistry(TextColor.class, ResourceKey.minecraft("text_color"), TextColorStreamGenerator.stream(), true) -// .generateMappedRegistry(TextStyle.Type.class, ResourceKey.minecraft("text_style"), TextStyleTypeStreamGenerator.stream(), true) -// .generateRegistry(TextSerializer.class, ResourceKey.minecraft("text_serializer"), TextSerializerStreamGenerator.stream(), true) -// ; this .generateRegistry(AccountDeletionResultType.class, ResourceKey.sponge("account_deletion_result_type"), AccountDeletionResultTypeStreamGenerator.stream(), true, false) .registerRegistry(Advancement.class, ResourceKey.minecraft("advancement"), false) @@ -478,7 +472,6 @@ public void registerDefaultRegistries() { .generateRegistry(BodyPart.class, ResourceKey.minecraft("body_part"), BodyPartStreamGenerator.stream(), true, false) .generateRegistry(ClientCompletionType.class, ResourceKey.sponge("client_completion"), ClientCompletionTypeStreamGenerator.stream(), true, false) // .generateRegistry(ChatType.class, ResourceKey.minecraft("chat_type"), Arrays.stream(net.minecraft.util.text.ChatType.values()), true) - .generateRegistry(ChatVisibility.class, ResourceKey.minecraft("chat_visibility"), Arrays.stream(net.minecraft.entity.player.ChatVisibility.values()), true, false) .generateRegistry(ChestAttachmentType.class, ResourceKey.minecraft("chest_attachment_type"), Arrays.stream(ChestType.values()), true, false) .generateRegistry(CollisionRule.class, ResourceKey.minecraft("collision_rule"), Arrays.stream(Team.CollisionRule.values()), true, false) .generateRegistry(ComparatorMode.class, ResourceKey.minecraft("comparator_mode"), Arrays.stream(net.minecraft.state.properties.ComparatorMode.values()), true, false) diff --git a/src/main/java/org/spongepowered/common/registry/SpongeFactoryRegistry.java b/src/main/java/org/spongepowered/common/registry/SpongeFactoryRegistry.java index 6f95677cedc..8553e70c6fd 100644 --- a/src/main/java/org/spongepowered/common/registry/SpongeFactoryRegistry.java +++ b/src/main/java/org/spongepowered/common/registry/SpongeFactoryRegistry.java @@ -30,6 +30,8 @@ import com.google.inject.Singleton; import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import org.spongepowered.api.advancement.criteria.AdvancementCriterion; +import org.spongepowered.api.adventure.Audiences; +import org.spongepowered.api.adventure.SpongeComponents; import org.spongepowered.api.command.parameter.Parameter; import org.spongepowered.api.command.parameter.managed.standard.VariableValueParameters; import org.spongepowered.api.command.registrar.tree.CommandTreeBuilder; @@ -38,8 +40,9 @@ import org.spongepowered.api.registry.FactoryRegistry; import org.spongepowered.api.registry.UnknownTypeException; import org.spongepowered.api.resourcepack.ResourcePack; -import org.spongepowered.api.text.serializer.TextSerializers; import org.spongepowered.api.util.Transform; +import org.spongepowered.common.adventure.AudienceFactory; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.command.parameter.SpongeParameterValueFactory; import org.spongepowered.common.command.parameter.managed.factory.SpongeVariableValueParameterBuilderFactory; import org.spongepowered.common.command.registrar.tree.SpongeRootCommandTreeBuilderFactory; @@ -47,7 +50,6 @@ import org.spongepowered.common.registry.type.advancement.SpongeAdvancementCriterionFactory; import org.spongepowered.common.relocate.co.aikar.timings.SpongeTimingsFactory; import org.spongepowered.common.resourcepack.SpongeResourcePackFactory; -import org.spongepowered.common.text.serializer.SpongeTextSerializerFactory; import org.spongepowered.api.command.CommandCause; import org.spongepowered.common.command.manager.SpongeCommandCauseFactory; import org.spongepowered.common.util.SpongeTransformFactory; @@ -89,9 +91,12 @@ public SpongeFactoryRegistry registerFactory(Class factoryClass, T factor } public void registerDefaultFactories() { + this + .registerFactory(Audiences.Factory.class, new AudienceFactory()) + .registerFactory(SpongeComponents.Factory.class, new SpongeAdventure.Factory()); + this .registerFactory(TimingsFactory.class, SpongeTimingsFactory.INSTANCE) - .registerFactory(TextSerializers.Factory.class, SpongeTextSerializerFactory.INSTANCE) .registerFactory(AdvancementCriterion.Factory.class, SpongeAdvancementCriterionFactory.INSTANCE) .registerFactory(ResourcePack.Factory.class, SpongeResourcePackFactory.INSTANCE) .registerFactory(CommandCause.Factory.class, SpongeCommandCauseFactory.INSTANCE) diff --git a/src/main/java/org/spongepowered/common/registry/SpongeGameRegistry.java b/src/main/java/org/spongepowered/common/registry/SpongeGameRegistry.java index c36b062f055..8e61855d158 100644 --- a/src/main/java/org/spongepowered/common/registry/SpongeGameRegistry.java +++ b/src/main/java/org/spongepowered/common/registry/SpongeGameRegistry.java @@ -26,10 +26,12 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +import org.spongepowered.api.adventure.AdventureRegistry; import org.spongepowered.api.item.merchant.VillagerRegistry; import org.spongepowered.api.item.recipe.RecipeRegistry; import org.spongepowered.api.registry.FactoryRegistry; import org.spongepowered.api.registry.GameRegistry; +import org.spongepowered.common.adventure.AdventureRegistryImpl; @Singleton public final class SpongeGameRegistry implements GameRegistry { @@ -51,6 +53,11 @@ public SpongeCatalogRegistry getCatalogRegistry() { return this.catalogRegistry; } + @Override + public AdventureRegistry getAdventureRegistry() { + return AdventureRegistryImpl.INSTANCE; + } + @Override public SpongeBuilderRegistry getBuilderRegistry() { return this.builderRegistry; diff --git a/src/main/java/org/spongepowered/common/registry/builtin/sponge/CatalogedValueParameterStreamGenerator.java b/src/main/java/org/spongepowered/common/registry/builtin/sponge/CatalogedValueParameterStreamGenerator.java index 4aeef6de979..7aa781cce53 100644 --- a/src/main/java/org/spongepowered/common/registry/builtin/sponge/CatalogedValueParameterStreamGenerator.java +++ b/src/main/java/org/spongepowered/common/registry/builtin/sponge/CatalogedValueParameterStreamGenerator.java @@ -24,17 +24,17 @@ */ package org.spongepowered.common.registry.builtin.sponge; -import com.mojang.brigadier.Message; import com.mojang.brigadier.arguments.*; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.minecraft.command.arguments.*; import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.StringTextComponent; import org.spongepowered.api.command.parameter.managed.standard.CatalogedValueParameter; import org.spongepowered.api.entity.Entity; import org.spongepowered.api.entity.living.player.Player; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.TextSerializers; import org.spongepowered.api.world.dimension.Dimension; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.command.brigadier.argument.StandardCatalogedArgumentParser; import org.spongepowered.common.command.parameter.managed.standard.SpongeBigDecimalValueParameter; import org.spongepowered.common.command.parameter.managed.standard.SpongeBigIntegerValueParameter; @@ -100,22 +100,22 @@ public static Stream> stream() { StandardCatalogedArgumentParser.createConverter( "text_formatting_code", StringArgumentType.string(), - (reader, cause, result) -> TextSerializers.FORMATTING_CODE.get().deserialize(result)), + (reader, cause, result) -> SpongeAdventure.legacy(LegacyComponentSerializer.AMPERSAND_CHAR, result)), StandardCatalogedArgumentParser.createConverter( "text_formatting_code_all", StringArgumentType.greedyString(), - (reader, cause, result) -> TextSerializers.FORMATTING_CODE.get().deserialize(result)), - StandardCatalogedArgumentParser.createCast("text_json", ComponentArgument.component(), Text.class), + (reader, cause, result) -> SpongeAdventure.legacy(LegacyComponentSerializer.AMPERSAND_CHAR, result)), + StandardCatalogedArgumentParser.createConverter("text_json", ComponentArgument.component(), (reader, cause, result) -> SpongeAdventure.asAdventure(result)), StandardCatalogedArgumentParser.createConverter( "text_json_all", StringArgumentType.greedyString(), - (reader, cause, result) -> TextSerializers.JSON.get().deserialize(result)), + (reader, cause, result) -> SpongeAdventure.json(result)), StandardCatalogedArgumentParser.createConverter("url", StringArgumentType.string(), (reader, cause, input) -> { try { return new URL(input); } catch (final MalformedURLException ex) { - throw new SimpleCommandExceptionType((Message) Text.of("Could not parse " + input + " as a URL")) + throw new SimpleCommandExceptionType(new StringTextComponent("Could not parse " + input + " as a URL")) .createWithContext(reader); } }), @@ -125,7 +125,7 @@ public static Stream> stream() { try { return UUID.fromString(input); } catch (final IllegalArgumentException ex) { - throw new SimpleCommandExceptionType((Message) Text.of(ex.getMessage())) + throw new SimpleCommandExceptionType(new StringTextComponent(ex.getMessage())) .createWithContext(reader); } }), diff --git a/src/main/java/org/spongepowered/common/registry/builtin/sponge/EventContextKeyStreamGenerator.java b/src/main/java/org/spongepowered/common/registry/builtin/sponge/EventContextKeyStreamGenerator.java index 99339467d49..0d6eece2a13 100644 --- a/src/main/java/org/spongepowered/common/registry/builtin/sponge/EventContextKeyStreamGenerator.java +++ b/src/main/java/org/spongepowered/common/registry/builtin/sponge/EventContextKeyStreamGenerator.java @@ -36,6 +36,7 @@ public final class EventContextKeyStreamGenerator { public static Stream> stream() { // @formatter:off return Stream.of( + new SpongeEventContextKey<>(ResourceKey.sponge("audience"), TypeTokens.AUDIENCE), new SpongeEventContextKey<>(ResourceKey.sponge("block_event_process"), TypeTokens.LOCATABLE_BLOCK_TOKEN), new SpongeEventContextKey<>(ResourceKey.sponge("block_event_queue"), TypeTokens.LOCATABLE_BLOCK_TOKEN), new SpongeEventContextKey<>(ResourceKey.sponge("block_hit"), TypeTokens.BLOCK_SNAPSHOT_TOKEN), @@ -58,7 +59,6 @@ public static Stream> stream() { new SpongeEventContextKey<>(ResourceKey.sponge("liquid_flow"), TypeTokens.SERVER_WORLD_TOKEN), new SpongeEventContextKey<>(ResourceKey.sponge("liquid_mix"), TypeTokens.SERVER_WORLD_TOKEN), new SpongeEventContextKey<>(ResourceKey.sponge("location"), TypeTokens.SERVER_LOCATION_TOKEN), - new SpongeEventContextKey<>(ResourceKey.sponge("message_channel"), TypeTokens.MESSAGE_CHANNEL_TOKEN), new SpongeEventContextKey<>(ResourceKey.sponge("modify_event"), TypeTokens.CHANGE_BLOCK_EVENT_MODIFY_TOKEN), new SpongeEventContextKey<>(ResourceKey.sponge("neighbor_notify_source"), TypeTokens.BLOCK_SNAPSHOT_TOKEN), new SpongeEventContextKey<>(ResourceKey.sponge("notifier"), TypeTokens.USER_TOKEN), diff --git a/src/main/java/org/spongepowered/common/registry/builtin/sponge/KeyStreamGenerator.java b/src/main/java/org/spongepowered/common/registry/builtin/sponge/KeyStreamGenerator.java index 89d12f13847..7ea4ac534fe 100644 --- a/src/main/java/org/spongepowered/common/registry/builtin/sponge/KeyStreamGenerator.java +++ b/src/main/java/org/spongepowered/common/registry/builtin/sponge/KeyStreamGenerator.java @@ -57,7 +57,7 @@ public static Stream stream() { KeyStreamGenerator.key(ResourceKey.sponge("attachment_surface"), TypeTokens.ATTACHMENT_SURFACE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("attack_damage"), TypeTokens.DOUBLE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("attack_time"), TypeTokens.INTEGER_VALUE_TOKEN), - KeyStreamGenerator.key(ResourceKey.sponge("author"), TypeTokens.TEXT_VALUE_TOKEN), + KeyStreamGenerator.key(ResourceKey.sponge("author"), TypeTokens.COMPONENT_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("axis"), TypeTokens.AXIS_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("baby_ticks"), TypeTokens.INTEGER_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("banner_pattern_layers"), TypeTokens.LIST_BANNER_PATTERN_LAYER_VALUE_TOKEN), @@ -70,7 +70,7 @@ public static Stream stream() { KeyStreamGenerator.key(ResourceKey.sponge("block_state"), TypeTokens.BLOCK_STATE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("block_temperature"), TypeTokens.DOUBLE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("body_rotations"), TypeTokens.MAP_BODY_VECTOR3D_VALUE_TOKEN), - KeyStreamGenerator.key(ResourceKey.sponge("boss_bar"), TypeTokens.SERVER_BOSS_BAR_VALUE_TOKEN), + KeyStreamGenerator.key(ResourceKey.sponge("boss_bar"), TypeTokens.BOSS_BAR_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("breakable_block_types"), TypeTokens.SET_BLOCK_TYPE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("breeder"), TypeTokens.UUID_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("breeding_cooldown"), TypeTokens.INTEGER_VALUE_TOKEN), @@ -104,7 +104,7 @@ public static Stream stream() { KeyStreamGenerator.key(ResourceKey.sponge("despawn_delay"), TypeTokens.INTEGER_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("detonator"), TypeTokens.LIVING_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("direction"), TypeTokens.DIRECTION_VALUE_TOKEN), - KeyStreamGenerator.key(ResourceKey.sponge("display_name"), TypeTokens.TEXT_VALUE_TOKEN), + KeyStreamGenerator.key(ResourceKey.sponge("display_name"), TypeTokens.COMPONENT_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("dominant_hand"), TypeTokens.HAND_PREFERENCE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("door_hinge"), TypeTokens.DOOR_HINGE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("do_exact_teleport"), TypeTokens.BOOLEAN_VALUE_TOKEN), @@ -272,7 +272,7 @@ public static Stream stream() { KeyStreamGenerator.key(ResourceKey.sponge("knockback_strength"), TypeTokens.DOUBLE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("known_gene"), TypeTokens.PANDA_GENE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("last_attacker"), TypeTokens.ENTITY_VALUE_TOKEN), - KeyStreamGenerator.key(ResourceKey.sponge("last_command_output"), TypeTokens.TEXT_VALUE_TOKEN), + KeyStreamGenerator.key(ResourceKey.sponge("last_command_output"), TypeTokens.COMPONENT_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("last_damage_received"), TypeTokens.DOUBLE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("last_date_joined"), TypeTokens.INSTANT_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("last_date_played"), TypeTokens.INSTANT_VALUE_TOKEN), @@ -284,7 +284,7 @@ public static Stream stream() { KeyStreamGenerator.key(ResourceKey.sponge("light_emission"), TypeTokens.INTEGER_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("llama_type"), TypeTokens.LLAMA_TYPE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("lock_token"), TypeTokens.STRING_VALUE_TOKEN), - KeyStreamGenerator.key(ResourceKey.sponge("lore"), TypeTokens.LIST_TEXT_VALUE_TOKEN), + KeyStreamGenerator.key(ResourceKey.sponge("lore"), TypeTokens.LIST_COMPONENT_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("matter_state"), TypeTokens.MATTER_STATE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("max_air"), TypeTokens.INTEGER_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("max_burn_time"), TypeTokens.INTEGER_VALUE_TOKEN), @@ -306,7 +306,7 @@ public static Stream stream() { KeyStreamGenerator.key(ResourceKey.sponge("notifier"), TypeTokens.UUID_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("occupied_deceleration"), TypeTokens.DOUBLE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("on_ground"), TypeTokens.BOOLEAN_VALUE_TOKEN), - KeyStreamGenerator.key(ResourceKey.sponge("pages"), TypeTokens.LIST_TEXT_VALUE_TOKEN), + KeyStreamGenerator.key(ResourceKey.sponge("pages"), TypeTokens.LIST_COMPONENT_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("parrot_type"), TypeTokens.PARROT_TYPE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("particle_effect"), TypeTokens.PARTICLE_EFFECT_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("passed_cook_time"), TypeTokens.INTEGER_VALUE_TOKEN), @@ -355,7 +355,7 @@ public static Stream stream() { KeyStreamGenerator.key(ResourceKey.sponge("second_trusted"), TypeTokens.UUID_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("shooter"), TypeTokens.PROJECTILE_SOURCE_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("show_bottom"), TypeTokens.BOOLEAN_VALUE_TOKEN), - KeyStreamGenerator.key(ResourceKey.sponge("sign_lines"), TypeTokens.LIST_TEXT_VALUE_TOKEN), + KeyStreamGenerator.key(ResourceKey.sponge("sign_lines"), TypeTokens.LIST_COMPONENT_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("size"), TypeTokens.INTEGER_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("skin_profile_property"), TypeTokens.PROFILE_PROPERTY_VALUE_TOKEN), KeyStreamGenerator.key(ResourceKey.sponge("skin_moisture"), TypeTokens.INTEGER_VALUE_TOKEN), diff --git a/src/main/java/org/spongepowered/common/registry/builtin/sponge/TextColorStreamGenerator.java b/src/main/java/org/spongepowered/common/registry/builtin/sponge/TextColorStreamGenerator.java deleted file mode 100644 index 161d91ec8e1..00000000000 --- a/src/main/java/org/spongepowered/common/registry/builtin/sponge/TextColorStreamGenerator.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.registry.builtin.sponge; - -import net.minecraft.util.text.TextFormatting; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.format.TextColor; -import org.spongepowered.api.util.Color; -import org.spongepowered.api.util.Tuple; -import org.spongepowered.common.accessor.util.text.TextFormattingAccessor; -import org.spongepowered.common.text.format.SpongeTextColor; - -import java.util.stream.Stream; - -@SuppressWarnings("ConstantConditions") -public final class TextColorStreamGenerator { - - private TextColorStreamGenerator() { - } - - public static Stream> stream() { - return Stream.of( - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("aqua"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.AQUA).accessor$getColor())), TextFormatting.AQUA), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("black"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.BLACK).accessor$getColor())), TextFormatting.BLACK), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("blue"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.BLUE).accessor$getColor())), TextFormatting.BLUE), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("dark_aqua"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.DARK_AQUA).accessor$getColor())), TextFormatting.DARK_AQUA), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("dark_blue"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.DARK_BLUE).accessor$getColor())), TextFormatting.DARK_BLUE), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("dark_gray"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.DARK_GRAY).accessor$getColor())), TextFormatting.DARK_GRAY), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("dark_green"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.DARK_GREEN).accessor$getColor())), TextFormatting.DARK_GREEN), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("dark_purple"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.DARK_PURPLE).accessor$getColor())), TextFormatting.DARK_PURPLE), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("dark_red"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.DARK_RED).accessor$getColor())), TextFormatting.DARK_RED), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("gold"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.GOLD).accessor$getColor())), TextFormatting.GOLD), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("gray"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.GRAY).accessor$getColor())), TextFormatting.GRAY), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("green"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.GREEN).accessor$getColor())), TextFormatting.GREEN), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("light_purple"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.LIGHT_PURPLE).accessor$getColor())), TextFormatting.LIGHT_PURPLE), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("red"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.RED).accessor$getColor())), TextFormatting.RED), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("yellow"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.YELLOW).accessor$getColor())), TextFormatting.YELLOW), - Tuple.of(new SpongeTextColor(ResourceKey.minecraft("white"), Color.ofRgb(((TextFormattingAccessor) (Object) TextFormatting.WHITE).accessor$getColor())), TextFormatting.WHITE) - ); - } -} diff --git a/src/main/java/org/spongepowered/common/registry/builtin/sponge/TextSerializerStreamGenerator.java b/src/main/java/org/spongepowered/common/registry/builtin/sponge/TextSerializerStreamGenerator.java deleted file mode 100644 index 2e4866879f6..00000000000 --- a/src/main/java/org/spongepowered/common/registry/builtin/sponge/TextSerializerStreamGenerator.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.registry.builtin.sponge; - -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.serializer.TextSerializer; -import org.spongepowered.common.text.SpongeTexts; -import org.spongepowered.common.text.serializer.JsonTextSerializer; -import org.spongepowered.common.text.serializer.PlainTextSerializer; -import org.spongepowered.common.text.serializer.SpongeFormattingCodeTextSerializer; - -import java.util.stream.Stream; - -public final class TextSerializerStreamGenerator { - - private TextSerializerStreamGenerator() { - } - - public static Stream stream() { - return Stream.of( - new PlainTextSerializer(), - new JsonTextSerializer(), - new SpongeFormattingCodeTextSerializer(ResourceKey.sponge("formatting_code"), '&'), - new SpongeFormattingCodeTextSerializer(ResourceKey.minecraft("legacy_formatting_code"), SpongeTexts.COLOR_CHAR)); - } -} diff --git a/src/main/java/org/spongepowered/common/registry/builtin/sponge/TextStyleTypeStreamGenerator.java b/src/main/java/org/spongepowered/common/registry/builtin/sponge/TextStyleTypeStreamGenerator.java deleted file mode 100644 index ae0d51f2a88..00000000000 --- a/src/main/java/org/spongepowered/common/registry/builtin/sponge/TextStyleTypeStreamGenerator.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.registry.builtin.sponge; - -import net.minecraft.util.text.TextFormatting; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.format.TextStyle; -import org.spongepowered.api.util.Tuple; -import org.spongepowered.common.text.format.SpongeTextStyleType; - -import java.util.stream.Stream; - -public final class TextStyleTypeStreamGenerator { - - private TextStyleTypeStreamGenerator() { - } - - public static Stream> stream() { - return Stream.of( - Tuple.of(new SpongeTextStyleType(ResourceKey.minecraft("bold"), TextFormatting.BOLD), TextFormatting.BOLD), - Tuple.of(new SpongeTextStyleType(ResourceKey.minecraft("italic"), TextFormatting.ITALIC), TextFormatting.ITALIC), - Tuple.of(new SpongeTextStyleType(ResourceKey.minecraft("obfuscated"), TextFormatting.OBFUSCATED), TextFormatting.OBFUSCATED), - Tuple.of(new SpongeTextStyleType(ResourceKey.minecraft("reset"), TextFormatting.RESET), TextFormatting.RESET), - Tuple.of(new SpongeTextStyleType(ResourceKey.minecraft("strikethrough"), TextFormatting.STRIKETHROUGH), TextFormatting.STRIKETHROUGH), - Tuple.of(new SpongeTextStyleType(ResourceKey.minecraft("underline"), TextFormatting.UNDERLINE), TextFormatting.UNDERLINE) - ); - } -} diff --git a/src/main/java/org/spongepowered/common/registry/builtin/sponge/WoodTypeStreamGenerator.java b/src/main/java/org/spongepowered/common/registry/builtin/sponge/WoodTypeStreamGenerator.java index 367f39c4d87..8e159ccde0c 100644 --- a/src/main/java/org/spongepowered/common/registry/builtin/sponge/WoodTypeStreamGenerator.java +++ b/src/main/java/org/spongepowered/common/registry/builtin/sponge/WoodTypeStreamGenerator.java @@ -27,7 +27,6 @@ import org.spongepowered.api.ResourceKey; import org.spongepowered.api.data.type.WoodType; import org.spongepowered.common.data.type.SpongeWoodType; -import org.spongepowered.common.text.translation.SpongeTranslation; import java.util.stream.Stream; @@ -42,12 +41,12 @@ public static Stream stream() { // TODO 1.14 - May need to remove tags altogether return Stream.of( - new SpongeWoodType(ResourceKey.minecraft("acacia"), new SpongeTranslation("block.minecraft.acacia_wood"), null), - new SpongeWoodType(ResourceKey.minecraft("birch"), new SpongeTranslation("block.minecraft.birch_wood"), null), - new SpongeWoodType(ResourceKey.minecraft("dark_oak"), new SpongeTranslation("block.minecraft.dark_oak_wood"), null), - new SpongeWoodType(ResourceKey.minecraft("jungle"), new SpongeTranslation("block.minecraft.jungle_wood"), null), - new SpongeWoodType(ResourceKey.minecraft("oak"), new SpongeTranslation("block.minecraft.oak_wood"), null), - new SpongeWoodType(ResourceKey.minecraft("spruce"), new SpongeTranslation("block.minecraft.spruce_wood"), null) + new SpongeWoodType(ResourceKey.minecraft("acacia"), null), + new SpongeWoodType(ResourceKey.minecraft("birch"), null), + new SpongeWoodType(ResourceKey.minecraft("dark_oak"), null), + new SpongeWoodType(ResourceKey.minecraft("jungle"), null), + new SpongeWoodType(ResourceKey.minecraft("oak"), null), + new SpongeWoodType(ResourceKey.minecraft("spruce"), null) ); } } diff --git a/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/SpongeTimingsFactory.java b/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/SpongeTimingsFactory.java index 8da0cafcc21..37629be1ae1 100644 --- a/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/SpongeTimingsFactory.java +++ b/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/SpongeTimingsFactory.java @@ -29,7 +29,7 @@ import co.aikar.timings.Timing; import co.aikar.timings.TimingsFactory; import com.google.common.collect.EvictingQueue; -import org.spongepowered.api.text.channel.MessageChannel; +import net.kyori.adventure.audience.Audience; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.config.category.TimingsCategory; import org.spongepowered.plugin.PluginContainer; @@ -173,7 +173,7 @@ public void reset() { } @Override - public void generateReport(MessageChannel channel) { + public void generateReport(Audience channel) { TimingsExport.requestingReport.add(channel); } diff --git a/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/TimingsExport.java b/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/TimingsExport.java index e999f5badde..88801d2efe4 100644 --- a/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/TimingsExport.java +++ b/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/TimingsExport.java @@ -32,18 +32,18 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.format.NamedTextColor; import ninja.leaping.configurate.ConfigurationNode; import org.spongepowered.api.Platform; import org.spongepowered.api.Sponge; import org.spongepowered.api.block.entity.BlockEntityType; import org.spongepowered.api.entity.EntityType; import org.spongepowered.api.network.RconConnection; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.action.TextActions; -import org.spongepowered.api.text.channel.MessageChannel; -import org.spongepowered.api.text.channel.MessageReceiver; -import org.spongepowered.api.text.format.TextColors; import org.spongepowered.common.SpongeCommon; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.relocate.co.aikar.util.JSONUtil; import org.spongepowered.common.relocate.co.aikar.util.JSONUtil.JsonObjectBuilder; @@ -71,7 +71,7 @@ class TimingsExport extends Thread { private final JsonObject out; private final TimingHistory[] history; private static long lastReport = 0; - final static List requestingReport = Lists.newArrayList(); + final static List requestingReport = Lists.newArrayList(); TimingsExport(TimingsReportListener listeners, JsonObject out, TimingHistory[] history) { super("Timings paste thread"); @@ -97,17 +97,17 @@ static void reportTimings() { long now = System.currentTimeMillis(); final long lastReportDiff = now - lastReport; if (lastReportDiff < 60000) { - listeners.send(Text.of(TextColors.RED, "Please wait at least 1 minute in between Timings reports. (" + (int)((60000 - lastReportDiff) / 1000) + " seconds)")); + listeners.send(TextComponent.of("Please wait at least 1 minute in between Timings reports. (" + (int)((60000 - lastReportDiff) / 1000) + " seconds)", NamedTextColor.RED)); listeners.done(); return; } final long lastStartDiff = now - TimingsManager.timingStart; if (lastStartDiff < 180000) { - listeners.send(Text.of(TextColors.RED, "Please wait at least 3 minutes before generating a Timings report. Unlike Timings v1, v2 benefits from longer timings and is not as useful with short timings. (" + (int)((180000 - lastStartDiff) / 1000) + " seconds)")); + listeners.send(TextComponent.of("Please wait at least 3 minutes before generating a Timings report. Unlike Timings v1, v2 benefits from longer timings and is not as useful with short timings. (" + (int)((180000 - lastStartDiff) / 1000) + " seconds)", NamedTextColor.RED)); listeners.done(); return; } - listeners.send(Text.of(TextColors.GREEN, "Preparing Timings Report...")); + listeners.send(TextComponent.of("Preparing Timings Report...", NamedTextColor.GREEN)); lastReport = now; Platform platform = SpongeCommon.getGame().getPlatform(); @@ -120,7 +120,7 @@ static void reportTimings() { .add("sampletime", (System.currentTimeMillis() - TimingsManager.timingStart) / 1000); if (!TimingsManager.privacy) { builder.add("server", getServerName()) - .add("motd", Sponge.getServer().getMotd().toPlain()) + .add("motd", SpongeAdventure.plain(Sponge.getServer().getMotd())) .add("online-mode", Sponge.getServer().getOnlineMode()) .add("icon", SpongeCommon.getServer().getServerStatusResponse().getFavicon()); } @@ -259,16 +259,16 @@ private static JsonElement serializeConfigNode(ConfigurationNode node) { @Override public synchronized void start() { boolean containsRconSource = false; - for (MessageReceiver receiver : this.listeners.getChannel().getMembers()) { + for (Audience receiver : this.listeners.getChannel().audiences()) { if (receiver instanceof RconConnection) { containsRconSource = true; break; } } if (containsRconSource) { - this.listeners.send(Text.of(TextColors.RED, "Warning: Timings report done over RCON will cause lag spikes.")); - this.listeners.send(Text.of(TextColors.RED, "You should use ", TextColors.YELLOW, - "/sponge timings report" + TextColors.RED, " in game or console.")); + this.listeners.send(TextComponent.of("Warning: Timings report done over RCON will cause lag spikes.", NamedTextColor.RED)); + this.listeners.send(TextComponent.of("You should use ", NamedTextColor.RED).append(TextComponent.of("/sponge timings report", + NamedTextColor.YELLOW)).append(TextComponent.of(" in game or console.", NamedTextColor.RED))); this.run(); } else { super.start(); @@ -310,9 +310,8 @@ public void run() { response = this.getResponse(con); if (con.getResponseCode() != 302) { - this.listeners.send(Text.of( - TextColors.RED, "Upload Error: " + con.getResponseCode() + ": " + con.getResponseMessage())); - this.listeners.send(Text.of(TextColors.RED, "Check your logs for more information")); + this.listeners.send(TextComponent.of("Upload Error: " + con.getResponseCode() + ": " + con.getResponseMessage(), NamedTextColor.RED)); + this.listeners.send(TextComponent.of("Check your logs for more information", NamedTextColor.RED)); if (response != null) { SpongeCommon.getLogger().fatal(response); } @@ -320,13 +319,13 @@ public void run() { } timingsURL = con.getHeaderField("Location"); - this.listeners.send(Text.of(TextColors.GREEN, "View Timings Report: ", TextActions.openUrl(new URL(timingsURL)), timingsURL)); + this.listeners.send(TextComponent.builder("View Timings Report: ").color(NamedTextColor.GREEN).append(TextComponent.of(timingsURL).clickEvent(ClickEvent.openUrl(timingsURL))).build()); if (response != null && !response.isEmpty()) { SpongeCommon.getLogger().info("Timing Response: " + response); } } catch (IOException ex) { - this.listeners.send(Text.of(TextColors.RED, "Error uploading timings, check your logs for more information")); + this.listeners.send(TextComponent.of("Error uploading timings, check your logs for more information", NamedTextColor.RED)); if (response != null) { SpongeCommon.getLogger().fatal(response); } @@ -350,7 +349,7 @@ private String getResponse(HttpURLConnection con) throws IOException { return bos.toString(); } catch (IOException ex) { - this.listeners.send(Text.of(TextColors.RED, "Error uploading timings, check your logs for more information")); + this.listeners.send(TextComponent.of("Error uploading timings, check your logs for more information", NamedTextColor.RED)); SpongeCommon.getLogger().warn(con.getResponseMessage(), ex); return null; } finally { diff --git a/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/TimingsReportListener.java b/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/TimingsReportListener.java index 5ae7d4e89f6..0831a2d3d73 100644 --- a/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/TimingsReportListener.java +++ b/src/main/java/org/spongepowered/common/relocate/co/aikar/timings/TimingsReportListener.java @@ -25,34 +25,35 @@ package org.spongepowered.common.relocate.co.aikar.timings; import com.google.common.collect.Lists; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.audience.ForwardingAudience; +import net.kyori.adventure.text.Component; import org.apache.commons.lang3.Validate; import org.spongepowered.api.Server; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.channel.MessageChannel; -import org.spongepowered.api.text.channel.MessageReceiver; +import org.spongepowered.api.adventure.Audiences; import java.util.List; public final class TimingsReportListener { - private final List channels; + private final List channels; private final Runnable onDone; private String timingsURL; - private MessageChannel combinedChannel; + private ForwardingAudience audience; - public TimingsReportListener(MessageReceiver sender, Runnable onDone) { - this(Lists.newArrayList(MessageChannel.to(sender)), onDone); + public TimingsReportListener(Audience sender, Runnable onDone) { + this(Lists.newArrayList(sender), onDone); } - public TimingsReportListener(List channels) { + public TimingsReportListener(List channels) { this(channels, null); } - public TimingsReportListener(List channels, Runnable onDone) { + public TimingsReportListener(List channels, Runnable onDone) { Validate.notNull(channels); Validate.notEmpty(channels); this.channels = Lists.newArrayList(channels); this.addConsoleIfNeeded(this.channels); this.onDone = onDone; - this.combinedChannel = MessageChannel.combined(this.channels); + this.audience = (ForwardingAudience) Audience.of(this.channels); } public String getTimingsURL() { @@ -70,27 +71,25 @@ public void done(String url) { } } - public void addConsoleIfNeeded(List channels) { + public void addConsoleIfNeeded(List channels) { boolean hasConsole = false; - for (MessageChannel channel: channels) { - for (MessageReceiver receiver: channel.getMembers()) { - if (receiver instanceof Server) { - hasConsole = true; - break; - } + for (Audience channel: channels) { + if (channel instanceof Server) { + hasConsole = true; + break; } } if (!hasConsole) { - channels.add(MessageChannel.toServer()); + channels.add(Audiences.server()); } } - public void send(Text text) { - this.combinedChannel.send(text); + public void send(Component text) { + this.audience.sendMessage(text); } - public MessageChannel getChannel() { - return this.combinedChannel; + public ForwardingAudience getChannel() { + return this.audience; } } diff --git a/src/main/java/org/spongepowered/common/scoreboard/SpongeDisplaySlot.java b/src/main/java/org/spongepowered/common/scoreboard/SpongeDisplaySlot.java index be60ec94976..3f95dd7f0e7 100644 --- a/src/main/java/org/spongepowered/common/scoreboard/SpongeDisplaySlot.java +++ b/src/main/java/org/spongepowered/common/scoreboard/SpongeDisplaySlot.java @@ -25,13 +25,13 @@ package org.spongepowered.common.scoreboard; import com.google.common.base.MoreObjects; +import net.kyori.adventure.text.format.NamedTextColor; import net.minecraft.util.text.TextFormatting; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.scoreboard.displayslot.DisplaySlot; -import org.spongepowered.api.text.format.TextColor; import org.spongepowered.common.SpongeCatalogType; -import org.spongepowered.common.text.format.SpongeTextColor; +import org.spongepowered.common.adventure.SpongeAdventure; import java.util.Optional; import java.util.function.Function; @@ -42,7 +42,7 @@ public final class SpongeDisplaySlot extends SpongeCatalogType implements Displa private final @Nullable TextFormatting formatting; private final @Nullable Function withColorFunction; - private @Nullable TextColor color; + private @Nullable NamedTextColor color; public SpongeDisplaySlot(ResourceKey key, int index) { this(key, index, null, null); @@ -57,19 +57,19 @@ public SpongeDisplaySlot(ResourceKey key, int index, } @Override - public DisplaySlot withTeamColor(@Nullable TextColor color) { + public DisplaySlot withTeamColor(@Nullable NamedTextColor color) { if (this.withColorFunction == null) { return this; } final DisplaySlot slot = this.withColorFunction.apply( - color == null ? TextFormatting.RESET : SpongeTextColor.of(color)); + color == null ? TextFormatting.RESET : SpongeAdventure.asVanilla(color)); return slot == null ? this : slot; } @Override - public Optional getTeamColor() { + public Optional getTeamColor() { if (this.color == null) { - this.color = SpongeTextColor.of(this.formatting); + this.color = SpongeAdventure.asAdventureNamed(this.formatting); } return Optional.ofNullable(this.color); } diff --git a/src/main/java/org/spongepowered/common/scoreboard/SpongeObjective.java b/src/main/java/org/spongepowered/common/scoreboard/SpongeObjective.java index 9d203530158..4b4e55fbb35 100644 --- a/src/main/java/org/spongepowered/common/scoreboard/SpongeObjective.java +++ b/src/main/java/org/spongepowered/common/scoreboard/SpongeObjective.java @@ -25,6 +25,8 @@ package org.spongepowered.common.scoreboard; import com.google.common.collect.Maps; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.minecraft.scoreboard.ScoreCriteria; import net.minecraft.scoreboard.ScoreObjective; import org.spongepowered.api.scoreboard.Score; @@ -33,11 +35,10 @@ import org.spongepowered.api.scoreboard.objective.Objective; import org.spongepowered.api.scoreboard.objective.displaymode.ObjectiveDisplayMode; import org.spongepowered.api.scoreboard.objective.displaymode.ObjectiveDisplayModes; -import org.spongepowered.api.text.Text; import org.spongepowered.common.accessor.scoreboard.ScoreAccessor; import org.spongepowered.common.accessor.scoreboard.ScoreObjectiveAccessor; import org.spongepowered.common.accessor.scoreboard.ScoreboardAccessor; -import org.spongepowered.common.text.SpongeTexts; +import org.spongepowered.common.adventure.SpongeAdventure; import java.util.Collection; import java.util.HashMap; @@ -51,14 +52,14 @@ public class SpongeObjective implements Objective { private Map objectives = new HashMap<>(); private String name; - private Text displayName; + private Component displayName; private Criterion criterion; private ObjectiveDisplayMode displayMode; - private Map scores = new HashMap<>(); + private Map scores = new HashMap<>(); public SpongeObjective(final String name, final Criterion criterion) { this.name = name; - this.displayName = SpongeTexts.fromLegacy(name); + this.displayName = SpongeAdventure.legacy(LegacyComponentSerializer.SECTION_CHAR, name); this.displayMode = ObjectiveDisplayModes.INTEGER.get(); this.criterion = criterion; } @@ -69,19 +70,19 @@ public String getName() { } @Override - public Text getDisplayName() { + public Component getDisplayName() { return this.displayName; } @Override - public void setDisplayName(final Text displayName) throws IllegalArgumentException { + public void setDisplayName(final Component displayName) throws IllegalArgumentException { this.displayName = displayName; this.updateDisplayName(); } private void updateDisplayName() { for (final ScoreObjective objective: this.objectives.values()) { - objective.setDisplayName(SpongeTexts.toComponent(this.displayName)); + objective.setDisplayName(SpongeAdventure.asVanilla(this.displayName)); } } @@ -110,12 +111,12 @@ private void updateDisplayMode() { } @Override - public Map getScores() { + public Map getScores() { return new HashMap<>(this.scores); } @Override - public boolean hasScore(final Text name) { + public boolean hasScore(final Component name) { return this.scores.containsKey(name); } @@ -123,7 +124,7 @@ public boolean hasScore(final Text name) { public void addScore(final Score score) throws IllegalArgumentException { if (this.scores.containsKey(score.getName())) { throw new IllegalArgumentException(String.format("A score with the name %s already exists!", - SpongeTexts.toLegacy(score.getName()))); + SpongeAdventure.legacySection(score.getName()))); } this.scores.put(score.getName(), score); @@ -155,12 +156,12 @@ private void addScoreToScoreboard(final net.minecraft.scoreboard.Scoreboard scor } @Override - public Optional getScore(final Text name) { + public Optional getScore(final Component name) { return Optional.ofNullable(this.scores.get(name)); } @Override - public Score getOrCreateScore(final Text name) { + public Score getOrCreateScore(final Component name) { if (this.scores.containsKey(name)) { return this.scores.get(name); } @@ -206,7 +207,7 @@ public boolean removeScore(final Score spongeScore) { } @Override - public boolean removeScore(final Text name) { + public boolean removeScore(final Component name) { final Optional score = this.getScore(name); return score.filter(this::removeScore).isPresent(); } @@ -217,7 +218,7 @@ public ScoreObjective getObjectiveFor(final net.minecraft.scoreboard.Scoreboard return this.objectives.get(scoreboard); } final ScoreObjective objective = new ScoreObjective(scoreboard, this.name, (ScoreCriteria) this.criterion, - SpongeTexts.toComponent(this.displayName), (ScoreCriteria.RenderType) (Object) this.displayMode); + SpongeAdventure.asVanilla(this.displayName), (ScoreCriteria.RenderType) (Object) this.displayMode); this.objectives.put(scoreboard, objective); return objective; } diff --git a/src/main/java/org/spongepowered/common/scoreboard/SpongeScore.java b/src/main/java/org/spongepowered/common/scoreboard/SpongeScore.java index 14b1aaace0c..376a6c8ef8c 100644 --- a/src/main/java/org/spongepowered/common/scoreboard/SpongeScore.java +++ b/src/main/java/org/spongepowered/common/scoreboard/SpongeScore.java @@ -24,15 +24,15 @@ */ package org.spongepowered.common.scoreboard; +import net.kyori.adventure.text.Component; import net.minecraft.scoreboard.ScoreObjective; import org.spongepowered.api.scoreboard.Score; import org.spongepowered.api.scoreboard.objective.Objective; -import org.spongepowered.api.text.Text; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.scoreboard.ScoreBridge; import org.spongepowered.common.bridge.scoreboard.ScoreObjectiveBridge; import org.spongepowered.common.accessor.scoreboard.ScoreAccessor; import org.spongepowered.common.accessor.scoreboard.ScoreObjectiveAccessor; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.Constants; import java.util.HashMap; @@ -42,22 +42,22 @@ public class SpongeScore implements Score { - private Text name; + private Component name; public String legacyName; private int score; private Map scores = new HashMap<>(); - public SpongeScore(final Text name) { + public SpongeScore(final Component name) { this.name = name; - this.legacyName = SpongeTexts.toLegacy(name); + this.legacyName = SpongeAdventure.legacySection(name); if (this.legacyName.length() > Constants.Scoreboards.SCORE_NAME_LENGTH) { throw new IllegalArgumentException(String.format("The score name %s is too long! It must be at most %s characters.", this.legacyName, Constants.Scoreboards.SCORE_NAME_LENGTH)); } } @Override - public Text getName() { + public Component getName() { return this.name; } diff --git a/src/main/java/org/spongepowered/common/scoreboard/builder/SpongeObjectiveBuilder.java b/src/main/java/org/spongepowered/common/scoreboard/builder/SpongeObjectiveBuilder.java index f9cd81f7e49..16164bb3a6d 100644 --- a/src/main/java/org/spongepowered/common/scoreboard/builder/SpongeObjectiveBuilder.java +++ b/src/main/java/org/spongepowered/common/scoreboard/builder/SpongeObjectiveBuilder.java @@ -28,10 +28,10 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; +import net.kyori.adventure.text.Component; import org.spongepowered.api.scoreboard.criteria.Criterion; import org.spongepowered.api.scoreboard.objective.Objective; import org.spongepowered.api.scoreboard.objective.displaymode.ObjectiveDisplayMode; -import org.spongepowered.api.text.Text; import org.spongepowered.common.scoreboard.SpongeObjective; import javax.annotation.Nullable; @@ -41,7 +41,7 @@ public class SpongeObjectiveBuilder implements Objective.Builder { private static final int MAX_NAME_LENGTH = 16; @Nullable private String name; - @Nullable private Text displayName; + @Nullable private Component displayName; @Nullable private Criterion criterion; @Nullable private ObjectiveDisplayMode objectiveDisplayMode; @@ -55,7 +55,7 @@ public Objective.Builder name(String name) { } @Override - public Objective.Builder displayName(Text displayName) { + public Objective.Builder displayName(Component displayName) { checkNotNull(displayName, "DisplayName cannot be null"); this.displayName = displayName; return this; diff --git a/src/main/java/org/spongepowered/common/scoreboard/builder/SpongeTeamBuilder.java b/src/main/java/org/spongepowered/common/scoreboard/builder/SpongeTeamBuilder.java index 43fa741337a..5d7cb8316c4 100644 --- a/src/main/java/org/spongepowered/common/scoreboard/builder/SpongeTeamBuilder.java +++ b/src/main/java/org/spongepowered/common/scoreboard/builder/SpongeTeamBuilder.java @@ -27,35 +27,36 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.NamedTextColor; import net.minecraft.scoreboard.ScorePlayerTeam; import org.spongepowered.api.scoreboard.CollisionRule; import org.spongepowered.api.scoreboard.CollisionRules; import org.spongepowered.api.scoreboard.Team; import org.spongepowered.api.scoreboard.Visibilities; import org.spongepowered.api.scoreboard.Visibility; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.format.TextColor; -import org.spongepowered.api.text.format.TextColors; import java.util.HashSet; import java.util.Set; import java.util.function.Supplier; import javax.annotation.Nullable; +import org.spongepowered.common.adventure.SpongeAdventure; public class SpongeTeamBuilder implements Team.Builder { @Nullable private String name; - @Nullable private Text displayName; - private Supplier color; - private Text prefix; - private Text suffix; + @Nullable private Component displayName; + private NamedTextColor color; + private Component prefix; + private Component suffix; private boolean allowFriendlyFire; private boolean showFriendlyInvisibles; private Supplier nameTagVisibility; private Supplier deathMessageVisibility; private Supplier collisionRule; - private Set members; + private Set members; public SpongeTeamBuilder() { this.reset(); @@ -66,34 +67,34 @@ public Team.Builder name(final String name) { this.name = checkNotNull(name, "Name cannot be null!"); checkState(name.length() < 17, "Name is " + name.length() + " characters long! It must be at most 16."); if (this.displayName == null) { - this.displayName = Text.of(this.name); + this.displayName = TextComponent.of(this.name); } return this; } @Override - public Team.Builder color(final TextColor color) { + public Team.Builder color(final NamedTextColor color) { checkNotNull(color, "Color cannot be null!"); - this.color = () -> color; + this.color = color; return this; } @Override - public Team.Builder displayName(final Text displayName) throws IllegalArgumentException { - final int length = displayName.toPlain().length(); + public Team.Builder displayName(final Component displayName) throws IllegalArgumentException { + final int length = SpongeAdventure.legacySection(displayName).length(); checkState(length < 33, "DisplayName is " + length + " characters long! It must be at most 32."); this.displayName = checkNotNull(displayName, "DisplayName cannot be null!"); return this; } @Override - public Team.Builder prefix(final Text prefix) { + public Team.Builder prefix(final Component prefix) { this.prefix = checkNotNull(prefix, "Prefix cannot be null!"); return this; } @Override - public Team.Builder suffix(final Text suffix) { + public Team.Builder suffix(final Component suffix) { this.suffix = checkNotNull(suffix, "Suffix cannot be null!"); return this; } @@ -132,7 +133,7 @@ public Team.Builder collisionRule(final CollisionRule rule) { } @Override - public Team.Builder members(final Set members) { + public Team.Builder members(final Set members) { this.members = new HashSet<>(checkNotNull(members, "Members cannot be null!")); return this; } @@ -157,9 +158,9 @@ public Team.Builder from(final Team value) { public SpongeTeamBuilder reset() { this.name = null; this.displayName = null; - this.color = TextColors.RESET; - this.prefix = Text.of(); - this.suffix = Text.of(); + this.color = NamedTextColor.WHITE; + this.prefix = TextComponent.empty(); + this.suffix = TextComponent.empty(); this.allowFriendlyFire = false; this.showFriendlyInvisibles = false; this.nameTagVisibility = Visibilities.ALWAYS; @@ -176,7 +177,7 @@ public Team build() throws IllegalStateException { final Team team = (Team) new ScorePlayerTeam(null, this.name); team.setDisplayName(this.displayName); - team.setColor(this.color.get()); + team.setColor(this.color); team.setPrefix(this.prefix); team.setSuffix(this.suffix); team.setAllowFriendlyFire(this.allowFriendlyFire); @@ -184,7 +185,7 @@ public Team build() throws IllegalStateException { team.setNameTagVisibility(this.nameTagVisibility.get()); team.setDeathMessageVisibility(this.deathMessageVisibility.get()); team.setCollisionRule(this.collisionRule.get()); - for (final Text member: this.members) { + for (final Component member: this.members) { team.addMember(member); } diff --git a/src/main/java/org/spongepowered/common/text/serializer/PlainTextSerializer.java b/src/main/java/org/spongepowered/common/server/ServerConsoleSystemSubject.java similarity index 65% rename from src/main/java/org/spongepowered/common/text/serializer/PlainTextSerializer.java rename to src/main/java/org/spongepowered/common/server/ServerConsoleSystemSubject.java index 01a85bcb5c7..942cdc4a649 100644 --- a/src/main/java/org/spongepowered/common/text/serializer/PlainTextSerializer.java +++ b/src/main/java/org/spongepowered/common/server/ServerConsoleSystemSubject.java @@ -22,34 +22,23 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.text.serializer; +package org.spongepowered.common.server; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.SafeTextSerializer; - -public final class PlainTextSerializer implements SafeTextSerializer { - - private final ResourceKey key = ResourceKey.minecraft("plain"); - - @Override - public ResourceKey getKey() { - return this.key; - } +import net.kyori.adventure.audience.MessageType; +import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.spongepowered.common.SpongeCommon; +import org.spongepowered.common.SpongeSystemSubject; +import org.spongepowered.common.adventure.SpongeAdventure; +public final class ServerConsoleSystemSubject extends SpongeSystemSubject { @Override - public String serialize(Text text) { - return text.toPlain(); + public String getIdentifier() { + return "console"; } @Override - public String serializeSingle(Text text) { - return text.toPlainSingle(); + public void sendMessage(@NonNull final Component message, @NonNull final MessageType type) { + SpongeCommon.getServer().sendMessage(SpongeAdventure.asVanilla(message)); } - - @Override - public Text deserialize(String input) { - return Text.of(input); - } - } diff --git a/src/main/java/org/spongepowered/common/service/permission/SpongePermissionDescription.java b/src/main/java/org/spongepowered/common/service/permission/SpongePermissionDescription.java index d5da5d7abde..c02c59cf9f1 100644 --- a/src/main/java/org/spongepowered/common/service/permission/SpongePermissionDescription.java +++ b/src/main/java/org/spongepowered/common/service/permission/SpongePermissionDescription.java @@ -29,13 +29,13 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; +import net.kyori.adventure.text.Component; import org.spongepowered.api.service.permission.PermissionDescription; import org.spongepowered.api.service.permission.PermissionService; import org.spongepowered.api.service.permission.Subject; import org.spongepowered.api.service.permission.SubjectCollection; import org.spongepowered.api.service.permission.SubjectData; import org.spongepowered.api.service.permission.SubjectReference; -import org.spongepowered.api.text.Text; import org.spongepowered.api.util.Tristate; import org.spongepowered.plugin.PluginContainer; @@ -54,10 +54,10 @@ class SpongePermissionDescription implements PermissionDescription { private final SpongePermissionService permissionService; private final String id; - @Nullable private final Text description; + @Nullable private final Component description; private final PluginContainer owner; - SpongePermissionDescription(SpongePermissionService permissionService, String id, @Nullable Text description, PluginContainer owner) { + SpongePermissionDescription(SpongePermissionService permissionService, String id, @Nullable Component description, PluginContainer owner) { super(); this.permissionService = checkNotNull(permissionService, "permissionService"); this.id = checkNotNull(id, "id"); @@ -71,7 +71,7 @@ public String getId() { } @Override - public Optional getDescription() { + public Optional getDescription() { return Optional.ofNullable(this.description); } @@ -125,7 +125,7 @@ static class Builder implements PermissionDescription.Builder { private final SpongePermissionService permissionService; private final PluginContainer owner; private String id; - @Nullable private Text description; + @Nullable private Component description; private final Map roleAssignments = new LinkedHashMap<>(); Builder(SpongePermissionService permissionService, PluginContainer owner) { @@ -141,7 +141,7 @@ public org.spongepowered.common.service.permission.SpongePermissionDescription.B } @Override - public org.spongepowered.common.service.permission.SpongePermissionDescription.Builder description(@Nullable Text description) { + public org.spongepowered.common.service.permission.SpongePermissionDescription.Builder description(@Nullable Component description) { this.description = description; return this; } diff --git a/src/main/java/org/spongepowered/common/text/ResolvedChatStyle.java b/src/main/java/org/spongepowered/common/text/ResolvedChatStyle.java deleted file mode 100644 index 32a7739866a..00000000000 --- a/src/main/java/org/spongepowered/common/text/ResolvedChatStyle.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text; - -import net.minecraft.util.text.TextFormatting; - -import javax.annotation.Nullable; - -public final class ResolvedChatStyle { - - @Nullable - public final TextFormatting color; - public final boolean bold; - public final boolean italic; - public final boolean underlined; - public final boolean strikethrough; - public final boolean obfuscated; - - public ResolvedChatStyle(@Nullable TextFormatting color, - boolean bold, boolean italic, boolean underlined, boolean strikethrough, boolean obfuscated) { - this.color = color; - this.bold = bold; - this.italic = italic; - this.underlined = underlined; - this.strikethrough = strikethrough; - this.obfuscated = obfuscated; - } - -} diff --git a/src/main/java/org/spongepowered/common/text/SpongeTexts.java b/src/main/java/org/spongepowered/common/text/SpongeTexts.java deleted file mode 100644 index 418131e54bd..00000000000 --- a/src/main/java/org/spongepowered/common/text/SpongeTexts.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text; - -import com.google.common.collect.Lists; -import net.minecraft.nbt.ListNBT; -import net.minecraft.nbt.StringNBT; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TranslationTextComponent; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.TextParseException; -import org.spongepowered.api.text.serializer.TextSerializers; -import org.spongepowered.common.bridge.util.text.TextComponentBridge; -import org.spongepowered.common.bridge.api.text.TextBridge; - -import java.util.List; - -public final class SpongeTexts { - - public static final char COLOR_CHAR = '\u00A7'; - - private SpongeTexts() { - } - - public static Text[] splitChatMessage(ITextComponent component) { - if (!(component instanceof TranslationTextComponent)){ - return new Text[] { null, null }; - } - Text source = null; - Text body = null; - for (Object arg : ((TranslationTextComponent) (component)).getFormatArgs()) { - if (source == null) { - if (arg instanceof ITextComponent) { - source = SpongeTexts.toText((ITextComponent) arg); - } else { - source = Text.of(arg.toString()); - } - } else { - Text text; - if (arg instanceof ITextComponent) { - text = SpongeTexts.toText((ITextComponent) arg); - } else { - text = Text.of(arg.toString()); - } - if (body == null) { - body = text; - } else { - body = body.concat(text); - } - } - } - return new Text[] {source, body}; - } - - public static ITextComponent toComponent(Text text) { - return ((TextBridge) text).bridge$toComponent(); - } - - public static Text toText(ITextComponent component) { - return ((TextComponentBridge) component).bridge$toText(); - } - - public static String toPlain(ITextComponent component) { - return ((TextComponentBridge) component).bridge$toPlain(); - } - - @SuppressWarnings("deprecation") - public static Text fromLegacy(String legacy) { - return TextSerializers.LEGACY_FORMATTING_CODE.get().deserialize(legacy); - } - - @SuppressWarnings("deprecation") - public static String toLegacy(Text text) { - return TextSerializers.LEGACY_FORMATTING_CODE.get().serialize(text); - } - - public static String toLegacy(ITextComponent component) { - return ((TextComponentBridge) component).bridge$toLegacy(COLOR_CHAR); - } - - public static ITextComponent fixActionBarFormatting(ITextComponent component) { - if (!component.getSiblings().isEmpty()) { - List children = component.getSiblings(); - for (int i = 0; i < children.size(); i++) { - children.set(i, fixActionBarFormatting(children.get(i))); - } - } - - StringTextComponent result = new StringTextComponent(((TextComponentBridge) component).bridge$getLegacyFormatting()); - result.appendSibling(component); - return result; - } - - public static List asJson(List list) { - List json = Lists.newArrayList(); - for (Text line : list) { - json.add(TextSerializers.JSON.get().serialize(line)); - } - return json; - } - - public static ListNBT asJsonNBT(List list) { - final ListNBT legacy = new ListNBT(); - for (Text line : list) { - legacy.add(new StringNBT(TextSerializers.JSON.get().serialize(line))); - } - return legacy; - } - - public static List fromJson(List json) { - List list = Lists.newArrayList(); - for (String line : json) { - list.add(TextSerializers.JSON.get().deserialize(line)); - } - return list; - } - - public static List fromNbtJson(ListNBT legacy) throws TextParseException { - List list = Lists.newArrayList(); - for (int i = 0; i < legacy.size(); i++) { - list.add(TextSerializers.JSON.get().deserialize(legacy.getString(i))); - } - return list; - } - - public static List fromNbtLegacy(ListNBT legacy) { - List list = Lists.newArrayList(); - for (int i = 0; i < legacy.size(); i++) { - list.add(SpongeTexts.fromLegacy(legacy.getString(i))); - } - return list; - } - - public static ListNBT asLegacy(List list) { - final ListNBT legacy = new ListNBT(); - for (Text line : list) { - legacy.add(new StringNBT(toLegacy(line))); - } - return legacy; - } -} diff --git a/src/main/java/org/spongepowered/common/text/TextComponentIterator.java b/src/main/java/org/spongepowered/common/text/TextComponentIterator.java deleted file mode 100644 index 7ec018106f3..00000000000 --- a/src/main/java/org/spongepowered/common/text/TextComponentIterator.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text; - -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.collect.UnmodifiableIterator; -import net.minecraft.util.text.ITextComponent; -import org.spongepowered.common.bridge.util.text.TextComponentBridge; - -import java.util.Iterator; -import java.util.NoSuchElementException; - -import javax.annotation.Nullable; - -public class TextComponentIterator extends UnmodifiableIterator { - - private TextComponentBridge component; - private Iterator children; - @Nullable private Iterator currentChildIterator; - - public TextComponentIterator(final TextComponentBridge component) { - this.component = checkNotNull(component, "component"); - } - - public TextComponentIterator(final Iterator children) { - this.children = checkNotNull(children, "children"); - if (this.children.hasNext()) { - this.setCurrentChildIterator(); - } - } - - @Override - public boolean hasNext() { - return this.component != null || (this.currentChildIterator != null && this.currentChildIterator.hasNext()); - } - - // In order for this method to work properly, 'currentChildIterator' must be ready to return an element - // (i.e its 'hasNext()' method returns true) when this method returns. If this condition can no longer be met, - // we're done iterating. - @Override - public ITextComponent next() { - if (!this.hasNext()) { - throw new NoSuchElementException(); - } - - if (this.component != null) { - return this.init(); - } - - final ITextComponent result = this.currentChildIterator.next(); - - if (!this.currentChildIterator.hasNext() && this.children.hasNext()) { - this.setCurrentChildIterator(); - } - - return result; - } - - private ITextComponent init() { - this.children = this.component.bridge$childrenIterator(); - - final ITextComponent result = (ITextComponent) this.component; - this.component = null; - - // An iterator of an empty TextComponentTranslation doesn't have children. Thus, calling 'this.currentChildIterator.next()' - // at the end of this method will lead to a NoSuchElementException. To fix this, we - // initialize currentChildIterator so that the following call to 'hasNext()' will properly return 'false' if necessary - if (this.children.hasNext()) { - this.setCurrentChildIterator(); - } - - return result; - } - - private void setCurrentChildIterator() { - this.currentChildIterator = ((TextComponentBridge) this.children.next()).bridge$withChildren().iterator(); - } - -} diff --git a/src/main/java/org/spongepowered/common/text/action/SpongeHoverAction.java b/src/main/java/org/spongepowered/common/text/action/SpongeHoverAction.java deleted file mode 100644 index b88f30adf97..00000000000 --- a/src/main/java/org/spongepowered/common/text/action/SpongeHoverAction.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text.action; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.event.HoverEvent; -import org.spongepowered.api.item.inventory.ItemStackSnapshot; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.action.HoverAction; -import org.spongepowered.common.bridge.util.text.event.HoverEventBridge; -import org.spongepowered.common.item.util.ItemStackUtil; -import org.spongepowered.common.text.SpongeTexts; - -public class SpongeHoverAction { - - private SpongeHoverAction() { - } - - private static HoverEvent.Action getType(HoverAction action) { - if (action instanceof HoverAction.ShowEntity) { - return HoverEvent.Action.SHOW_ENTITY; - } else if (action instanceof HoverAction.ShowItem) { - return HoverEvent.Action.SHOW_ITEM; - } else if (action instanceof HoverAction.ShowText) { - return HoverEvent.Action.SHOW_TEXT; - } - - throw new UnsupportedOperationException(action.getClass().toString()); - } - - public static HoverEvent getHandle(HoverAction action) { - HoverEvent.Action type = getType(action); - ITextComponent component; - - switch (type) { - case SHOW_ENTITY: { - HoverAction.ShowEntity.Ref entity = ((HoverAction.ShowEntity) action).getResult(); - - CompoundNBT nbt = new CompoundNBT(); - nbt.putString("id", entity.getUniqueId().toString()); - - if (entity.getType().isPresent()) { - nbt.putString("type", entity.getType().get().getKey().toString()); - } - - nbt.putString("name", entity.getName()); - component = new StringTextComponent(nbt.toString()); - break; - } - case SHOW_ITEM: { - - ItemStack item = ItemStackUtil.fromSnapshotToNative((ItemStackSnapshot) action.getResult()); - CompoundNBT nbt = new CompoundNBT(); - item.write(nbt); - component = new StringTextComponent(nbt.toString()); - break; - } - case SHOW_TEXT: - component = SpongeTexts.toComponent((Text) action.getResult()); - break; - default: - throw new AssertionError(); - } - - HoverEvent event = new HoverEvent(type, component); - ((HoverEventBridge) event).bridge$setHandle(action); - return event; - } - -} diff --git a/src/main/java/org/spongepowered/common/text/format/SpongeTextColor.java b/src/main/java/org/spongepowered/common/text/format/SpongeTextColor.java deleted file mode 100644 index 24b22ee4c7f..00000000000 --- a/src/main/java/org/spongepowered/common/text/format/SpongeTextColor.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text.format; - -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.base.MoreObjects; -import net.minecraft.util.text.TextFormatting; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.format.TextColor; -import org.spongepowered.api.text.format.TextColors; -import org.spongepowered.api.util.Color; -import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.registry.MappedRegistry; - -public final class SpongeTextColor implements TextColor { - - public static SpongeTextColor of(TextFormatting formatting) { - final MappedRegistry registry = SpongeCommon.getRegistry().getCatalogRegistry().getRegistry(TextColor.class); - TextColor color = registry.getReverseMapping(formatting); - if (color == null) { - color = TextColors.NONE.get(); - } - - return (SpongeTextColor) color; - } - - public static TextFormatting of(TextColor color) { - final MappedRegistry registry = SpongeCommon.getRegistry().getCatalogRegistry().getRegistry(TextColor.class); - TextFormatting formatting = registry.getMapping(color); - if (formatting == null) { - formatting = TextFormatting.WHITE; - } - - return formatting; - } - - private final ResourceKey key; - private final Color color; - - public SpongeTextColor(ResourceKey key, Color color) { - this.key = key; - this.color = checkNotNull(color, "color"); - } - - @Override - public ResourceKey getKey() { - return this.key; - } - - @Override - public Color getColor() { - return this.color; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(SpongeTextColor.class) - .add("key", this.key) - .add("color", this.color) - .toString(); - } -} diff --git a/src/main/java/org/spongepowered/common/text/format/SpongeTextStyle.java b/src/main/java/org/spongepowered/common/text/format/SpongeTextStyle.java deleted file mode 100644 index bc7e2cf6f2c..00000000000 --- a/src/main/java/org/spongepowered/common/text/format/SpongeTextStyle.java +++ /dev/null @@ -1,292 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text.format; - -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.base.MoreObjects; -import net.minecraft.util.text.TextFormatting; -import org.checkerframework.checker.nullness.qual.Nullable; -import org.spongepowered.api.text.format.TextStyle; -import org.spongepowered.api.util.OptBool; - -import java.util.Objects; -import java.util.Optional; - -public class SpongeTextStyle implements TextStyle { - - @Nullable private Boolean bold, italic, underline, strikethrough, obfuscated; - - protected SpongeTextStyle(TextFormatting handle) { - this(handle == TextFormatting.BOLD ? true : null, handle == TextFormatting.ITALIC ? true : null, handle == TextFormatting.UNDERLINE ? true - : null, handle == TextFormatting.STRIKETHROUGH ? true : null, handle == TextFormatting.OBFUSCATED ? true : null); - } - - private SpongeTextStyle(@Nullable Boolean bold, @Nullable Boolean italic, @Nullable Boolean underline, - @Nullable Boolean strikethrough, @Nullable Boolean obfuscated) { - this.bold = bold; - this.italic = italic; - this.underline = underline; - this.strikethrough = strikethrough; - this.obfuscated = obfuscated; - } - - @Override - public boolean isComposite() { - return true; - } - - @Override - public boolean isEmpty() { - return this.bold == null && this.italic == null && this.underline == null && this.strikethrough == null && this.obfuscated == null; - } - - @Override - public TextStyle bold(@Nullable Boolean bold) { - return new SpongeTextStyle( - bold, - this.italic, - this.underline, - this.strikethrough, - this.obfuscated - ); - } - - @Override - public TextStyle italic(@Nullable Boolean italic) { - return new SpongeTextStyle( - this.bold, - italic, - this.underline, - this.strikethrough, - this.obfuscated - ); - } - - @Override - public TextStyle underline(@Nullable Boolean underline) { - return new SpongeTextStyle( - this.bold, - this.italic, - underline, - this.strikethrough, - this.obfuscated - ); - } - - @Override - public TextStyle strikethrough(@Nullable Boolean strikethrough) { - return new SpongeTextStyle( - this.bold, - this.italic, - this.underline, - strikethrough, - this.obfuscated - ); - } - - @Override - public TextStyle obfuscated(@Nullable Boolean obfuscated) { - return new SpongeTextStyle( - this.bold, - this.italic, - this.underline, - this.strikethrough, - obfuscated - ); - } - - @Override - public Optional hasBold() { - return OptBool.of(this.bold); - } - - @Override - public Optional hasItalic() { - return OptBool.of(this.italic); - } - - @Override - public Optional hasUnderline() { - return OptBool.of(this.underline); - } - - @Override - public Optional hasStrikethrough() { - return OptBool.of(this.strikethrough); - } - - @Override - public Optional hasObfuscated() { - return OptBool.of(this.obfuscated); - } - - @Override - public boolean contains(TextStyle... styles) { - for (TextStyle style : checkNotNull(styles, "styles")) { - checkNotNull(style, "style"); - - final SpongeTextStyle implStyle = (SpongeTextStyle) style; - - if (!containsOrOverrides(this.bold, implStyle.bold) - || !containsOrOverrides(this.italic, implStyle.italic) - || !containsOrOverrides(this.underline, implStyle.underline) - || !containsOrOverrides(this.strikethrough, implStyle.strikethrough) - || !containsOrOverrides(this.obfuscated, implStyle.obfuscated)) { - return false; - } - } - - return true; - } - - @Override - public TextStyle negate() { - return new SpongeTextStyle( - negate(this.bold), - negate(this.italic), - negate(this.underline), - negate(this.strikethrough), - negate(this.obfuscated) - ); - } - - @Override - public TextStyle and(TextStyle... styles) { - return composeStyle(styles, false); - } - - @Override - public TextStyle andNot(TextStyle... styles) { - return composeStyle(styles, true); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof SpongeTextStyle)) { - return false; - } - - final SpongeTextStyle that = (SpongeTextStyle) o; - - return (this.bold != null && this.bold.equals(that.bold)) - && (this.italic != null && this.italic.equals(that.italic)) - && (this.underline != null && this.underline.equals(that.underline)) - && (this.obfuscated != null && this.obfuscated.equals(that.obfuscated)) - && (this.strikethrough != null && this.strikethrough.equals(that.strikethrough)); - } - - @Override - public int hashCode() { - return Objects.hash(this.bold, this.italic, this.underline, this.obfuscated, this.strikethrough); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(SpongeTextStyle.class) - .omitNullValues() - .add("bold", this.bold) - .add("italic", this.italic) - .add("underline", this.underline) - .add("strikethrough", this.strikethrough) - .add("obfuscated", this.obfuscated) - .toString(); - } - - private boolean containsOrOverrides(Boolean leftProperty, Boolean rightProperty) { - return rightProperty == null || leftProperty == rightProperty; - } - - @Nullable - private Boolean negate(@Nullable Boolean property) { - if (property != null) { - return !property; - } - - return null; - } - - @Nullable - private Boolean composeStyle(@Nullable Boolean leftProperty, @Nullable Boolean rightProperty) { - if (leftProperty == null) { - return rightProperty; - } else if (rightProperty == null) { - return leftProperty; - } else if (leftProperty != rightProperty) { - return null; - } else { - return leftProperty; - } - } - - private TextStyle composeStyle(TextStyle[] styles, boolean negate) { - checkNotNull(styles, "styles"); - if (styles.length == 0) { - return this; - } else if (this.isEmpty() && styles.length == 1) { - TextStyle style = checkNotNull(styles[0], "style"); - return negate ? style.negate() : style; - } - - @Nullable Boolean boldAcc = this.bold; - @Nullable Boolean italicAcc = this.italic; - @Nullable Boolean underlineAcc = this.underline; - @Nullable Boolean strikethroughAcc = this.strikethrough; - @Nullable Boolean obfuscatedAcc = this.obfuscated; - - if (negate) { - for (TextStyle style : styles) { - checkNotNull(style, "style"); - final SpongeTextStyle implStyle = (SpongeTextStyle) style; - boldAcc = composeStyle(boldAcc, negate(implStyle.bold)); - italicAcc = composeStyle(italicAcc, negate(implStyle.italic)); - underlineAcc = composeStyle(underlineAcc, negate(implStyle.underline)); - strikethroughAcc = composeStyle(strikethroughAcc, negate(implStyle.strikethrough)); - obfuscatedAcc = composeStyle(obfuscatedAcc, negate(implStyle.obfuscated)); - } - } else { - for (TextStyle style : styles) { - checkNotNull(style, "style"); - final SpongeTextStyle implStyle = (SpongeTextStyle) style; - boldAcc = composeStyle(boldAcc, implStyle.bold); - italicAcc = composeStyle(italicAcc, implStyle.italic); - underlineAcc = composeStyle(underlineAcc, implStyle.underline); - strikethroughAcc = composeStyle(strikethroughAcc, implStyle.strikethrough); - obfuscatedAcc = composeStyle(obfuscatedAcc, implStyle.obfuscated); - } - } - - return new SpongeTextStyle( - boldAcc, - italicAcc, - underlineAcc, - strikethroughAcc, - obfuscatedAcc - ); - } -} diff --git a/src/main/java/org/spongepowered/common/text/format/SpongeTextStyleType.java b/src/main/java/org/spongepowered/common/text/format/SpongeTextStyleType.java deleted file mode 100644 index c1189c0dfc5..00000000000 --- a/src/main/java/org/spongepowered/common/text/format/SpongeTextStyleType.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text.format; - -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.base.MoreObjects; -import net.minecraft.util.text.TextFormatting; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.format.TextStyle; -import org.spongepowered.api.text.format.TextStyles; -import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.registry.MappedRegistry; - -public final class SpongeTextStyleType extends SpongeTextStyle implements TextStyle.Type { - - public static SpongeTextStyleType of(TextFormatting formatting) { - final MappedRegistry registry = SpongeCommon.getRegistry().getCatalogRegistry().getRegistry(TextStyle.Type.class); - TextStyle.Type style = registry.getReverseMapping(formatting); - if (style == null) { - style = TextStyles.RESET.get(); - } - - return (SpongeTextStyleType) style; - } - - private final ResourceKey key; - - public SpongeTextStyleType(ResourceKey key, TextFormatting handle) { - super(handle); - this.key = checkNotNull(key); - } - - @Override - public ResourceKey getKey() { - return this.key; - } - - @Override - public boolean isComposite() { - return false; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof SpongeTextStyleType)) { - return false; - } - - final SpongeTextStyleType that = (SpongeTextStyleType) o; - - return this.key.equals(that.key); - } - - @Override - public int hashCode() { - return this.key.hashCode(); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(SpongeTextStyle.class) - .add("key", this.key) - .toString(); - } -} diff --git a/src/main/java/org/spongepowered/common/text/serializer/JsonTextSerializer.java b/src/main/java/org/spongepowered/common/text/serializer/JsonTextSerializer.java deleted file mode 100644 index 39bbe5fc57c..00000000000 --- a/src/main/java/org/spongepowered/common/text/serializer/JsonTextSerializer.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text.serializer; - -import com.google.gson.JsonParseException; -import net.minecraft.util.text.ITextComponent; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.TextParseException; -import org.spongepowered.api.text.serializer.TextSerializer; -import org.spongepowered.common.bridge.api.text.TextBridge; -import org.spongepowered.common.bridge.util.text.TextComponentBridge; - -/** - * TextSerializer implementation for the json format. - */ -public final class JsonTextSerializer implements TextSerializer { - - private final ResourceKey key = ResourceKey.minecraft("plain"); - - @Override - public ResourceKey getKey() { - return this.key; - } - - @Override - public String serialize(Text text) { - return ((TextBridge) text).bridge$toJson(); - } - - @Override - public Text deserialize(String input) throws TextParseException { - try { - ITextComponent component = ITextComponent.Serializer.fromJson(input); - if (component == null) { - return Text.empty(); - } - - return ((TextComponentBridge) component).bridge$toText(); - } catch (JsonParseException e) { - throw new TextParseException("Failed to parse JSON", e); - } - } - -} diff --git a/src/main/java/org/spongepowered/common/text/serializer/LegacyTexts.java b/src/main/java/org/spongepowered/common/text/serializer/LegacyTexts.java index b30796da4e3..b408ba212c5 100644 --- a/src/main/java/org/spongepowered/common/text/serializer/LegacyTexts.java +++ b/src/main/java/org/spongepowered/common/text/serializer/LegacyTexts.java @@ -24,19 +24,13 @@ */ package org.spongepowered.common.text.serializer; -import com.google.common.collect.Lists; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.Style; import net.minecraft.util.text.TextFormatting; -import org.spongepowered.api.text.LiteralText; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.format.TextColors; -import org.spongepowered.api.text.format.TextStyles; import org.spongepowered.common.accessor.util.text.StringTextComponentAccessor; import org.spongepowered.common.accessor.util.text.StyleAccessor; import org.spongepowered.common.accessor.util.text.TextFormattingAccessor; -import org.spongepowered.common.text.format.SpongeTextColor; import javax.annotation.Nullable; import java.util.ArrayList; @@ -87,127 +81,6 @@ public static TextFormatting parseFormat(final char format) { return pos != -1 ? formatting[pos] : null; } - /** - * This method parses an input string with formatting codes into a - * {@link Text} object. - * - *

This implementation parses the input string in reverse direction - * to avoid recursion. It returns a {@link Text} which is equivalent - * to the input string when rendered on the client.

- * - *

Note: The implementation does not attempt to preserve redundant - * formatting codes (e.g. two consecutive color codes). Only relevant - * formatting codes are represented in the output.

- * - * @param input The input string - * @param code The formatting sign (e.g. {@code &}) - * @return The parsed text - */ - public static Text parse(final String input, final char code) { - int pos = input.length(); - if (pos < FORMATTING_CODE_LENGTH) { - // Not enough characters to form a formatting code => plain text - return Text.of(input); - } - - // Find the first (potential) formatting code - int next = input.lastIndexOf(code, pos - FORMATTING_CODE_LENGTH); - if (next == -1) { - // No potential formatting code found => plain text - return Text.of(input); - } - - LiteralText.Builder current = null; - boolean reset = false; - final List parts = Lists.newArrayList(); - - do { - // Parse the formatting code - final TextFormatting format = parseFormat(input.charAt(next + 1)); - if (format != null) { - final int from = next + FORMATTING_CODE_LENGTH; - if (from != pos) { - // The plain text between the current and last formatting code - final String content = input.substring(from, pos); - - if (current != null) { - if (reset) { - // Color codes reset the text style so we avoid inheritance - // by adding directly to the root text - parts.add(current.build()); - reset = false; - current = Text.builder(content); - } else { - // Inherit color/style - current = Text.builder(content).append(current.build()); - } - } else { - current = Text.builder(content); - } - } - - // current == null => style does not apply to any content - if (current != null) { - reset |= applyStyle(current, format); - } - - // Mark the current position - pos = next; - } - - // Search for next formatting code - next = input.lastIndexOf(code, next - 1); - } while (next != -1); - - if (current == null) { - // No formatted text found - if (pos == 0) { - // Text contains only (redundant) formatting codes => empty text - return Text.empty(); - } else { - // No valid formatting code found => plain text - return Text.of(input); - } - } - - // Return simple text if there is only one text style in the input string - if (pos == 0 && parts.isEmpty()) { - return current.build(); - } - - // Build the resulting text - parts.add(current.build()); - Collections.reverse(parts); - return Text.builder(pos > 0 ? input.substring(0, pos) : "").append(parts).build(); - } - - private static boolean applyStyle(final Text.Builder builder, final TextFormatting formatting) { - switch (formatting) { - case BOLD: - builder.style(TextStyles.BOLD); - break; - case ITALIC: - builder.style(TextStyles.ITALIC); - break; - case UNDERLINE: - builder.style(TextStyles.UNDERLINE); - break; - case STRIKETHROUGH: - builder.style(TextStyles.STRIKETHROUGH); - break; - case OBFUSCATED: - builder.style(TextStyles.OBFUSCATED); - break; - default: - if (builder.getColor() == TextColors.NONE) { - builder.color(SpongeTextColor.of(formatting)); - } - return true; - } - - return false; - } - @SuppressWarnings("ConstantConditions") public static StringTextComponent parseComponent(final StringTextComponent component, final char code) { String text = component.getText(); @@ -332,47 +205,4 @@ public static String replace(final String text, final char from, final char to) return new String(result); } - public static String strip(final String text, final char code) { - return strip(text, code, false, false); - } - - public static String stripAll(final String text, final char code) { - return strip(text, code, true, false); - } - - public static String stripChars(final String text, final char code) { - return strip(text, code, false, true); - } - - private static String strip(final String text, final char code, final boolean all, final boolean keepFormat) { - int next = text.indexOf(code); - final int last = text.length() - 1; - if (next == -1 || next == last) { - return text; - } - - final StringBuilder result = new StringBuilder(text.length()); - - int pos = 0; - do { - if (pos != next) { - result.append(text, pos, next); - } - - pos = next; - - if (isFormat(text.charAt(next + 1))) { - pos = next += keepFormat ? 1 : 2; // Skip formatting - } else if (all) { - pos = next += 1; // Skip code only - } else { - next++; - } - - next = text.indexOf(code, next); - } while (next != -1 && next < last); - - return result.append(text, pos, text.length()).toString(); - } - } diff --git a/src/main/java/org/spongepowered/common/text/serializer/SpongeFormattingCodeTextSerializer.java b/src/main/java/org/spongepowered/common/text/serializer/SpongeFormattingCodeTextSerializer.java deleted file mode 100644 index b8f7cb771bc..00000000000 --- a/src/main/java/org/spongepowered/common/text/serializer/SpongeFormattingCodeTextSerializer.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text.serializer; - -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.serializer.FormattingCodeTextSerializer; -import org.spongepowered.common.bridge.api.text.TextBridge; - -public final class SpongeFormattingCodeTextSerializer implements FormattingCodeTextSerializer { - - private final char formattingChar; - private final ResourceKey key; - - public SpongeFormattingCodeTextSerializer(char formattingChar) { - this(ResourceKey.sponge("formatting_code_" + formattingChar), formattingChar); - } - - public SpongeFormattingCodeTextSerializer(ResourceKey key, char formattingChar) { - this.key = key; - this.formattingChar = formattingChar; - } - - @Override - public ResourceKey getKey() { - return this.key; - } - - @Override - public char getCharacter() { - return this.formattingChar; - } - - @Override - public String serialize(Text text) { - return ((TextBridge) text).bridge$toLegacy(this.formattingChar); - } - - @Override - public String serializeSingle(Text text) { - return ((TextBridge) text).bridge$toLegacy(this.formattingChar); - } - - @Override - public Text deserialize(String input) { - return LegacyTexts.parse(input, this.formattingChar); - } - - @Override - public String stripCodes(String text) { - return LegacyTexts.strip(text, this.formattingChar); - } - - @Override - public String replaceCodes(String text, char to) { - return LegacyTexts.replace(text, this.formattingChar, to); - } - -} diff --git a/src/main/java/org/spongepowered/common/text/serializer/SpongeTextSerializerFactory.java b/src/main/java/org/spongepowered/common/text/serializer/SpongeTextSerializerFactory.java deleted file mode 100644 index 02cd2e553c4..00000000000 --- a/src/main/java/org/spongepowered/common/text/serializer/SpongeTextSerializerFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text.serializer; - -import org.spongepowered.api.text.serializer.FormattingCodeTextSerializer; -import org.spongepowered.api.text.serializer.TextSerializers; - -public final class SpongeTextSerializerFactory implements TextSerializers.Factory { - - public static final TextSerializers.Factory INSTANCE = new SpongeTextSerializerFactory(); - - private SpongeTextSerializerFactory() { - } - - @Override - public FormattingCodeTextSerializer createFormattingCodeSerializer(char formattingChar) { - return new SpongeFormattingCodeTextSerializer(formattingChar); - } -} diff --git a/src/main/java/org/spongepowered/common/text/translation/SpongeTranslation.java b/src/main/java/org/spongepowered/common/text/translation/SpongeTranslation.java deleted file mode 100644 index a4affe62db1..00000000000 --- a/src/main/java/org/spongepowered/common/text/translation/SpongeTranslation.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.text.translation; - -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.base.MoreObjects; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraft.util.text.translation.LanguageMap; -import org.spongepowered.api.text.translation.Translation; - -import java.util.Locale; - -public final class SpongeTranslation implements Translation { - - private final String id; - - public SpongeTranslation(String id) { - this.id = checkNotNull(id, "id"); - } - - public SpongeTranslation(TranslationTextComponent component) { - this(component.getKey()); - } - - @Override - public String getId() { - return this.id; - } - - @Override - public String get(Locale locale) { - return LanguageMap.getInstance().translateKey(this.id); - } - - @Override - public int hashCode() { - return this.id.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (this.getClass() != obj.getClass() || !(obj instanceof SpongeTranslation)) { - return false; - } - final SpongeTranslation other = (SpongeTranslation) obj; - return this.id.equals(other.id); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("id", this.id) - .toString(); - } -} diff --git a/src/main/java/org/spongepowered/common/util/BookUtil.java b/src/main/java/org/spongepowered/common/util/BookUtil.java index 4b846017964..59988b74c1c 100644 --- a/src/main/java/org/spongepowered/common/util/BookUtil.java +++ b/src/main/java/org/spongepowered/common/util/BookUtil.java @@ -24,6 +24,7 @@ */ package org.spongepowered.common.util; +import net.kyori.adventure.inventory.Book; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.play.ServerPlayNetHandler; @@ -34,7 +35,6 @@ import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.item.ItemTypes; import org.spongepowered.api.item.inventory.ItemStack; -import org.spongepowered.api.text.BookView; import org.spongepowered.common.item.util.ItemStackUtil; import java.util.Collection; @@ -43,14 +43,14 @@ public final class BookUtil { public static final int WINDOW_PLAYER_INVENTORY = 0; - public static void fakeBookView(BookView bookView, Collection players) { + public static void fakeBookView(Book book, Collection players) { // First we need to send a fake a Book ItemStack with the BookView's // contents to the player's hand ItemStack item = ItemStack.of(ItemTypes.WRITTEN_BOOK, 1); - item.offer(Keys.DISPLAY_NAME, bookView.getTitle()); - item.offer(Keys.AUTHOR, bookView.getAuthor()); - item.offer(Keys.PAGES, bookView.getPages()); + item.offer(Keys.DISPLAY_NAME, book.title()); + item.offer(Keys.AUTHOR, book.author()); + item.offer(Keys.PAGES, book.pages()); for (Player player : players) { ServerPlayerEntity mcPlayer = (ServerPlayerEntity) player; diff --git a/src/main/java/org/spongepowered/common/util/SpongeCommonTranslationHelper.java b/src/main/java/org/spongepowered/common/util/SpongeCommonTranslationHelper.java deleted file mode 100644 index bb45ae98516..00000000000 --- a/src/main/java/org/spongepowered/common/util/SpongeCommonTranslationHelper.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.util; - -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.translation.ResourceBundleTranslation; - -import java.util.Locale; -import java.util.ResourceBundle; -import java.util.function.Function; - -import javax.annotation.Nullable; - -public final class SpongeCommonTranslationHelper { - - private static final Function LOOKUP_FUNC = new Function() { - @Nullable - @Override - public ResourceBundle apply(Locale input) { - return ResourceBundle.getBundle("org.spongepowered.common.Translations", input); - } - }; - - /** - * Get the translated text for a given string. - * - * @param key The translation key - * @param args Translation parameters - * @return The translatable text - */ - public static Text t(String key, Object... args) { - return Text.of(new ResourceBundleTranslation(key, LOOKUP_FUNC), args); - } - - private SpongeCommonTranslationHelper() { - } -} diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/AdvancementMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/AdvancementMixin_API.java index df79bc942d2..9961c6a0d9c 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/AdvancementMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/AdvancementMixin_API.java @@ -25,12 +25,12 @@ package org.spongepowered.common.mixin.api.mcp.advancements; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.Component; import net.minecraft.advancements.Advancement; import net.minecraft.advancements.DisplayInfo; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.advancement.AdvancementTree; import org.spongepowered.api.advancement.criteria.AdvancementCriterion; -import org.spongepowered.api.text.Text; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -77,7 +77,7 @@ public Optional getDisplayInfo() } @Override - public List toToastText() { + public List toToastText() { return ((AdvancementBridge) this).bridge$getToastText(); } @@ -88,11 +88,11 @@ public ResourceKey getKey() { @Override public String getName() { - return ((AdvancementBridge) this).bridge$getTranslation().get(); + throw new UnsupportedOperationException(); } @Override - public Text toText() { + public Component asComponent() { return ((AdvancementBridge) this).bridge$getText(); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/DisplayInfoMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/DisplayInfoMixin_API.java index 40ea8dfff4c..18fafac18b1 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/DisplayInfoMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/DisplayInfoMixin_API.java @@ -24,21 +24,21 @@ */ package org.spongepowered.common.mixin.api.mcp.advancements; +import net.kyori.adventure.text.Component; import net.minecraft.advancements.DisplayInfo; import net.minecraft.advancements.FrameType; import net.minecraft.util.text.ITextComponent; import org.spongepowered.api.advancement.Advancement; import org.spongepowered.api.advancement.AdvancementType; import org.spongepowered.api.advancement.TreeLayoutElement; -import org.spongepowered.api.text.Text; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.advancements.DisplayInfoBridge; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.math.vector.Vector2d; @Mixin(DisplayInfo.class) @@ -77,13 +77,13 @@ public AdvancementType getType() { } @Override - public Text getDescription() { - return SpongeTexts.toText(this.description); + public Component getDescription() { + return SpongeAdventure.asAdventure(this.description); } @Override - public Text getTitle() { - return SpongeTexts.toText(this.title); + public Component getTitle() { + return SpongeAdventure.asAdventure(this.title); } @Override diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/FrameTypeMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/FrameTypeMixin_API.java index dafc6bb84b8..0ec2b0ab454 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/FrameTypeMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/advancements/FrameTypeMixin_API.java @@ -28,16 +28,11 @@ import net.minecraft.util.text.TextFormatting; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.advancement.AdvancementType; -import org.spongepowered.api.text.format.TextFormat; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.common.text.format.SpongeTextColor; -import org.spongepowered.common.text.format.SpongeTextStyleType; -import org.spongepowered.plugin.PluginContainer; import javax.annotation.Nullable; @@ -45,15 +40,15 @@ public abstract class FrameTypeMixin_API implements AdvancementType { @Nullable private ResourceKey api$key; - @Nullable private TextFormat api$textFormat; +// @Nullable private TextFormat api$textFormat; @Inject(method = "", at = @At("RETURN")) private void api$setFields(String enumName, int ordinal, String name, int icon, TextFormatting format, CallbackInfo ci) { this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), name.toLowerCase()); - this.api$textFormat = TextFormat.of( - SpongeTextColor.of(format), - SpongeTextStyleType.of(format) - ); +// this.api$textFormat = TextFormat.of( +// SpongeTextColor.of(format), +// SpongeTextStyleType.of(format) +// ); } @Override @@ -61,8 +56,8 @@ public ResourceKey getKey() { return this.api$key; } - @Override - public TextFormat getTextFormat() { - return this.api$textFormat; - } +// @Override +// public TextFormat getTextFormat() { +// return this.api$textFormat; +// } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/block/BlockMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/block/BlockMixin_API.java index dce0f91500a..549529105b9 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/block/BlockMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/block/BlockMixin_API.java @@ -24,6 +24,8 @@ */ package org.spongepowered.common.mixin.api.mcp.block; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TranslatableComponent; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.item.Item; @@ -34,12 +36,9 @@ import org.spongepowered.api.block.BlockState; import org.spongepowered.api.block.BlockType; import org.spongepowered.api.item.ItemType; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.bridge.ResourceKeyBridge; -import org.spongepowered.common.text.translation.SpongeTranslation; import java.util.Optional; @@ -53,7 +52,6 @@ public abstract class BlockMixin_API implements BlockType { @Shadow public abstract net.minecraft.block.BlockState shadow$getDefaultState(); private ResourceKey api$key; - private SpongeTranslation api$translation; @Override public final ResourceKey getKey() { @@ -93,11 +91,7 @@ public BlockSoundGroup getSoundGroup() { } @Override - public Translation getTranslation() { - if (this.api$translation == null) { - this.api$translation = new SpongeTranslation(this.shadow$getTranslationKey()); - } - - return this.api$translation; + public Component asComponent() { + return TranslatableComponent.of(this.shadow$getTranslationKey()); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/enchantment/EnchantmentMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/enchantment/EnchantmentMixin_API.java index 36ffd9a2d55..9c2877f1f39 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/enchantment/EnchantmentMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/enchantment/EnchantmentMixin_API.java @@ -24,13 +24,15 @@ */ package org.spongepowered.common.mixin.api.mcp.enchantment; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TranslatableComponent; +import net.kyori.adventure.text.format.NamedTextColor; import net.minecraft.enchantment.Enchantment; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.item.enchantment.EnchantmentType; import org.spongepowered.api.item.inventory.ItemStack; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; @@ -39,7 +41,6 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.common.SpongeImplHooks; import org.spongepowered.common.item.util.ItemStackUtil; -import org.spongepowered.common.text.translation.SpongeTranslation; import javax.annotation.Nullable; @@ -113,8 +114,8 @@ public boolean isCompatibleWith(EnchantmentType ench) { } @Override - public Translation getTranslation() { - return new SpongeTranslation(this.shadow$getName()); + public Component asComponent() { + return TranslatableComponent.of(this.shadow$getName(), this.shadow$isCurse() ? NamedTextColor.RED : NamedTextColor.GRAY); } @Override diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/EntityMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/EntityMixin_API.java index 219e3fda171..757a00f140a 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/EntityMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/EntityMixin_API.java @@ -51,7 +51,6 @@ import org.spongepowered.api.event.cause.EventContextKeys; import org.spongepowered.api.event.cause.entity.teleport.TeleportTypes; import org.spongepowered.api.event.entity.MoveEntityEvent; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.api.util.AABB; import org.spongepowered.api.util.RelativePositions; import org.spongepowered.api.util.Transform; @@ -495,11 +494,6 @@ public org.spongepowered.api.entity.Entity copy() { } } - @Override - public Translation getTranslation() { - return this.getType().getTranslation(); - } - @Override public boolean canSee(final org.spongepowered.api.entity.Entity entity) { // note: this implementation will be changing with contextual data diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/EntityTypeMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/EntityTypeMixin_API.java index b71dd4c886e..b14f6329afd 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/EntityTypeMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/EntityTypeMixin_API.java @@ -24,20 +24,19 @@ */ package org.spongepowered.common.mixin.api.mcp.entity; +import net.kyori.adventure.text.Component; +import net.minecraft.util.text.ITextComponent; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.entity.EntityType; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.ResourceKeyBridge; -import org.spongepowered.common.text.translation.SpongeTranslation; @Mixin(net.minecraft.entity.EntityType.class) public abstract class EntityTypeMixin_API implements EntityType { - @Shadow public abstract String shadow$getTranslationKey(); - - private Translation api$translation; + @Shadow public abstract ITextComponent shadow$getName(); @Override public ResourceKey getKey() { @@ -45,11 +44,7 @@ public ResourceKey getKey() { } @Override - public Translation getTranslation() { - if (this.api$translation == null) { - this.api$translation = new SpongeTranslation(this.shadow$getTranslationKey()); - } - - return this.api$translation; + public Component asComponent() { + return SpongeAdventure.asAdventure(this.shadow$getName()); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/LivingEntityMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/LivingEntityMixin_API.java index e5af8daceb2..a6849075790 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/LivingEntityMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/LivingEntityMixin_API.java @@ -25,6 +25,8 @@ package org.spongepowered.common.mixin.api.mcp.entity; import com.google.common.base.Preconditions; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ai.attributes.IAttribute; import net.minecraft.entity.ai.attributes.IAttributeInstance; @@ -34,7 +36,6 @@ import org.spongepowered.api.entity.attribute.Attribute; import org.spongepowered.api.entity.attribute.type.AttributeType; import org.spongepowered.api.entity.living.Living; -import org.spongepowered.api.text.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -49,8 +50,8 @@ public abstract class LivingEntityMixin_API extends EntityMixin_API implements L @Shadow public abstract IAttributeInstance shadow$getAttribute(IAttribute attribute); @Override - public Text getTeamRepresentation() { - return Text.of(this.shadow$getUniqueID().toString()); + public Component getTeamRepresentation() { + return TextComponent.of(this.shadow$getUniqueID().toString()); } @Override diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/item/ItemEntityMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/item/ItemEntityMixin_API.java index 5763ad5eabc..c29e4da2e21 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/item/ItemEntityMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/item/ItemEntityMixin_API.java @@ -25,13 +25,9 @@ package org.spongepowered.common.mixin.api.mcp.entity.item; import net.minecraft.entity.item.ItemEntity; -import net.minecraft.item.ItemStack; import org.spongepowered.api.data.value.Value; import org.spongepowered.api.entity.Item; -import org.spongepowered.api.item.ItemType; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.common.mixin.api.mcp.entity.EntityMixin_API; import java.util.Set; @@ -39,13 +35,6 @@ @Mixin(ItemEntity.class) public abstract class ItemEntityMixin_API extends EntityMixin_API implements Item { - @Shadow public abstract ItemStack shadow$getItem(); - - @Override - public Translation getTranslation() { - return ((org.spongepowered.api.item.inventory.ItemStack) (Object) this.shadow$getItem()).getTranslation(); - } - @Override protected Set> api$getVanillaValues() { final Set> values = super.api$getVanillaValues(); diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/passive/OcelotEntityMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/passive/OcelotEntityMixin_API.java index e6a9d28e10f..8b6e3ce9650 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/passive/OcelotEntityMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/passive/OcelotEntityMixin_API.java @@ -27,12 +27,8 @@ import net.minecraft.entity.passive.OcelotEntity; import org.spongepowered.api.data.value.Value; import org.spongepowered.api.entity.living.animal.Ocelot; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.text.translation.SpongeTranslation; -import java.util.Collection; import java.util.Set; @Mixin(OcelotEntity.class) diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/player/ChatVisibilityMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/player/ChatVisibilityMixin_API.java index 583d76b29a1..e9861a3e9cd 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/player/ChatVisibilityMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/player/ChatVisibilityMixin_API.java @@ -24,30 +24,29 @@ */ package org.spongepowered.common.mixin.api.mcp.entity.player; +import net.kyori.adventure.audience.MessageType; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TranslatableComponent; import net.minecraft.entity.player.ChatVisibility; import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.chat.ChatType; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; import org.spongepowered.common.bridge.entity.player.ChatVisibilityBridge; -import org.spongepowered.common.text.translation.SpongeTranslation; -import org.spongepowered.plugin.PluginContainer; @Mixin(ChatVisibility.class) -public abstract class ChatVisibilityMixin_API implements org.spongepowered.api.text.chat.ChatVisibility { +public abstract class ChatVisibilityMixin_API implements org.spongepowered.api.entity.living.player.chat.ChatVisibility { + + @Shadow private String field_221257_f; private ResourceKey api$key; - private SpongeTranslation api$translation; @Inject(method = "", at = @At("RETURN")) private void api$setKeyAndTranslation(String enumName, int ordinal, int p_i50176_3_, String p_i50176_4_, CallbackInfo ci) { this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), enumName.toLowerCase()); - this.api$translation = new SpongeTranslation(p_i50176_4_); } @Override @@ -56,12 +55,12 @@ public ResourceKey getKey() { } @Override - public Translation getTranslation() { - return this.api$translation; + public Component asComponent() { + return TranslatableComponent.of(this.field_221257_f); } @Override - public boolean isVisible(ChatType chatType) { - return ((ChatVisibilityBridge) this).bridge$getVisibleChatTypes().contains(chatType); + public boolean isVisible(MessageType type) { + return ((ChatVisibilityBridge) this).bridge$getVisibleChatTypes().contains(type); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/player/ServerPlayerEntityMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/player/ServerPlayerEntityMixin_API.java index d3921939ac7..d879614ac5e 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/player/ServerPlayerEntityMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/entity/player/ServerPlayerEntityMixin_API.java @@ -25,6 +25,15 @@ package org.spongepowered.common.mixin.api.mcp.entity.player; import com.google.common.base.Preconditions; +import java.util.Objects; +import net.kyori.adventure.audience.MessageType; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.inventory.Book; +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.sound.SoundStop; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TranslatableComponent; +import net.kyori.adventure.title.Title; import net.minecraft.advancements.PlayerAdvancements; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.IPacket; @@ -35,14 +44,17 @@ import net.minecraft.network.play.server.SPlaySoundPacket; import net.minecraft.network.play.server.SSendResourcePackPacket; import net.minecraft.network.play.server.SStopSoundPacket; +import net.minecraft.network.play.server.STitlePacket; import net.minecraft.network.play.server.SWorldBorderPacket; import net.minecraft.server.MinecraftServer; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.util.registry.Registry; import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.ServerBossInfo; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.spongepowered.api.Server; import org.spongepowered.api.advancement.Advancement; import org.spongepowered.api.advancement.AdvancementProgress; import org.spongepowered.api.advancement.AdvancementTree; @@ -50,29 +62,20 @@ import org.spongepowered.api.data.type.SkinPart; import org.spongepowered.api.data.value.Value; import org.spongepowered.api.effect.particle.ParticleEffect; -import org.spongepowered.api.effect.sound.SoundCategory; -import org.spongepowered.api.effect.sound.SoundType; import org.spongepowered.api.effect.sound.music.MusicDisc; import org.spongepowered.api.entity.living.player.CooldownTracker; import org.spongepowered.api.entity.living.player.Player; +import org.spongepowered.api.entity.living.player.PlayerChatRouter; import org.spongepowered.api.entity.living.player.server.ServerPlayer; import org.spongepowered.api.entity.living.player.tab.TabList; import org.spongepowered.api.event.SpongeEventFactory; import org.spongepowered.api.event.cause.Cause; -import org.spongepowered.api.event.message.MessageChannelEvent; -import org.spongepowered.api.event.message.MessageEvent; +import org.spongepowered.api.event.message.PlayerChatEvent; import org.spongepowered.api.network.ServerPlayerConnection; import org.spongepowered.api.profile.GameProfile; import org.spongepowered.api.resourcepack.ResourcePack; import org.spongepowered.api.scoreboard.Scoreboard; -import org.spongepowered.api.text.BookView; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.channel.MessageChannel; -import org.spongepowered.api.text.chat.ChatType; -import org.spongepowered.api.text.chat.ChatTypes; -import org.spongepowered.api.text.chat.ChatVisibility; -import org.spongepowered.api.text.title.Title; -import org.spongepowered.api.text.translation.Translation; +import org.spongepowered.api.entity.living.player.chat.ChatVisibility; import org.spongepowered.api.world.WorldBorder; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Implements; @@ -83,9 +86,9 @@ import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.accessor.network.play.server.SChangeBlockPacketAccessor; import org.spongepowered.common.accessor.world.border.WorldBorderAccessor; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.advancements.AdvancementBridge; import org.spongepowered.common.bridge.advancements.PlayerAdvancementsBridge; -import org.spongepowered.common.bridge.api.text.title.TitleBridge; import org.spongepowered.common.bridge.entity.EntityBridge; import org.spongepowered.common.bridge.entity.player.ServerPlayerEntityBridge; import org.spongepowered.common.bridge.network.play.server.SSendResourcePackPacketBridge; @@ -95,11 +98,9 @@ import org.spongepowered.common.entity.player.tab.SpongeTabList; import org.spongepowered.common.event.tracking.PhaseTracker; import org.spongepowered.common.SpongeServer; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.BookUtil; import org.spongepowered.common.util.LocaleCache; import org.spongepowered.common.util.NetworkUtil; -import org.spongepowered.common.util.VecHelper; import org.spongepowered.math.vector.Vector3d; import org.spongepowered.math.vector.Vector3i; @@ -126,6 +127,7 @@ public abstract class ServerPlayerEntityMixin_API extends PlayerEntityMixin_API @Shadow public ServerPlayNetHandler connection; @Shadow private boolean chatColours; + private PlayerChatRouter api$chatRouter; private final TabList api$tabList = new SpongeTabList((ServerPlayerEntity) (Object) this); @Nullable private WorldBorder api$worldBorder; @@ -180,41 +182,6 @@ public Set getDisplayedSkinParts() { return ((ServerPlayerEntityBridge) this).bridge$getSkinParts(); } - @Override - public void sendMessage(final ChatType type, final Text message) { - if (this.impl$isFake) { - // Don't bother sending messages to fake players - return; - } - Preconditions.checkNotNull(type, "type"); - Preconditions.checkNotNull(message, "message"); - - ITextComponent component = SpongeTexts.toComponent(message); - if (type == ChatTypes.ACTION_BAR.get()) { - component = SpongeTexts.fixActionBarFormatting(component); - } - - this.connection.sendPacket(new SChatPacket(component, (net.minecraft.util.text.ChatType) (Object) type)); - } - - @Override - public void sendBookView(final BookView bookView) { - if (this.impl$isFake) { - // Don't bother sending messages to fake players - return; - } - BookUtil.fakeBookView(bookView, Collections.singletonList(this)); - } - - @Override - public void sendTitle(final Title title) { - if (this.impl$isFake) { - // Don't bother sending messages to fake players - return; - } - ((TitleBridge) (Object) title).bridge$send((ServerPlayerEntity) (Object) this); - } - @Override public void spawnParticles(final ParticleEffect particleEffect, final Vector3d position) { if (this.impl$isFake) { @@ -256,8 +223,8 @@ public void setScoreboard(final Scoreboard scoreboard) { } @Override - public Text getTeamRepresentation() { - return Text.of(this.shadow$getName()); + public Component getTeamRepresentation() { + return SpongeAdventure.asAdventure(this.shadow$getName()); } @Override @@ -267,67 +234,15 @@ public Scoreboard getScoreboard() { @Override public void kick() { - this.kick(Text.of(Translation.find("disconnect.disconnected").get())); + this.kick(TranslatableComponent.of("disconnect.disconnected")); } @Override - public void kick(final Text message) { - final ITextComponent component = SpongeTexts.toComponent(message); + public void kick(final Component message) { + final ITextComponent component = SpongeAdventure.asVanilla(message); this.connection.disconnect(component); } - @Override - public void playSound(final SoundType sound, final SoundCategory category, final Vector3d position, final double volume) { - this.playSound(sound, category, position, volume, 1); - } - - @Override - public void playSound(final SoundType sound, final SoundCategory category, final Vector3d position, final double volume, final double pitch) { - this.playSound(sound, category, position, volume, pitch, 0); - } - - @Override - public void playSound( - final SoundType sound, final SoundCategory category, final Vector3d position, final double volume, final double pitch, final double minVolume) { - final SoundEvent event; - try { - // Check if the event is registered (ie has an integer ID) - event = Registry.SOUND_EVENT.getOrDefault((ResourceLocation) (Object) sound.getKey()); - } catch (IllegalStateException e) { - // Otherwise send it as a custom sound - this.connection.sendPacket(new SPlaySoundPacket((ResourceLocation) (Object) sound.getKey(), (net.minecraft.util.SoundCategory) (Object) category, - VecHelper.toVec3d(position), (float) Math.max(minVolume, volume), (float) pitch)); - return; - } - - this.connection.sendPacket(new SPlaySoundEffectPacket(event, (net.minecraft.util.SoundCategory) (Object) category, position.getX(), - position.getY(), position.getZ(), (float) Math.max(minVolume, volume), (float) pitch)); - } - - @Override - public void stopSounds() { - this.stopSounds0(null, null); - } - - @Override - public void stopSounds(final SoundType sound) { - this.stopSounds0(Preconditions.checkNotNull(sound, "sound"), null); - } - - @Override - public void stopSounds(final SoundCategory category) { - this.stopSounds0(null, Preconditions.checkNotNull(category, "category")); - } - - @Override - public void stopSounds(final SoundType sound, final SoundCategory category) { - this.stopSounds0(Preconditions.checkNotNull(sound, "sound"), Preconditions.checkNotNull(category, "category")); - } - - private void stopSounds0(@Nullable final SoundType sound, @Nullable final SoundCategory category) { - this.connection.sendPacket(new SStopSoundPacket((ResourceLocation) (Object) sound.getKey(), (net.minecraft.util.SoundCategory) (Object) category)); - } - @Override public void playMusicDisc(final Vector3i position, final MusicDisc recordType) { this.playRecord0(position, Preconditions.checkNotNull(recordType, "recordType")); @@ -393,20 +308,28 @@ public boolean respawnPlayer() { } @Override - public MessageChannelEvent.Chat simulateChat(final Text message, final Cause cause) { + public PlayerChatRouter getChatRouter() { + if (this.api$chatRouter == null) { + this.api$chatRouter = (player, message) -> ((Server) this.server).sendMessage( + TranslatableComponent.of("chat.type.text", ((EntityBridge) player).bridge$getDisplayNameText(), message)); + } + return this.api$chatRouter; + } + + @Override + public void setChatRouter(final PlayerChatRouter router) { + this.api$chatRouter = Objects.requireNonNull(router, "router"); + } + + @Override + public PlayerChatEvent simulateChat(final Component message, final Cause cause) { Preconditions.checkNotNull(message, "message"); - final TranslationTextComponent component = new TranslationTextComponent("chat.type.text", SpongeTexts.toComponent(((EntityBridge) this).bridge$getDisplayNameText()), - SpongeTexts.toComponent(message)); - final Text[] messages = SpongeTexts.splitChatMessage(component); - - final MessageChannel originalChannel = this.getMessageChannel(); - final MessageChannelEvent.Chat event = SpongeEventFactory.createMessageChannelEventChat( - cause, originalChannel, Optional.of(originalChannel), - new MessageEvent.MessageFormatter(messages[0], messages[1]), message, false - ); - if (!SpongeCommon.postEvent(event) && !event.isMessageCancelled()) { - event.getChannel().ifPresent(channel -> channel.send(this, event.getMessage(), ChatTypes.CHAT)); + final PlayerChatRouter originalRouter = this.getChatRouter(); + final PlayerChatEvent event = SpongeEventFactory.createPlayerChatEvent( + cause, originalRouter, Optional.of(originalRouter), message, message); + if (!SpongeCommon.postEvent(event)) { + event.getChatRouter().ifPresent(channel -> channel.chat(this, event.getMessage())); } return event; } @@ -480,4 +403,120 @@ public void setWorldBorder(@Nullable WorldBorder border) { return values; } + // Audience + + @Override + public void sendMessage(final Component message, final MessageType type) { + if (this.impl$isFake) { + return; + } + Objects.requireNonNull(message, "message"); + Objects.requireNonNull(type, "type"); + this.connection.sendPacket(new SChatPacket(SpongeAdventure.asVanilla(message), SpongeAdventure.asVanilla(type))); + } + + @Override + public void sendActionBar(final Component message) { + if (this.impl$isFake) { + return; + } + Objects.requireNonNull(message, "message"); + this.connection.sendPacket(new STitlePacket(STitlePacket.Type.ACTIONBAR, SpongeAdventure.asVanilla(message))); + } + + @Override + public void showTitle(final Title title) { + if (this.impl$isFake) { + return; + } + Objects.requireNonNull(title, "title"); + this.connection.sendPacket(new STitlePacket(ticks(title.fadeInTime()), ticks(title.fadeOutTime()), ticks(title.stayTime()))); + this.connection.sendPacket(new STitlePacket(STitlePacket.Type.SUBTITLE, SpongeAdventure.asVanilla(title.subtitle()))); + this.connection.sendPacket(new STitlePacket(STitlePacket.Type.TITLE, SpongeAdventure.asVanilla(title.title()))); + } + + private static int ticks(final Duration duration) { + if (duration == null) { + return -1; + } + return (int) (duration.toMillis() / 50L); + } + + @Override + public void clearTitle() { + if (this.impl$isFake) { + return; + } + this.connection.sendPacket(new STitlePacket(STitlePacket.Type.CLEAR, null)); + } + + @Override + public void resetTitle() { + if (this.impl$isFake) { + return; + } + this.connection.sendPacket(new STitlePacket(STitlePacket.Type.RESET, null)); + } + + @Override + public void showBossBar(final BossBar bar) { + if (this.impl$isFake) { + return; + } + Objects.requireNonNull(bar, "bar"); + final ServerBossInfo vanilla = SpongeAdventure.asVanillaServer(bar); + vanilla.addPlayer((ServerPlayerEntity) (Object) this); + } + + @Override + public void hideBossBar(final BossBar bar) { + if (this.impl$isFake) { + return; + } + Objects.requireNonNull(bar, "bar"); + final ServerBossInfo vanilla = SpongeAdventure.asVanillaServer(bar); + vanilla.removePlayer((ServerPlayerEntity) (Object) this); + } + + @Override + public void playSound(final Sound sound) { + this.playSound(sound, this.posX, this.posY, this.posZ); + } + + @Override + public void playSound(final Sound sound, final double x, final double y, final double z) { + if (this.impl$isFake) { + return; + } + Objects.requireNonNull(sound, "sound"); + final Optional event = Registry.SOUND_EVENT.getValue(SpongeAdventure.asVanilla(sound.name())); + if (event.isPresent()) { + // Check if the event is registered + this.connection.sendPacket(new SPlaySoundEffectPacket(event.get(), SpongeAdventure.asVanilla(sound.source()), + x, y, z, sound.volume(), sound.pitch())); + } else { + // Otherwise send it as a custom sound + this.connection.sendPacket(new SPlaySoundPacket(SpongeAdventure.asVanilla(sound.name()), SpongeAdventure.asVanilla(sound.source()), + new Vec3d(x, y, z), sound.volume(), sound.pitch())); + } + } + + @Override + public void stopSound(final SoundStop stop) { + if (this.impl$isFake) { + return; + } + Objects.requireNonNull(stop, "stop"); + this.connection.sendPacket(new SStopSoundPacket(SpongeAdventure.asVanillaNullable(stop.sound()), SpongeAdventure.asVanillaNullable(stop.source()))); + } + + @Override + public void openBook(@NonNull final Book book) { + if (this.impl$isFake) { + return; + } + Objects.requireNonNull(book, "book"); + BookUtil.fakeBookView(book, Collections.singletonList(this)); + } + } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/DyeColorMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/DyeColorMixin_API.java index ef9301b74f9..aa76fc9ee77 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/DyeColorMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/DyeColorMixin_API.java @@ -27,7 +27,6 @@ import net.minecraft.block.material.MaterialColor; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.data.type.DyeColor; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.api.util.Color; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -35,10 +34,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.common.text.translation.SpongeTranslation; import org.spongepowered.math.GenericMath; -import org.spongepowered.plugin.PluginContainer; @Mixin(net.minecraft.item.DyeColor.class) public abstract class DyeColorMixin_API implements DyeColor { @@ -46,12 +42,10 @@ public abstract class DyeColorMixin_API implements DyeColor { @Shadow public abstract float[] shadow$getColorComponentValues(); private ResourceKey api$key; - private Translation api$translation; @Inject(method = "", at = @At("RETURN")) private void api$setKeyAndTranslation(String enumName, int ordinal, int idIn, String translationKey, int colorValueIn, MaterialColor mapColorIn, int fireworkColorIn, int textColorIn, CallbackInfo ci) { this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), translationKey.toLowerCase()); - this.api$translation = new SpongeTranslation("color.minecraft." + translationKey); } @Override @@ -59,11 +53,6 @@ public ResourceKey getKey() { return this.api$key; } - @Override - public Translation getTranslation() { - return this.api$translation; - } - @Override public Color getColor() { float[] components = this.shadow$getColorComponentValues(); diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/ItemMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/ItemMixin_API.java index 41797e23de0..4c630c4d0a1 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/ItemMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/ItemMixin_API.java @@ -24,15 +24,15 @@ */ package org.spongepowered.common.mixin.api.mcp.item; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TranslatableComponent; import net.minecraft.item.Item; import net.minecraft.util.registry.Registry; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.block.BlockType; import org.spongepowered.api.item.ItemType; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.text.translation.SpongeTranslation; import javax.annotation.Nullable; import java.util.Optional; @@ -46,7 +46,6 @@ public abstract class ItemMixin_API implements ItemType { @Nullable protected BlockType blockType = null; private ResourceKey api$key; - private SpongeTranslation api$translation; @Override public final ResourceKey getKey() { @@ -57,12 +56,8 @@ public final ResourceKey getKey() { } @Override - public Translation getTranslation() { - if (this.api$translation == null) { - this.api$translation = new SpongeTranslation(this.shadow$getTranslationKey() + ".name"); - } - - return this.api$translation; + public Component asComponent() { + return TranslatableComponent.of(this.shadow$getTranslationKey()); } @Override diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/ItemStackMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/ItemStackMixin_API.java index 57e978cf573..d457d1ebcb8 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/ItemStackMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/item/ItemStackMixin_API.java @@ -43,7 +43,6 @@ import org.spongepowered.api.item.inventory.ItemStackSnapshot; import org.spongepowered.api.item.inventory.equipment.EquipmentType; import org.spongepowered.api.item.inventory.equipment.EquipmentTypes; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; import org.spongepowered.asm.mixin.Intrinsic; @@ -52,7 +51,6 @@ import org.spongepowered.common.SpongeImplHooks; import org.spongepowered.common.data.persistence.NbtTranslator; import org.spongepowered.common.item.SpongeItemStackSnapshot; -import org.spongepowered.common.text.translation.SpongeTranslation; import org.spongepowered.common.util.Constants; import java.util.Collection; @@ -197,10 +195,6 @@ public DataContainer toContainer() { return container; } - public Translation itemStack$getTranslation() { - return new SpongeTranslation(this.shadow$getItem().getTranslationKey((net.minecraft.item.ItemStack) (Object) this) + ".name"); - } - public ItemStackSnapshot itemStack$createSnapshot() { return new SpongeItemStackSnapshot((ItemStack) this); } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/network/ServerStatusResponseMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/network/ServerStatusResponseMixin_API.java index 960c949b056..a1faf76fe4b 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/network/ServerStatusResponseMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/network/ServerStatusResponseMixin_API.java @@ -26,17 +26,16 @@ import static com.google.common.base.Preconditions.checkNotNull; +import net.kyori.adventure.text.Component; import net.minecraft.network.ServerStatusResponse; import net.minecraft.util.text.ITextComponent; import org.spongepowered.api.MinecraftVersion; import org.spongepowered.api.event.server.ClientPingServerEvent; import org.spongepowered.api.network.status.Favicon; -import org.spongepowered.api.text.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.network.ServerStatusResponseBridge; -import org.spongepowered.common.network.status.SpongeFavicon; -import org.spongepowered.common.text.SpongeTexts; import java.util.Optional; @@ -52,14 +51,14 @@ public abstract class ServerStatusResponseMixin_API implements ClientPingServerE @Override - public Text getDescription() { + public Component getDescription() { return ((ServerStatusResponseBridge) this).bridge$getDescription(); } @Override - public void setDescription(final Text description) { + public void setDescription(final Component description) { ((ServerStatusResponseBridge) this).bridge$setDescription(checkNotNull(description, "description")); - this.description = SpongeTexts.toComponent(description); + this.description = SpongeAdventure.asVanilla(description); } @Override diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/potion/EffectMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/potion/EffectMixin_API.java index c07be5ce70e..ad52e685aaa 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/potion/EffectMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/potion/EffectMixin_API.java @@ -25,23 +25,21 @@ package org.spongepowered.common.mixin.api.mcp.potion; import com.google.common.collect.ImmutableMap; +import net.kyori.adventure.text.Component; import net.minecraft.potion.Effect; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; +import net.minecraft.util.text.ITextComponent; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.effect.potion.PotionEffectType; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; import org.spongepowered.asm.mixin.Intrinsic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.text.translation.SpongeTranslation; +import org.spongepowered.common.adventure.SpongeAdventure; import java.util.Map; -import javax.annotation.Nullable; - @Mixin(Effect.class) @Implements(@Interface(iface = PotionEffectType.class, prefix = "potionEffectType$")) public abstract class EffectMixin_API implements PotionEffectType { @@ -64,11 +62,9 @@ public abstract class EffectMixin_API implements PotionEffectType { .build(); - @Shadow public abstract String shadow$getName(); @Shadow public abstract boolean shadow$isInstant(); + @Shadow public abstract ITextComponent shadow$getDisplayName(); - @Nullable private Translation api$translation; - @Nullable private Translation api$potionTranslation; private ResourceKey api$key; @Override @@ -85,23 +81,8 @@ public ResourceKey getKey() { } @Override - public Translation getTranslation() { - if (this.api$translation == null) { - this.api$translation = new SpongeTranslation(this.shadow$getName()); - } - return this.api$translation; - } - - // TODO: Minecraft 1.14 - Remove this from the API or change return type to Optional - // TODO: potionMapping is not up to date - @Override - public Translation getPotionTranslation() { - if (this.api$potionTranslation == null) { - String name = this.shadow$getName(); - final String potionId = "potion." + potionMapping.getOrDefault(name, "effect.missing"); - this.api$potionTranslation = new SpongeTranslation(potionId); - } - return this.api$potionTranslation; + public Component asComponent() { + return SpongeAdventure.asAdventure(this.shadow$getDisplayName()); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/ScorePlayerTeamMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/ScorePlayerTeamMixin_API.java index 34551960915..ade2f65a807 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/ScorePlayerTeamMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/ScorePlayerTeamMixin_API.java @@ -24,14 +24,14 @@ */ package org.spongepowered.common.mixin.api.mcp.scoreboard; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextFormatting; import org.spongepowered.api.scoreboard.Team; import org.spongepowered.api.scoreboard.Visibility; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.format.TextColor; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; @@ -39,9 +39,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.scoreboard.ScorePlayerTeamBridge; import org.spongepowered.common.bridge.scoreboard.TeamBridge; -import org.spongepowered.common.text.SpongeTexts; import java.util.Collection; import java.util.Optional; @@ -77,44 +77,44 @@ public abstract class ScorePlayerTeamMixin_API implements Team { } @Override - public Text getDisplayName() { + public Component getDisplayName() { return ((ScorePlayerTeamBridge) this).bridge$getDisplayName(); } @Override - public void setDisplayName(final Text text) { + public void setDisplayName(final Component text) { ((ScorePlayerTeamBridge) this).bridge$setDisplayName(text); } @Override - public TextColor getColor() { + public NamedTextColor getColor() { return ((TeamBridge) this).bridge$getColor(); } @Override - public void setColor(final TextColor color) { + public void setColor(final NamedTextColor color) { ((ScorePlayerTeamBridge) this).bridge$setColor(color); } @Override - public Text getPrefix() { + public Component getPrefix() { return ((ScorePlayerTeamBridge) this).bridge$getPrefix(); } @Override - public void setPrefix(final Text prefix) { + public void setPrefix(final Component prefix) { ((ScorePlayerTeamBridge) this).bridge$setPrefix(prefix); } @Override - public Text getSuffix() { + public Component getSuffix() { return ((ScorePlayerTeamBridge) this).bridge$getSuffix(); } @Shadow public abstract void setColor(TextFormatting color); @Override - public void setSuffix(final Text suffix) { + public void setSuffix(final Component suffix) { ((ScorePlayerTeamBridge) this).bridge$setSuffix(suffix); } @@ -175,13 +175,13 @@ public void setCollisionRule(final org.spongepowered.api.scoreboard.CollisionRul } @Override - public Set getMembers() { - return this.shadow$getMembershipCollection().stream().map(SpongeTexts::fromLegacy).collect(Collectors.toSet()); + public Set getMembers() { + return this.shadow$getMembershipCollection().stream().map(SpongeAdventure::legacySection).collect(Collectors.toSet()); } @Override - public void addMember(final Text member) { - final String legacyName = SpongeTexts.toLegacy(member); + public void addMember(final Component member) { + final String legacyName = SpongeAdventure.legacySection(member); if (legacyName.length() > 40) { throw new IllegalArgumentException(String.format("Member is %s characters long! It must be at most 40.", legacyName.length())); } @@ -194,8 +194,8 @@ public void addMember(final Text member) { @SuppressWarnings("RedundantCast") @Override - public boolean removeMember(final Text member) { - final String legacyName = SpongeTexts.toLegacy(member); + public boolean removeMember(final Component member) { + final String legacyName = SpongeAdventure.legacySection(member); if (this.scoreboard != null) { final ScorePlayerTeam realTeam = this.scoreboard.getPlayersTeam(legacyName); diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/ServerScoreboardMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/ServerScoreboardMixin_API.java index b47f8304663..74a9db9e1b3 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/ServerScoreboardMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/ServerScoreboardMixin_API.java @@ -24,6 +24,7 @@ */ package org.spongepowered.common.mixin.api.mcp.scoreboard; +import net.kyori.adventure.text.Component; import net.minecraft.network.play.server.SDisplayObjectivePacket; import net.minecraft.network.play.server.SScoreboardObjectivePacket; import net.minecraft.scoreboard.Score; @@ -36,11 +37,11 @@ import org.spongepowered.api.scoreboard.criteria.Criterion; import org.spongepowered.api.scoreboard.displayslot.DisplaySlot; import org.spongepowered.api.scoreboard.objective.Objective; -import org.spongepowered.api.text.Text; import org.spongepowered.asm.mixin.Implements; import org.spongepowered.asm.mixin.Interface; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.scoreboard.ScoreBridge; import org.spongepowered.common.bridge.scoreboard.ScoreObjectiveBridge; import org.spongepowered.common.bridge.scoreboard.ServerScoreboardBridge; @@ -48,7 +49,6 @@ import org.spongepowered.common.accessor.scoreboard.ScoreboardAccessor; import org.spongepowered.common.scoreboard.SpongeDisplaySlot; import org.spongepowered.common.scoreboard.SpongeObjective; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.Constants; import javax.annotation.Nullable; @@ -176,8 +176,8 @@ public abstract class ServerScoreboardMixin_API extends Scoreboard { } @SuppressWarnings("deprecation") - public Optional scoreboard$getMemberTeam(final Text member) { - return Optional.ofNullable((Team) ((ScoreboardAccessor) this).accessor$getTeamMemberships().get(SpongeTexts.toLegacy(member))); + public Optional scoreboard$getMemberTeam(final Component member) { + return Optional.ofNullable((Team) ((ScoreboardAccessor) this).accessor$getTeamMemberships().get(SpongeAdventure.legacySection(member))); } // Add team @@ -210,7 +210,7 @@ public abstract class ServerScoreboardMixin_API extends Scoreboard { return scores; } - public Set scoreboard$getScores(final Text name) { + public Set scoreboard$getScores(final Component name) { final Set scores = new HashSet<>(); for (final ScoreObjective objective: ((ScoreboardAccessor) this).accessor$getScoreObjectives().values()) { ((ScoreObjectiveBridge) objective).bridge$getSpongeObjective().getScore(name).ifPresent(scores::add); @@ -218,7 +218,7 @@ public abstract class ServerScoreboardMixin_API extends Scoreboard { return scores; } - public void scoreboard$removeScores(final Text name) { + public void scoreboard$removeScores(final Component name) { for (final ScoreObjective objective: ((ScoreboardAccessor) this).accessor$getScoreObjectives().values()) { final SpongeObjective spongeObjective = ((ScoreObjectiveBridge) objective).bridge$getSpongeObjective(); spongeObjective.getScore(name).ifPresent(spongeObjective::removeScore); diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/Team_CollisionRuleMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/Team_CollisionRuleMixin_API.java index 71a15206686..eeab2287f88 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/Team_CollisionRuleMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/Team_CollisionRuleMixin_API.java @@ -24,21 +24,18 @@ */ package org.spongepowered.common.mixin.api.mcp.scoreboard; +import net.kyori.adventure.text.Component; import net.minecraft.scoreboard.Team; import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TranslationTextComponent; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.scoreboard.CollisionRule; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.common.text.translation.SpongeTranslation; -import org.spongepowered.plugin.PluginContainer; +import org.spongepowered.common.adventure.SpongeAdventure; @Mixin(Team.CollisionRule.class) public abstract class Team_CollisionRuleMixin_API implements CollisionRule { @@ -46,12 +43,10 @@ public abstract class Team_CollisionRuleMixin_API implements CollisionRule { @Shadow public abstract ITextComponent shadow$getDisplayName(); private ResourceKey api$key; - private SpongeTranslation api$translation; @Inject(method = "", at = @At("RETURN")) private void api$setKeyAndTranslation(String enumName, int ordinal, String name, int idIn, CallbackInfo ci) { this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), name.toLowerCase()); - this.api$translation = new SpongeTranslation((TranslationTextComponent) this.shadow$getDisplayName()); } @Override @@ -60,7 +55,7 @@ public ResourceKey getKey() { } @Override - public Translation getTranslation() { - return this.api$translation; + public Component asComponent() { + return SpongeAdventure.asAdventure(this.shadow$getDisplayName()); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/Team_VisibleMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/Team_VisibleMixin_API.java index 5044da7e176..7b7a59e7118 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/Team_VisibleMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/scoreboard/Team_VisibleMixin_API.java @@ -24,21 +24,18 @@ */ package org.spongepowered.common.mixin.api.mcp.scoreboard; +import net.kyori.adventure.text.Component; import net.minecraft.scoreboard.Team; import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TranslationTextComponent; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.scoreboard.Visibility; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.common.text.translation.SpongeTranslation; -import org.spongepowered.plugin.PluginContainer; +import org.spongepowered.common.adventure.SpongeAdventure; @Mixin(Team.Visible.class) public abstract class Team_VisibleMixin_API implements Visibility { @@ -46,12 +43,10 @@ public abstract class Team_VisibleMixin_API implements Visibility { @Shadow public abstract ITextComponent shadow$getDisplayName(); private ResourceKey api$key; - private SpongeTranslation api$translation; @Inject(method = "", at = @At("RETURN")) private void api$setKeyAndTranslation(String enumName, int ordinal, String name, int idIn, CallbackInfo ci) { this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), name.toLowerCase()); - this.api$translation = new SpongeTranslation(((TranslationTextComponent) this.shadow$getDisplayName()).getKey()); } @Override @@ -60,7 +55,7 @@ public ResourceKey getKey() { } @Override - public Translation getTranslation() { - return this.api$translation; + public Component asComponent() { + return SpongeAdventure.asAdventure(this.shadow$getDisplayName()); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/server/MinecraftServerMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/server/MinecraftServerMixin_API.java index ac4d97b0d09..2a0e88be6ff 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/server/MinecraftServerMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/server/MinecraftServerMixin_API.java @@ -28,10 +28,16 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; import com.mojang.authlib.GameProfileRepository; import com.mojang.authlib.minecraft.MinecraftSessionService; import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; import com.mojang.datafixers.DataFixer; +import java.util.Collections; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.audience.MessageType; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.minecraft.command.Commands; import net.minecraft.scoreboard.ServerScoreboard; import net.minecraft.server.MinecraftServer; @@ -43,18 +49,16 @@ import net.minecraft.util.text.ITextComponent; import net.minecraft.world.chunk.listener.IChunkStatusListenerFactory; import net.minecraft.world.server.ServerWorld; +import org.checkerframework.checker.nullness.qual.NonNull; import org.spongepowered.api.Game; import org.spongepowered.api.Server; import org.spongepowered.api.Sponge; -import org.spongepowered.api.SystemSubject; import org.spongepowered.api.entity.living.player.server.ServerPlayer; import org.spongepowered.api.event.CauseStackManager; import org.spongepowered.api.profile.GameProfileManager; import org.spongepowered.api.resourcepack.ResourcePack; import org.spongepowered.api.scheduler.Scheduler; import org.spongepowered.api.scoreboard.Scoreboard; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.channel.MessageChannel; import org.spongepowered.api.user.UserManager; import org.spongepowered.api.world.TeleportHelper; import org.spongepowered.api.world.storage.ChunkLayout; @@ -67,6 +71,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.server.MinecraftServerBridge; import org.spongepowered.common.event.tracking.PhaseTracker; import org.spongepowered.common.profile.SpongeGameProfileManager; @@ -74,7 +79,6 @@ import org.spongepowered.common.scheduler.SpongeScheduler; import org.spongepowered.common.SpongeServer; import org.spongepowered.common.user.SpongeUserManager; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.UsernameCache; import org.spongepowered.common.world.server.SpongeWorldManager; import org.spongepowered.common.world.storage.SpongeChunkLayout; @@ -91,7 +95,7 @@ @Mixin(MinecraftServer.class) @Implements(value = @Interface(iface = Server.class, prefix = "server$")) -public abstract class MinecraftServerMixin_API extends RecursiveEventLoop implements SpongeServer, SystemSubject { +public abstract class MinecraftServerMixin_API extends RecursiveEventLoop implements SpongeServer { @Shadow @Final public long[] tickTimeArray; @Shadow public abstract PlayerList shadow$getPlayerList(); @@ -103,15 +107,15 @@ public abstract class MinecraftServerMixin_API extends RecursiveEventLoop audiences; private SpongeScheduler api$scheduler; private SpongeTeleportHelper api$teleportHelper; private SpongePlayerDataManager api$playerDataHandler; private UsernameCache api$usernameCache; - private MessageChannel api$broadcastChannel; + private Audience api$broadcastAudience; private ServerScoreboard api$scoreboard; private GameProfileManager api$profileManager; private SpongeUserManager api$userManager; - private MessageChannel api$messageChannel = null; //TODO: MessageChannel.toPlayersAndServer(); public MinecraftServerMixin_API(String name) { super(name); @@ -128,23 +132,31 @@ public MinecraftServerMixin_API(String name) { this.api$userManager = new SpongeUserManager(this); } + @Override + public @NonNull Iterable audiences() { + if (this.audiences == null) { + this.audiences = Iterables.concat((List) this.shadow$getPlayerList().getPlayers(), Collections.singleton(Sponge.getGame().getSystemSubject())); + } + return this.audiences; + } + @Override public ChunkLayout getChunkLayout() { return SpongeChunkLayout.instance; } @Override - public MessageChannel getBroadcastChannel() { - if (this.api$broadcastChannel == null) { - this.api$broadcastChannel = MessageChannel.toPlayersAndServer(); + public Audience getBroadcastAudience() { + if (this.api$broadcastAudience == null) { + this.api$broadcastAudience = this; } - return this.api$broadcastChannel; + return this.api$broadcastAudience; } @Override - public void setBroadcastChannel(final MessageChannel channel) { - this.api$broadcastChannel = checkNotNull(channel, "channel"); + public void setBroadcastAudience(final Audience channel) { + this.api$broadcastAudience = checkNotNull(channel, "channel"); } @Override @@ -203,8 +215,8 @@ public Optional getPlayer(String name) { } @Override - public Text getMotd() { - return SpongeTexts.fromLegacy(this.shadow$getMOTD()); + public Component getMotd() { + return SpongeAdventure.legacy(LegacyComponentSerializer.SECTION_CHAR, this.shadow$getMOTD()); } @Override @@ -233,7 +245,7 @@ public void shutdown() { } @Override - public void shutdown(final Text kickMessage) { + public void shutdown(final Component kickMessage) { Preconditions.checkNotNull(kickMessage); for (final ServerPlayer player : this.getOnlinePlayers()) { player.kick(kickMessage); @@ -319,23 +331,8 @@ public UsernameCache getUsernameCache() { } @Override - public void sendMessage(final Text message) { - this.shadow$sendMessage(SpongeTexts.toComponent(message)); - } - - @Override - public MessageChannel getMessageChannel() { - return this.api$messageChannel; - } - - @Override - public void setMessageChannel(final MessageChannel channel) { - this.api$messageChannel = Preconditions.checkNotNull(channel); - } - - @Override - public String getIdentifier() { - return this.getName(); // from superclass. + public void sendMessage(final Component message, final MessageType type) { + this.shadow$sendMessage(SpongeAdventure.asVanilla(message)); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/server/management/BanEntryMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/server/management/BanEntryMixin_API.java index 81b51209c07..3d88c01cb89 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/server/management/BanEntryMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/server/management/BanEntryMixin_API.java @@ -24,8 +24,8 @@ */ package org.spongepowered.common.mixin.api.mcp.server.management; +import net.kyori.adventure.text.Component; import net.minecraft.server.management.BanEntry; -import org.spongepowered.api.text.Text; import org.spongepowered.api.util.ban.Ban; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -43,7 +43,7 @@ public abstract class BanEntryMixin_API extends UserListEntryMixin_API imp @Shadow @Final protected Date banEndDate; @Override - public Optional getReason() { + public Optional getReason() { return ((BanUserListEntryBridge) this).bridge$getReason(); } @@ -53,7 +53,7 @@ public Instant getCreationDate() { } @Override - public Optional getBanSource() { + public Optional getBanSource() { return ((BanUserListEntryBridge) this).bridge$getSource(); } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/state/properties/PistonTypeMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/state/properties/PistonTypeMixin_API.java index 8a1be393824..05d80ae89df 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/state/properties/PistonTypeMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/state/properties/PistonTypeMixin_API.java @@ -26,35 +26,24 @@ import net.minecraft.state.properties.PistonType; import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.common.text.translation.SpongeTranslation; -import org.spongepowered.plugin.PluginContainer; @Mixin(PistonType.class) public abstract class PistonTypeMixin_API implements org.spongepowered.api.data.type.PistonType { private ResourceKey api$key; - private Translation api$translation; @Inject(method = "", at = @At("RETURN")) private void api$setKeyAndTranslation(String enumName, int ordinal, String name, CallbackInfo ci) { this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), name.toLowerCase()); - this.api$translation = new SpongeTranslation("block.minecraft." + ((PistonType) (Object) this == PistonType.STICKY ? "sticky_piston" : "piston")); } @Override public ResourceKey getKey() { return this.api$key; } - - @Override - public Translation getTranslation() { - return this.api$translation; - } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/tileentity/CommandBlockTileEntityMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/tileentity/CommandBlockTileEntityMixin_API.java index 6194cca20ad..ed6c6d64460 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/tileentity/CommandBlockTileEntityMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/tileentity/CommandBlockTileEntityMixin_API.java @@ -29,7 +29,7 @@ import org.spongepowered.api.data.value.Value; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.text.SpongeTexts; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.util.Constants; import net.minecraft.tileentity.CommandBlockLogic; @@ -61,7 +61,7 @@ public DataContainer toContainer() { container.set(Constants.TileEntity.CUSTOM_NAME, this.getCommandBlockLogic().getName()); container.set(Constants.TileEntity.CommandBlock.DOES_TRACK_OUTPUT, this.getCommandBlockLogic().shouldReceiveErrors()); if (this.getCommandBlockLogic().shouldReceiveErrors()) { - container.set(Constants.TileEntity.CommandBlock.TRACKED_OUTPUT, SpongeTexts.toLegacy(this.getCommandBlockLogic().getLastOutput())); + container.set(Constants.TileEntity.CommandBlock.TRACKED_OUTPUT, SpongeAdventure.legacySection(SpongeAdventure.asAdventure(this.getCommandBlockLogic().getLastOutput()))); } return container; } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/HandSideMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/HandSideMixin_API.java index 4ee021ef079..d2f1858cad3 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/HandSideMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/HandSideMixin_API.java @@ -24,33 +24,32 @@ */ package org.spongepowered.common.mixin.api.mcp.util; +import net.kyori.adventure.text.Component; import net.minecraft.util.HandSide; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.data.type.HandPreference; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.common.text.translation.SpongeTranslation; -import org.spongepowered.plugin.PluginContainer; +import org.spongepowered.common.adventure.SpongeAdventure; import javax.annotation.Nullable; @Mixin(HandSide.class) public abstract class HandSideMixin_API implements HandPreference { + @Shadow private ITextComponent handName; + @Nullable private ResourceKey api$key; - @Nullable private Translation api$translation; @Inject(method = "", at = @At("RETURN")) private void api$setKeyAndTranslation(String enumName, int ordinal, ITextComponent name, CallbackInfo ci) { this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), ((TranslationTextComponent) name).getKey().replace("options.mainHand.", "")); - this.api$translation = new SpongeTranslation(((TranslationTextComponent) name).getKey()); } @Override @@ -59,7 +58,7 @@ public ResourceKey getKey() { } @Override - public Translation getTranslation() { - return this.api$translation; + public Component asComponent() { + return SpongeAdventure.asAdventure(this.handName); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/ResourceLocationMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/ResourceLocationMixin_API.java index 0560b30203e..c9027477301 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/ResourceLocationMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/ResourceLocationMixin_API.java @@ -24,9 +24,7 @@ */ package org.spongepowered.common.mixin.api.mcp.util; -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.base.Preconditions; +import net.kyori.adventure.key.Key; import net.minecraft.util.ResourceLocation; import org.spongepowered.api.ResourceKey; import org.spongepowered.asm.mixin.Implements; @@ -36,32 +34,25 @@ import org.spongepowered.asm.mixin.Shadow; @Mixin(ResourceLocation.class) -@Implements(value = @Interface(iface = ResourceKey.class, prefix = "resourceKey$")) -public abstract class ResourceLocationMixin_API implements ResourceKey { +@Implements(value = { + @Interface(iface = Key.class, prefix = "adventure$"), + @Interface(iface = ResourceKey.class, prefix = "resourceKey$") +}) +public abstract class ResourceLocationMixin_API implements Key, ResourceKey { @Shadow public abstract String shadow$getNamespace(); @Shadow public abstract String shadow$getPath(); - @Shadow public abstract int shadow$compareTo(ResourceLocation p_compareTo_1_); - @Shadow public abstract String shadow$toString(); - @Intrinsic - public String resourceKey$getNamespace() { + public String adventure$namespace() { return this.shadow$getNamespace(); } - @Override - public String getValue() { + public String adventure$value() { return this.shadow$getPath(); } - @Override - public String getFormatted() { - return this.shadow$toString(); - } - @Intrinsic - public int resourceKey$compareTo(ResourceKey o) { - Preconditions.checkNotNull(o); - return this.shadow$compareTo((ResourceLocation) (Object) o); + public int adventure$compareTo(Key o) { + return ResourceKey.super.compareTo(o); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/SoundCategoryMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/SoundCategoryMixin_API.java deleted file mode 100644 index b15503a48ee..00000000000 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/SoundCategoryMixin_API.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.api.mcp.util; - -import net.minecraft.util.SoundCategory; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.common.SpongeCommon; - -@Mixin(SoundCategory.class) -public abstract class SoundCategoryMixin_API implements org.spongepowered.api.effect.sound.SoundCategory { - - private ResourceKey api$key; - - @Inject(method = "(Ljava/lang/String;ILjava/lang/String;)V", at = @At("RETURN")) - private void api$setKey(String enumName, int ordinal, String nameIn, CallbackInfo ci) { - this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), nameIn.toLowerCase()); - } - - @Override - public ResourceKey getKey() { - return this.api$key; - } -} diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/text/ChatTypeMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/text/ChatTypeMixin_API.java deleted file mode 100644 index df35e77b2e8..00000000000 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/util/text/ChatTypeMixin_API.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.api.mcp.util.text; - -import net.minecraft.util.text.ChatType; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.plugin.PluginContainer; - -@Mixin(ChatType.class) -public abstract class ChatTypeMixin_API implements org.spongepowered.api.text.chat.ChatType { - - private ResourceKey api$key; - - @Inject(method = "", at = @At("RETURN")) - private void api$setKey(String enumName, int ordinal, byte p_i50783_3_, boolean p_i50783_4_, CallbackInfo ci) { - this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), enumName.toLowerCase()); - } - - @Override - public ResourceKey getKey() { - return this.api$key; - } -} diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/BossInfoMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/BossInfoMixin_API.java deleted file mode 100644 index 1ea60b4e9c0..00000000000 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/BossInfoMixin_API.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.api.mcp.world; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -import net.minecraft.util.text.ITextComponent; -import net.minecraft.world.BossInfo; -import org.spongepowered.api.boss.BossBar; -import org.spongepowered.api.boss.BossBarColor; -import org.spongepowered.api.boss.BossBarOverlay; -import org.spongepowered.api.text.Text; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Intrinsic; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.common.text.SpongeTexts; - -import java.util.UUID; - -@Implements(@Interface(iface = BossBar.class, prefix = "bar$")) -@Mixin(BossInfo.class) -public abstract class BossInfoMixin_API implements BossBar { - - @SuppressWarnings("NullableProblems") - @Shadow protected ITextComponent name; - @Shadow protected float percent; - @SuppressWarnings("NullableProblems") - @Shadow protected BossInfo.Color color; - @SuppressWarnings("NullableProblems") - @Shadow protected BossInfo.Overlay overlay; - @Shadow public abstract UUID shadow$getUniqueId(); - @Shadow public abstract ITextComponent shadow$getName(); - @Shadow public abstract float shadow$getPercent(); - @Shadow public abstract void shadow$setPercent(float percentIn); - @Shadow public abstract BossInfo.Color shadow$getColor(); - @Shadow public abstract BossInfo.Overlay shadow$getOverlay(); - @Shadow public abstract boolean shadow$shouldDarkenSky(); - @Shadow public abstract BossInfo shadow$setDarkenSky(boolean darkenSkyIn); - @Shadow public abstract boolean shadow$shouldPlayEndBossMusic(); - @Shadow public abstract BossInfo shadow$setPlayEndBossMusic(boolean playEndBossMusicIn); - @Shadow public abstract BossInfo shadow$setCreateFog(boolean createFogIn); - @Shadow public abstract boolean shadow$shouldCreateFog(); - - @Intrinsic - public UUID bar$getUniqueId() { - return this.shadow$getUniqueId(); - } - - @Override - public Text getName() { - return SpongeTexts.toText(this.shadow$getName()); - } - - @Override - public BossBar setName(final Text name) { - this.name = SpongeTexts.toComponent(checkNotNull(name, "name")); - return this; - } - - @Intrinsic - public float bar$getPercent() { - return this.shadow$getPercent(); - } - - @Override - public BossBar setPercent(final float percent) { - checkArgument(percent >= 0.0 && percent <= 1.0, "percent must be between 0.0f and 1.0f (was %s)", percent); - this.shadow$setPercent(percent); - return this; - } - - @SuppressWarnings("ConstantConditions") - @Override - public BossBarColor getColor() { - return (BossBarColor) (Object) this.shadow$getColor(); - } - - @SuppressWarnings("ConstantConditions") - @Override - public BossBar setColor(final BossBarColor color) { - this.color = (BossInfo.Color) (Object) checkNotNull(color, "color"); - return this; - } - - @SuppressWarnings("ConstantConditions") - @Override - public BossBarOverlay getOverlay() { - return (BossBarOverlay) (Object) this.shadow$getOverlay(); - } - - @SuppressWarnings("ConstantConditions") - @Override - public BossBar setOverlay(final BossBarOverlay overlay) { - this.overlay = (BossInfo.Overlay) (Object) checkNotNull(overlay, "overlay"); - return this; - } - - @Intrinsic - public boolean bar$shouldDarkenSky() { - return this.shadow$shouldDarkenSky(); - } - - @Override - public BossBar setDarkenSky(final boolean darkenSky) { - this.shadow$setDarkenSky(darkenSky); - return this; - } - - @Intrinsic - public boolean bar$shouldPlayEndBossMusic() { - return this.shadow$shouldPlayEndBossMusic(); - } - - @Override - public BossBar setPlayEndBossMusic(final boolean playEndBossMusic) { - this.shadow$setPlayEndBossMusic(playEndBossMusic); - return this; - } - - @Intrinsic - public boolean bar$shouldCreateFog() { - return this.shadow$shouldCreateFog(); - } - - @Override - public BossBar setCreateFog(final boolean createFog) { - this.shadow$setCreateFog(createFog); - return this; - } - -} diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/BossInfo_ColorMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/BossInfo_ColorMixin_API.java deleted file mode 100644 index 2f088de611f..00000000000 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/BossInfo_ColorMixin_API.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.api.mcp.world; - -import net.minecraft.util.text.TextFormatting; -import net.minecraft.world.BossInfo; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.boss.BossBarColor; -import org.spongepowered.api.text.format.TextColor; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.common.text.format.SpongeTextColor; -import org.spongepowered.plugin.PluginContainer; - -@Mixin(BossInfo.Color.class) -public abstract class BossInfo_ColorMixin_API implements BossBarColor { - - @Shadow public abstract String shadow$getName(); - @Shadow public abstract TextFormatting shadow$getFormatting(); - - private ResourceKey api$key; - private SpongeTextColor api$color; - - @Inject(method = "", at = @At("RETURN")) - private void api$setKeyAndColor(String enumName, int ordinal, String name, TextFormatting formatting, CallbackInfo ci) { - this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), this.shadow$getName().toLowerCase()); - this.api$color = SpongeTextColor.of(this.shadow$getFormatting()); - } - - @Override - public ResourceKey getKey() { - return this.api$key; - } - - @Override - public TextColor getColor() { - return this.api$color; - } -} diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/BossInfo_OverlayMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/BossInfo_OverlayMixin_API.java deleted file mode 100644 index f6a7af2315f..00000000000 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/BossInfo_OverlayMixin_API.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.api.mcp.world; - -import net.minecraft.world.BossInfo; -import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.boss.BossBarOverlay; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.plugin.PluginContainer; - -@Mixin(BossInfo.Overlay.class) -public abstract class BossInfo_OverlayMixin_API implements BossBarOverlay { - - private ResourceKey api$key; - - @Inject(method = "", at = @At("RETURN")) - private void api$setKey(String enumName, int ordinal, String name, CallbackInfo ci) { - this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), name.toLowerCase()); - } - - @Override - public ResourceKey getKey() { - return this.api$key; - } -} diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/DifficultyMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/DifficultyMixin_API.java index edf0ee47a2f..3054cac77aa 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/DifficultyMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/DifficultyMixin_API.java @@ -24,8 +24,9 @@ */ package org.spongepowered.common.mixin.api.mcp.world; +import net.kyori.adventure.text.Component; +import net.minecraft.util.text.ITextComponent; import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.api.world.difficulty.Difficulty; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -33,22 +34,18 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.common.text.translation.SpongeTranslation; -import org.spongepowered.plugin.PluginContainer; +import org.spongepowered.common.adventure.SpongeAdventure; @Mixin(net.minecraft.world.Difficulty.class) public abstract class DifficultyMixin_API implements Difficulty { - @Shadow public abstract String shadow$getTranslationKey(); + @Shadow public abstract ITextComponent shadow$getDisplayName(); private ResourceKey api$key; - private SpongeTranslation api$translation; @Inject(method = "", at = @At("RETURN")) private void api$setKeyAndTranslation(String enumName, int ordinal, int id, String name, CallbackInfo ci) { this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), name.toLowerCase()); - this.api$translation = new SpongeTranslation(this.shadow$getTranslationKey()); } @Override @@ -57,7 +54,7 @@ public ResourceKey getKey() { } @Override - public Translation getTranslation() { - return this.api$translation; + public Component asComponent() { + return SpongeAdventure.asAdventure(this.shadow$getDisplayName()); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/GameTypeMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/GameTypeMixin_API.java index c74e73aa677..8d62f2625fa 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/GameTypeMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/GameTypeMixin_API.java @@ -25,20 +25,15 @@ package org.spongepowered.common.mixin.api.mcp.world; import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.GameType; import org.spongepowered.api.ResourceKey; import org.spongepowered.api.entity.living.player.gamemode.GameMode; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; -import org.spongepowered.common.SpongeImplHooks; -import org.spongepowered.common.text.translation.SpongeTranslation; -import org.spongepowered.plugin.PluginContainer; @Mixin(GameType.class) public abstract class GameTypeMixin_API implements GameMode { @@ -46,21 +41,14 @@ public abstract class GameTypeMixin_API implements GameMode { @Shadow public abstract ITextComponent shadow$getDisplayName(); private ResourceKey api$key; - private SpongeTranslation api$translation; @Inject(method = "", at = @At("RETURN")) private void api$setKeyAndTranslation(String enumName, int ordinal, int gameTypeId, String gameTypeName, CallbackInfo ci) { this.api$key = ResourceKey.of(SpongeCommon.getActivePlugin(), gameTypeName.isEmpty() ? "not_set" : gameTypeName.toLowerCase()); - this.api$translation = new SpongeTranslation((TranslationTextComponent) this.shadow$getDisplayName()); } @Override public ResourceKey getKey() { return this.api$key; } - - @Override - public Translation getTranslation() { - return this.api$translation; - } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/ServerBossInfoMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/ServerBossInfoMixin_API.java deleted file mode 100644 index 36e99869435..00000000000 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/ServerBossInfoMixin_API.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * This file is part of Sponge, licensed under the MIT License (MIT). - * - * Copyright (c) SpongePowered - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.spongepowered.common.mixin.api.mcp.world; - -import org.spongepowered.api.boss.BossBarColor; -import org.spongepowered.api.boss.BossBarOverlay; -import org.spongepowered.api.boss.ServerBossBar; -import org.spongepowered.api.entity.living.player.Player; -import org.spongepowered.api.entity.living.player.server.ServerPlayer; -import org.spongepowered.api.text.Text; -import org.spongepowered.asm.mixin.Implements; -import org.spongepowered.asm.mixin.Interface; -import org.spongepowered.asm.mixin.Intrinsic; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.Collection; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.network.play.server.SUpdateBossInfoPacket; -import net.minecraft.world.ServerBossInfo; - -@Implements(@Interface(iface = ServerBossBar.class, prefix = "sbar$")) -@Mixin(ServerBossInfo.class) -public abstract class ServerBossInfoMixin_API extends BossInfoMixin_API implements ServerBossBar { - - @Shadow private boolean visible; - @Shadow public abstract void shadow$addPlayer(ServerPlayerEntity player); - @Shadow public abstract void shadow$removePlayer(ServerPlayerEntity player); - @Shadow public abstract void shadow$setVisible(boolean visibleIn); - @Shadow public abstract Collection shadow$getPlayers(); - @Shadow private void shadow$sendUpdate(final SUpdateBossInfoPacket.Operation operation) { } - - @Override - public ServerBossBar setName(final Text name) { - if (this.name != name) { - super.setName(name); - this.shadow$sendUpdate(SUpdateBossInfoPacket.Operation.UPDATE_NAME); - } - - return this; - } - - @Override - public ServerBossBar setPercent(final float percent) { - if (this.percent != percent) { - super.setPercent(percent); - this.shadow$sendUpdate(SUpdateBossInfoPacket.Operation.UPDATE_PCT); - } - - return this; - } - - @SuppressWarnings("RedundantCast") - @Override - public ServerBossBar setColor(final BossBarColor color) { - if ((Object) this.color != color) { - super.setColor(color); - this.shadow$sendUpdate(SUpdateBossInfoPacket.Operation.UPDATE_STYLE); - } - - return (ServerBossBar) this; - } - - @SuppressWarnings("RedundantCast") - @Override - public ServerBossBar setOverlay(final BossBarOverlay overlay) { - if ((Object) this.overlay != overlay) { - super.setOverlay(overlay); - this.shadow$sendUpdate(SUpdateBossInfoPacket.Operation.UPDATE_STYLE); - } - - return (ServerBossBar) this; - } - - @Override - public ServerBossBar setDarkenSky(final boolean darkenSky) { - super.setDarkenSky(darkenSky); - return this; - } - - @Override - public ServerBossBar setPlayEndBossMusic(final boolean playEndBossMusic) { - super.setPlayEndBossMusic(playEndBossMusic); - return this; - } - - @Override - public ServerBossBar setCreateFog(final boolean createFog) { - this.shadow$setCreateFog(createFog); - return this; - } - - @Intrinsic - @SuppressWarnings("unchecked") - public Collection sbar$getPlayers() { - return (Collection) (Object) this.shadow$getPlayers(); - } - - @Override - public ServerBossBar addPlayer(final ServerPlayer player) { - this.shadow$addPlayer((ServerPlayerEntity) player); - return this; - } - - @Override - public ServerBossBar removePlayer(final ServerPlayer player) { - this.shadow$removePlayer((ServerPlayerEntity) player); - return this; - } - - @Override - public boolean isVisible() { - return this.visible; - } - - @Override - public ServerBossBar setVisible(final boolean visible) { - this.shadow$setVisible(visible); - return this; - } - -} diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/WorldMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/WorldMixin_API.java index f1131b21ff9..4118fac96b6 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/WorldMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/WorldMixin_API.java @@ -25,13 +25,13 @@ package org.spongepowered.common.mixin.api.mcp.world; import com.google.common.base.Preconditions; +import net.kyori.adventure.sound.Sound; import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.play.server.SChangeBlockPacket; import net.minecraft.network.play.server.SPlaySoundPacket; -import net.minecraft.network.play.server.SStopSoundPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; @@ -39,6 +39,7 @@ import net.minecraft.util.SoundEvent; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.util.registry.Registry; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.GameType; @@ -58,12 +59,9 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.block.BlockSnapshot; import org.spongepowered.api.effect.particle.ParticleEffect; -import org.spongepowered.api.effect.sound.SoundType; import org.spongepowered.api.effect.sound.music.MusicDisc; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.service.context.Context; -import org.spongepowered.api.text.BookView; -import org.spongepowered.api.text.title.Title; import org.spongepowered.api.util.TemporalUnits; import org.spongepowered.api.world.BlockChangeFlag; import org.spongepowered.api.world.BlockChangeFlags; @@ -77,15 +75,14 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.common.accessor.network.play.server.SChangeBlockPacketAccessor; import org.spongepowered.common.accessor.world.server.ChunkManagerAccessor; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.block.SpongeBlockSnapshotBuilder; import org.spongepowered.common.bridge.world.ServerWorldBridge; import org.spongepowered.common.bridge.world.chunk.ChunkBridge; import org.spongepowered.common.effect.particle.SpongeParticleHelper; import org.spongepowered.common.effect.record.SpongeRecordType; import org.spongepowered.common.event.tracking.TrackingUtil; -import org.spongepowered.common.util.BookUtil; import org.spongepowered.common.util.Constants; -import org.spongepowered.common.util.VecHelper; import org.spongepowered.common.world.storage.SpongeChunkLayout; import org.spongepowered.math.vector.Vector3d; import org.spongepowered.math.vector.Vector3i; @@ -338,101 +335,28 @@ public void spawnParticles(final ParticleEffect particleEffect, final Vector3d p this.shadow$getDimension().getType(), this.shadow$getServer().getPlayerList()); } - @Override - public void playSound(final SoundType sound, final org.spongepowered.api.effect.sound.SoundCategory category, final Vector3d position, final double volume, final double pitch, final double minVolume) { - // Check if the event is registered (ie has an integer ID) - final ResourceLocation soundKey = (ResourceLocation) (Object) sound.getKey(); - final Optional event = Registry.SOUND_EVENT.getValue(soundKey); - final SoundCategory soundCategory = (SoundCategory) (Object) category; - final float soundVolume = (float) Math.max(minVolume, volume); - if (event.isPresent()) { - this.shadow$playSound(null, position.getX(), position.getY(), position.getZ(), event.get(), soundCategory, soundVolume, (float) pitch); - } else { - // Otherwise send it as a custom sound - final double radius = volume > 1.0F ? (16.0F * volume) : 16.0D; - final SPlaySoundPacket packet = new SPlaySoundPacket(soundKey, soundCategory, VecHelper.toVec3d(position), soundVolume, (float) pitch); - this.shadow$getServer().getPlayerList().sendToAllNearExcept(null, position.getX(), position.getY(), position.getZ(), radius, - this.shadow$getDimension().getType(), packet); - } - } - - private void api$stopSounds(@Nullable final SoundType sound, final org.spongepowered.api.effect.sound.SoundCategory category) { - this.shadow$getServer().getPlayerList().sendPacketToAllPlayersInDimension(new SStopSoundPacket((ResourceLocation) (Object) sound.getKey(), (net.minecraft.util.SoundCategory) (Object) category), this.shadow$getDimension().getType()); - } - - @Override - public void stopSounds() { - this.api$stopSounds(null, null); - } - - @Override - public void stopSounds(final SoundType sound) { - this.api$stopSounds(Preconditions.checkNotNull(sound, "sound"), null); - } - - @Override - public void stopSoundTypes(final Supplier sound) { - this.stopSounds(sound.get()); - } - - @Override - public void stopSounds(final org.spongepowered.api.effect.sound.SoundCategory category) { - this.api$stopSounds(null, Preconditions.checkNotNull(category, "category")); - } - - @Override - public void stopSoundCategoriess(final Supplier category) { - this.stopSounds(category.get()); - } - - @Override - public void stopSounds(final SoundType sound, final org.spongepowered.api.effect.sound.SoundCategory category) { - this.api$stopSounds(Preconditions.checkNotNull(sound, "sound"), Preconditions.checkNotNull(category, "category")); - } - - @Override - public void stopSounds(final Supplier sound, final Supplier category) { - this.stopSounds(sound.get(), category.get()); - } - private void api$playRecord(final Vector3i position, @javax.annotation.Nullable final MusicDisc recordType) { this.shadow$getServer().getPlayerList().sendPacketToAllPlayersInDimension( SpongeRecordType.createPacket(position, recordType), this.shadow$getDimension().getType()); } @Override - public void playMusicDisc(final Vector3i position, final MusicDisc musicDiscType) { + public void playMusicDisc(Vector3i position, MusicDisc musicDiscType) { this.api$playRecord(position, Preconditions.checkNotNull(musicDiscType, "recordType")); } @Override - public void playMusicDisc(final Vector3i position, final Supplier musicDiscType) { + public void playMusicDisc(Vector3i position, Supplier musicDiscType) { this.playMusicDisc(position, musicDiscType.get()); } @Override - public void stopMusicDisc(final Vector3i position) { + public void stopMusicDisc(Vector3i position) { this.api$playRecord(position, null); } @Override - public void sendTitle(final Title title) { - Preconditions.checkNotNull(title, "title"); - - for (final Player player : this.getPlayers()) { - player.sendTitle(title); - } - } - - @Override - public void sendBookView(final BookView bookView) { - Preconditions.checkNotNull(bookView, "bookview"); - - BookUtil.fakeBookView(bookView, this.getPlayers()); - } - - @Override - public void sendBlockChange(final int x, final int y, final int z, final org.spongepowered.api.block.BlockState state) { + public void sendBlockChange(int x, int y, int z, org.spongepowered.api.block.BlockState state) { Preconditions.checkNotNull(state, "state"); final SChangeBlockPacket packet = new SChangeBlockPacket(); ((SChangeBlockPacketAccessor) packet).accessor$setPos(new BlockPos(x, y, z)); @@ -445,8 +369,8 @@ public void sendBlockChange(final int x, final int y, final int z, final org.spo } @Override - public void resetBlockChange(final int x, final int y, final int z) { - final SChangeBlockPacket packet = new SChangeBlockPacket((IWorldReader) this, new BlockPos(x, y, z)); + public void resetBlockChange(int x, int y, int z) { + SChangeBlockPacket packet = new SChangeBlockPacket((IWorldReader) this, new BlockPos(x, y, z)); ((net.minecraft.world.World) (Object) this).getPlayers().stream() .filter(ServerPlayerEntity.class::isInstance) @@ -455,4 +379,24 @@ public void resetBlockChange(final int x, final int y, final int z) { } // ArchetypeVolumeCreator + + // Audience + + @Override + public void playSound(final Sound sound, final double x, final double y, final double z) { + // Check if the event is registered (ie has an integer ID) + final ResourceLocation soundKey = SpongeAdventure.asVanilla(sound.name()); + final Optional event = Registry.SOUND_EVENT.getValue(soundKey); + final SoundCategory soundCategory = SpongeAdventure.asVanilla(sound.source()); + if (event.isPresent()) { + this.shadow$playSound(null,x, y, z, event.get(), soundCategory, sound.volume(), sound.pitch()); + } else { + // Otherwise send it as a custom sound + final float volume = sound.volume(); + final double radius = volume > 1.0f ? (16.0f * volume) : 16.0d; + final SPlaySoundPacket packet = new SPlaySoundPacket(soundKey, soundCategory, new Vec3d(x, y, z), volume, sound.pitch()); + this.shadow$getServer().getPlayerList().sendToAllNearExcept(null, x, y, z, radius, + this.shadow$getDimension().getType(), packet); + } + } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/raid/RaidMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/raid/RaidMixin_API.java index be04658bfe2..fee4ade5722 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/raid/RaidMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/raid/RaidMixin_API.java @@ -24,11 +24,11 @@ */ package org.spongepowered.common.mixin.api.mcp.world.raid; +import net.kyori.adventure.bossbar.BossBar; import net.minecraft.entity.monster.AbstractRaiderEntity; import net.minecraft.world.ServerBossInfo; import net.minecraft.world.World; import net.minecraft.world.raid.Raid; -import org.spongepowered.api.boss.ServerBossBar; import org.spongepowered.api.data.type.RaidStatus; import org.spongepowered.api.raid.RaidWave; import org.spongepowered.api.world.server.ServerWorld; @@ -36,6 +36,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.world.raid.RaidBridge; import java.util.ArrayList; @@ -63,14 +64,14 @@ public ServerWorld getWorld() { } @Override - public ServerBossBar getBossBar() { - return (ServerBossBar) this.bossInfo; + public BossBar getBossBar() { + return SpongeAdventure.asAdventure(this.bossInfo); } @Override - public void setBossBar(ServerBossBar bossBar) { + public void setBossBar(BossBar bossBar) { checkNotNull(bossBar, "BossBar cannot be null."); - this.bossInfo = (ServerBossInfo) bossBar; + this.bossInfo = SpongeAdventure.asVanillaServer(bossBar); } @Override diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/storage/WorldInfoMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/storage/WorldInfoMixin_API.java index cf240b3e798..aa261e50bb1 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/storage/WorldInfoMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/mcp/world/storage/WorldInfoMixin_API.java @@ -27,6 +27,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.gson.JsonParseException; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.key.KeyedValue; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.math.BlockPos; import net.minecraft.world.Difficulty; @@ -35,7 +37,6 @@ import net.minecraft.world.WorldType; import net.minecraft.world.storage.WorldInfo; import org.checkerframework.checker.nullness.qual.Nullable; -import org.spongepowered.api.boss.BossBar; import org.spongepowered.api.data.persistence.DataContainer; import org.spongepowered.api.data.persistence.DataFormats; import org.spongepowered.api.entity.living.player.gamemode.GameMode; @@ -373,13 +374,13 @@ public void setWanderingTrader(@Nullable WanderingTrader trader) { } @Override - public List getCustomBossBars() { + public List> getCustomBossBars() { // TODO 1.14 - Fetch the boss bars if a live world instance, return dummies if they aren't? return null; } @Override - public void setCustomBossBars(@Nullable List bars) { + public void setCustomBossBars(@Nullable List> bars) { } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/service/permission/SubjectMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/service/permission/SubjectMixin_API.java index 111d44ab3b1..6be3c9781dc 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/service/permission/SubjectMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/service/permission/SubjectMixin_API.java @@ -27,7 +27,6 @@ import net.minecraft.entity.item.minecart.MinecartCommandBlockEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.rcon.RConConsoleSource; -import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.CommandBlockTileEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.common.service.permission.SpongeBridgeSubject; @@ -36,7 +35,7 @@ * Mixin to provide a common implementation of subject that refers to the * installed permissions service for a subject. */ -@Mixin(value = {ServerPlayerEntity.class, CommandBlockTileEntity.class, MinecartCommandBlockEntity.class, MinecraftServer.class, RConConsoleSource.class}, +@Mixin(value = {ServerPlayerEntity.class, CommandBlockTileEntity.class, MinecartCommandBlockEntity.class, RConConsoleSource.class}, targets = {"net/minecraft/tileentity/SignTileEntity$1", "net/minecraft/tileentity/SignTileEntity$2"}) public abstract class SubjectMixin_API implements SpongeBridgeSubject { } diff --git a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/LiteralTextMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/adventure/bossbar/BossBarImplMixin.java similarity index 55% rename from invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/LiteralTextMixin.java rename to src/mixins/java/org/spongepowered/common/mixin/core/adventure/bossbar/BossBarImplMixin.java index 5355874fe80..f3496890902 100644 --- a/invalid/main/java/org/spongepowered/common/mixin/invalid/core/api/text/LiteralTextMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/adventure/bossbar/BossBarImplMixin.java @@ -22,23 +22,27 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.mixin.invalid.core.api.text; +package org.spongepowered.common.mixin.core.adventure.bossbar; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import org.spongepowered.api.text.LiteralText; -import org.spongepowered.asm.mixin.Final; +import net.kyori.adventure.bossbar.BossBar; +import net.minecraft.world.ServerBossInfo; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.common.adventure.SpongeAdventure; +import org.spongepowered.common.bridge.adventure.BossBarBridge; +import org.spongepowered.common.bridge.world.BossInfoBridge; -@Mixin(value = LiteralText.class, remap = false) -public abstract class LiteralTextMixin extends TextMixin { - - @Shadow @Final String content; +@Mixin(targets = "net.kyori.adventure.bossbar.BossBarImpl") +public class BossBarImplMixin implements BossBarBridge { + private ServerBossInfo bridge$vanillaServerBar; @Override - protected TextComponent createComponent() { - return new StringTextComponent(this.content); + public ServerBossInfo bridge$asVanillaServerBar() { + if (this.bridge$vanillaServerBar == null) { + final BossBar $this = (BossBar) this; + this.bridge$vanillaServerBar = new ServerBossInfo(SpongeAdventure.asVanilla($this.name()), SpongeAdventure.asVanilla($this.color()), SpongeAdventure.asVanilla($this.overlay())); + final BossInfoBridge bridge = (BossInfoBridge) this.bridge$vanillaServerBar; + bridge.bridge$copyAndAssign($this); + } + return this.bridge$vanillaServerBar; } - } diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/adventure/text/AbstractComponentMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/adventure/text/AbstractComponentMixin.java new file mode 100644 index 00000000000..db69348aaae --- /dev/null +++ b/src/mixins/java/org/spongepowered/common/mixin/core/adventure/text/AbstractComponentMixin.java @@ -0,0 +1,101 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.spongepowered.common.mixin.core.adventure.text; + +import net.kyori.adventure.text.AbstractComponent; +import net.kyori.adventure.text.BlockNBTComponent; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.EntityNBTComponent; +import net.kyori.adventure.text.KeybindComponent; +import net.kyori.adventure.text.NBTComponent; +import net.kyori.adventure.text.ScoreComponent; +import net.kyori.adventure.text.SelectorComponent; +import net.kyori.adventure.text.StorageNBTComponent; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.TranslatableComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.KeybindTextComponent; +import net.minecraft.util.text.NBTTextComponent; +import net.minecraft.util.text.ScoreTextComponent; +import net.minecraft.util.text.SelectorTextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.common.adventure.SpongeAdventure; +import org.spongepowered.common.bridge.adventure.ComponentBridge; +import org.spongepowered.common.bridge.adventure.StyleBridge; + +import java.util.ArrayList; +import java.util.List; + +@Mixin(AbstractComponent.class) +public class AbstractComponentMixin implements ComponentBridge { + private ITextComponent bridge$vanillaComponent; + + @Override + @SuppressWarnings("ConstantConditions") + public ITextComponent bridge$asVanillaComponent() { + // TODO(adventure): in 1.16 evaluate using an ITextComponent wrapper as a first stage for conversion + if (this.bridge$vanillaComponent == null) { + if (this instanceof TextComponent) { + this.bridge$vanillaComponent = new StringTextComponent(((TextComponent) this).content()); + } else if (this instanceof TranslatableComponent) { + final TranslatableComponent $this = (TranslatableComponent) this; + final List with = new ArrayList<>($this.args().size()); + for (final Component arg : $this.args()) { + with.add(SpongeAdventure.asVanilla(arg)); + } + this.bridge$vanillaComponent = new TranslationTextComponent($this.key(), with.toArray(new Object[0])); + } else if (this instanceof KeybindComponent) { + this.bridge$vanillaComponent = new KeybindTextComponent(((KeybindComponent) this).keybind()); + } else if (this instanceof ScoreComponent) { + final ScoreComponent $this = (ScoreComponent) this; + this.bridge$vanillaComponent = new ScoreTextComponent($this.name(), $this.objective()); + ((ScoreTextComponent) this.bridge$vanillaComponent).setValue($this.value()); + } else if (this instanceof SelectorComponent) { + this.bridge$vanillaComponent = new SelectorTextComponent(((SelectorComponent) this).pattern()); + } else if (this instanceof NBTComponent) { + if (this instanceof BlockNBTComponent) { + final BlockNBTComponent $this = (BlockNBTComponent) this; + this.bridge$vanillaComponent = new NBTTextComponent.Block( + $this.pos().asString(), + $this.interpret(), + $this.nbtPath() + ); + } else if (this instanceof EntityNBTComponent) { + final EntityNBTComponent $this = (EntityNBTComponent) this; + this.bridge$vanillaComponent = new NBTTextComponent.Entity($this.selector(), $this.interpret(), $this.nbtPath()); + } else if (this instanceof StorageNBTComponent) { + // TODO(adventure) 1.16 + } + } + for (final Component child : ((Component) this).children()) { + this.bridge$vanillaComponent.appendSibling(SpongeAdventure.asVanilla(child)); + } + this.bridge$vanillaComponent.setStyle(((StyleBridge) (Object) ((Component) this).style()).bridge$asVanilla()); + } + return this.bridge$vanillaComponent; + } +} diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/adventure/text/format/StyleMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/adventure/text/format/StyleMixin.java new file mode 100644 index 00000000000..ea3245dcb78 --- /dev/null +++ b/src/mixins/java/org/spongepowered/common/mixin/core/adventure/text/format/StyleMixin.java @@ -0,0 +1,98 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.spongepowered.common.mixin.core.adventure.text.format; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.format.TextDecoration; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.common.adventure.NbtLegacyHoverEventSerializer; +import org.spongepowered.common.adventure.SpongeAdventure; +import org.spongepowered.common.bridge.adventure.StyleBridge; + +import static org.spongepowered.common.adventure.SpongeAdventure.asVanilla; + +import java.io.IOException; + +@Mixin(net.kyori.adventure.text.format.Style.class) +public class StyleMixin implements StyleBridge { + private Style bridge$vanilla; + + @Override + @SuppressWarnings("ConstantConditions") + public Style bridge$asVanilla() { + if ((Object) this == net.kyori.adventure.text.format.Style.empty()) { + return new Style(); + } + + if (this.bridge$vanilla == null) { + final net.kyori.adventure.text.format.Style $this = (net.kyori.adventure.text.format.Style) (Object) this; + this.bridge$vanilla = new Style(); + // font + // TODO(adventure): 1.16 + // color + final TextColor color = $this.color(); + this.bridge$vanilla.setColor(color == null ? null : asVanilla(NamedTextColor.nearestTo(color))); + // decorations + this.bridge$vanilla.setObfuscated(SpongeAdventure.asVanilla($this.decoration(TextDecoration.OBFUSCATED))); + this.bridge$vanilla.setBold(SpongeAdventure.asVanilla($this.decoration(TextDecoration.BOLD))); + this.bridge$vanilla.setStrikethrough(SpongeAdventure.asVanilla($this.decoration(TextDecoration.STRIKETHROUGH))); + this.bridge$vanilla.setUnderlined(SpongeAdventure.asVanilla($this.decoration(TextDecoration.UNDERLINED))); + this.bridge$vanilla.setItalic(SpongeAdventure.asVanilla($this.decoration(TextDecoration.ITALIC))); + // events + final net.kyori.adventure.text.event.HoverEvent hoverEvent = $this.hoverEvent(); + if (hoverEvent != null) { + final Object oldValue = hoverEvent.value(); + final ITextComponent value; + if (oldValue instanceof Component) { + value = SpongeAdventure.asVanilla((Component) oldValue); + } else if (oldValue instanceof net.kyori.adventure.text.event.HoverEvent.ShowItem) { + try { + value = SpongeAdventure.asVanilla(NbtLegacyHoverEventSerializer.INSTANCE.serializeShowItem((net.kyori.adventure.text.event.HoverEvent.ShowItem) oldValue)); + } catch (IOException e) { + throw new IllegalArgumentException(); + } + } else if (oldValue instanceof net.kyori.adventure.text.event.HoverEvent.ShowEntity) { + value = SpongeAdventure.asVanilla(NbtLegacyHoverEventSerializer.INSTANCE.serializeShowEntity((net.kyori.adventure.text.event.HoverEvent.ShowEntity) oldValue, SpongeAdventure.GSON::serialize)); + } else { + throw new IllegalArgumentException(); + } + this.bridge$vanilla.setHoverEvent(new HoverEvent(SpongeAdventure.asVanilla(hoverEvent.action()), value)); + } + final net.kyori.adventure.text.event.ClickEvent clickEvent = $this.clickEvent(); + if (clickEvent != null) { + this.bridge$vanilla.setClickEvent(new ClickEvent(SpongeAdventure.asVanilla(clickEvent.action()), clickEvent.value())); + } + // insertion + this.bridge$vanilla.setInsertion($this.insertion()); + } + return this.bridge$vanilla; + } +} diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/entity/EntityMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/entity/EntityMixin.java index 36762b3385e..b188c6b8003 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/entity/EntityMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/entity/EntityMixin.java @@ -24,6 +24,7 @@ */ package org.spongepowered.common.mixin.core.entity; +import net.kyori.adventure.text.Component; import net.minecraft.command.CommandSource; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; @@ -41,7 +42,6 @@ import org.spongepowered.api.event.cause.Cause; import org.spongepowered.api.event.cause.entity.dismount.DismountTypes; import org.spongepowered.api.event.entity.IgniteEntityEvent; -import org.spongepowered.api.text.Text; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -116,7 +116,7 @@ public abstract class EntityMixin implements EntityBridge, TrackableBridge, Vani @Shadow public abstract CommandSource shadow$getCommandSource(); private boolean impl$isConstructing = true; - @Nullable private Text impl$displayName; + @Nullable private Component impl$displayName; @Nullable private BlockPos impl$lastCollidedBlockPos; private boolean impl$trackedInWorld = false; private boolean vanish$collision = false; @@ -620,21 +620,21 @@ public void stopRiding() { @Nullable @Override - public Text bridge$getDisplayNameText() { + public Component bridge$getDisplayNameText() { return this.impl$displayName; } @Override public void bridge$setDisplayName( @Nullable - final Text displayName) { + final Component displayName) { this.impl$displayName = displayName; this.impl$skipSettingCustomNameTag = true; if (this.impl$displayName == null) { this.shadow$setCustomName(null); } else { - this.shadow$setCustomName(SpongeTexts.toComponent(this.impl$displayName)); + this.shadow$setCustomName(SpongeAdventure.vanilla(this.impl$displayName)); } this.impl$skipSettingCustomNameTag = false; @@ -644,7 +644,7 @@ public void stopRiding() { at = @At("RETURN")) private void impl$UpdatedisplayNameText(final ITextComponent name, final CallbackInfo ci) { if (!this.impl$skipSettingCustomNameTag) { - this.impl$displayName = SpongeTexts.toText(name); + this.impl$displayName = SpongeAdventure.adventure(name); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/entity/player/ChatVisibilityMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/entity/player/ChatVisibilityMixin.java index 012190a87fe..92726292f72 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/entity/player/ChatVisibilityMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/entity/player/ChatVisibilityMixin.java @@ -24,8 +24,8 @@ */ package org.spongepowered.common.mixin.core.entity.player; +import net.kyori.adventure.audience.MessageType; import net.minecraft.entity.player.ChatVisibility; -import org.spongepowered.api.text.chat.ChatType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.common.bridge.entity.player.ChatVisibilityBridge; @@ -35,15 +35,15 @@ @Mixin(ChatVisibility.class) public abstract class ChatVisibilityMixin implements ChatVisibilityBridge { - private Set impl$visibleChatTypes = new HashSet<>(); + private Set impl$visibleChatTypes = new HashSet<>(); @Override - public void bridge$setChatTypes(final Set chatTypes) { - this.impl$visibleChatTypes = chatTypes; + public void bridge$setChatTypes(final Set types) { + this.impl$visibleChatTypes = types; } @Override - public Set bridge$getVisibleChatTypes() { + public Set bridge$getVisibleChatTypes() { return this.impl$visibleChatTypes; } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/entity/player/PlayerEntityMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/entity/player/PlayerEntityMixin.java index bb42d3691f5..337f0a0b534 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/entity/player/PlayerEntityMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/entity/player/PlayerEntityMixin.java @@ -25,6 +25,7 @@ package org.spongepowered.common.mixin.core.entity.player; import com.mojang.authlib.GameProfile; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.minecraft.entity.Entity; import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.player.PlayerAbilities; @@ -75,8 +76,6 @@ import org.spongepowered.common.event.tracking.PhaseTracker; import org.spongepowered.common.item.util.ItemStackUtil; import org.spongepowered.common.mixin.core.entity.LivingEntityMixin; -import org.spongepowered.common.service.permission.SpongePermissions; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.text.serializer.LegacyTexts; import org.spongepowered.common.util.Constants; import org.spongepowered.common.util.VecHelper; @@ -117,7 +116,7 @@ public abstract class PlayerEntityMixin extends LivingEntityMixin implements Pla @Inject(method = "getDisplayName", at = @At("RETURN"), cancellable = true) private void impl$getDisplayNameWithParsing(final CallbackInfoReturnable ci) { - ci.setReturnValue(LegacyTexts.parseComponent((StringTextComponent) ci.getReturnValue(), SpongeTexts.COLOR_CHAR)); + ci.setReturnValue(LegacyTexts.parseComponent((StringTextComponent) ci.getReturnValue(), LegacyComponentSerializer.SECTION_CHAR)); } @Override diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/network/ServerStatusResponseMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/network/ServerStatusResponseMixin.java index 5c9dc2b316a..b7bd50e3619 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/network/ServerStatusResponseMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/network/ServerStatusResponseMixin.java @@ -24,20 +24,21 @@ */ package org.spongepowered.common.mixin.core.network; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.network.ServerStatusResponse; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import org.spongepowered.api.network.status.Favicon; -import org.spongepowered.api.text.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.network.ServerStatusResponseBridge; import org.spongepowered.common.network.status.SpongeFavicon; -import org.spongepowered.common.text.SpongeTexts; import java.io.IOException; @@ -49,7 +50,7 @@ public abstract class ServerStatusResponseMixin implements ServerStatusResponseB @Shadow @Nullable private ITextComponent description; @Shadow @Nullable private String favicon; - private Text impl$descriptionText = Text.of(); + private Component impl$descriptionText = TextComponent.empty(); @Nullable private ServerStatusResponse.Players impl$playerBackup; @Nullable private Favicon impl$faviconHandle; @@ -68,10 +69,10 @@ public abstract class ServerStatusResponseMixin implements ServerStatusResponseB public void setServerDescription(@Nullable final ITextComponent motd) { if (motd != null) { this.description = motd; - this.impl$descriptionText = SpongeTexts.toText(motd); + this.impl$descriptionText = SpongeAdventure.asAdventure(motd); } else { this.description = new StringTextComponent(""); - this.impl$descriptionText = Text.of(); + this.impl$descriptionText = TextComponent.empty(); } } @@ -97,13 +98,13 @@ public void setFavicon(@Nullable final String faviconBlob) { } @Override - public Text bridge$getDescription() { + public Component bridge$getDescription() { return this.impl$descriptionText; } @Override - public void bridge$setDescription(@Nullable final Text text) { - this.impl$descriptionText = text == null ? Text.of() : text; + public void bridge$setDescription(@Nullable final Component text) { + this.impl$descriptionText = text == null ? TextComponent.empty() : text; } @Override diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/network/login/ServerLoginNetHandlerMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/network/login/ServerLoginNetHandlerMixin.java index 7aaed02a369..998ae517ede 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/network/login/ServerLoginNetHandlerMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/network/login/ServerLoginNetHandlerMixin.java @@ -24,6 +24,8 @@ */ package org.spongepowered.common.mixin.core.network.login; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; import net.minecraft.network.NetworkManager; import net.minecraft.network.login.ServerLoginNetHandler; import net.minecraft.network.play.server.SDisconnectPacket; @@ -35,12 +37,8 @@ import org.spongepowered.api.event.SpongeEventFactory; import org.spongepowered.api.event.cause.Cause; import org.spongepowered.api.event.cause.EventContext; -import org.spongepowered.api.event.message.MessageEvent; import org.spongepowered.api.event.network.ServerSideConnectionEvent; -import org.spongepowered.api.network.RemoteConnection; import org.spongepowered.api.network.ServerSideConnection; -import org.spongepowered.api.profile.GameProfile; -import org.spongepowered.api.text.Text; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -49,8 +47,8 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.network.ServerLoginNetHandlerBridge; -import org.spongepowered.common.text.SpongeTexts; import java.net.SocketAddress; import java.util.Optional; @@ -83,10 +81,10 @@ public abstract class ServerLoginNetHandlerMixin implements ServerLoginNetHandle } } - private void impl$disconnectClient(final Optional disconnectMessage) { + private void impl$disconnectClient(final Optional disconnectMessage) { ITextComponent reason; if (disconnectMessage.isPresent()) { - reason = SpongeTexts.toComponent(disconnectMessage.get()); + reason = SpongeAdventure.asVanilla(disconnectMessage.get()); } else { reason = new TranslationTextComponent("disconnect.disconnected"); } @@ -95,12 +93,12 @@ public abstract class ServerLoginNetHandlerMixin implements ServerLoginNetHandle @Override public boolean bridge$fireAuthEvent() { - final Text disconnectMessage = Text.of("You are not allowed to log in to this server."); + final Component disconnectMessage = TextComponent.of("You are not allowed to log in to this server."); // Cause is created directly as we can't access the cause stack manager // from off the main thread final ServerSideConnectionEvent.Auth event = SpongeEventFactory.createServerSideConnectionEventAuth( - Cause.of(EventContext.empty(), this.loginGameProfile), (ServerSideConnection) this.networkManager, - new MessageEvent.MessageFormatter(disconnectMessage), false + Cause.of(EventContext.empty(), this.loginGameProfile), disconnectMessage, disconnectMessage, (ServerSideConnection) this.networkManager, + false ); SpongeCommon.postEvent(event); if (event.isCancelled()) { diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ScoreObjectiveMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ScoreObjectiveMixin.java index 78e2e20ddb6..2489ec12248 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ScoreObjectiveMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ScoreObjectiveMixin.java @@ -36,10 +36,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.scoreboard.ScoreObjectiveBridge; import org.spongepowered.common.bridge.scoreboard.ScoreboardBridge; import org.spongepowered.common.scoreboard.SpongeObjective; -import org.spongepowered.common.text.SpongeTexts; import javax.annotation.Nullable; @@ -73,7 +73,7 @@ private void onSetDisplayName(final ITextComponent name, final CallbackInfo ci) ci.cancel(); return; } - this.impl$spongeScoreboard.setDisplayName(SpongeTexts.toText(name)); + this.impl$spongeScoreboard.setDisplayName(SpongeAdventure.asAdventure(name)); ci.cancel(); } diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ScorePlayerTeamMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ScorePlayerTeamMixin.java index 0b1b60220cf..eb0f754caeb 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ScorePlayerTeamMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ScorePlayerTeamMixin.java @@ -24,6 +24,9 @@ */ package org.spongepowered.common.mixin.core.scoreboard; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.scoreboard.Scoreboard; @@ -33,10 +36,6 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.objectweb.asm.Opcodes; import org.spongepowered.api.Sponge; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.channel.MessageChannel; -import org.spongepowered.api.text.format.TextColor; -import org.spongepowered.api.text.format.TextColors; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -45,9 +44,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.scoreboard.ScorePlayerTeamBridge; -import org.spongepowered.common.text.SpongeTexts; -import org.spongepowered.common.text.format.SpongeTextColor; import java.util.Collection; import java.util.Optional; @@ -63,10 +61,10 @@ public abstract class ScorePlayerTeamMixin implements ScorePlayerTeamBridge { @Shadow private ITextComponent suffix; @Shadow public abstract Collection getMembershipCollection(); - @SuppressWarnings("NullableProblems") @MonotonicNonNull private Text bridge$displayName; - @SuppressWarnings("NullableProblems") @MonotonicNonNull private Text bridge$Prefix; - @SuppressWarnings("NullableProblems") @MonotonicNonNull private Text bridge$Suffix; - @SuppressWarnings("NullableProblems") @MonotonicNonNull private TextColor bridge$Color; + @SuppressWarnings("NullableProblems") @MonotonicNonNull private Component bridge$displayName; + @SuppressWarnings("NullableProblems") @MonotonicNonNull private Component bridge$Prefix; + @SuppressWarnings("NullableProblems") @MonotonicNonNull private Component bridge$Suffix; + @SuppressWarnings("NullableProblems") @MonotonicNonNull private NamedTextColor bridge$Color; // Minecraft doesn't do a null check on scoreboard, so we redirect // the call and do it ourselves. @@ -78,10 +76,10 @@ public abstract class ScorePlayerTeamMixin implements ScorePlayerTeamBridge { @Inject(method = "", at = @At("RETURN")) private void impl$setUpDisplayNames(final Scoreboard scoreboardIn, final String name, final CallbackInfo ci) { - this.bridge$displayName = SpongeTexts.fromLegacy(name); - this.bridge$Prefix = SpongeTexts.toText(this.prefix); - this.bridge$Suffix = SpongeTexts.toText(this.suffix); - this.bridge$Color = SpongeTextColor.of(this.color); + this.bridge$displayName = SpongeAdventure.legacySection(name); + this.bridge$Prefix = SpongeAdventure.asAdventure(this.prefix); + this.bridge$Suffix = SpongeAdventure.asAdventure(this.suffix); + this.bridge$Color = SpongeAdventure.asAdventureNamed(this.color); } @Redirect(method = "*", @@ -100,7 +98,7 @@ public abstract class ScorePlayerTeamMixin implements ScorePlayerTeamBridge { opcode = Opcodes.PUTFIELD, shift = At.Shift.AFTER)) private void impl$doTeamUpdateForDisplayName(final ITextComponent name, final CallbackInfo ci) { - this.bridge$displayName = SpongeTexts.toText(name); + this.bridge$displayName = SpongeAdventure.asAdventure(name); } @Inject(method = "setPrefix", @@ -110,7 +108,7 @@ public abstract class ScorePlayerTeamMixin implements ScorePlayerTeamBridge { opcode = Opcodes.PUTFIELD, shift = At.Shift.AFTER)) private void impl$doTeamUpdateForPrefix(final ITextComponent prefix, final CallbackInfo callbackInfo) { - this.bridge$Prefix = SpongeTexts.toText(prefix); + this.bridge$Prefix = SpongeAdventure.asAdventure(prefix); } @Inject(method = "setSuffix", @@ -121,78 +119,75 @@ public abstract class ScorePlayerTeamMixin implements ScorePlayerTeamBridge { shift = At.Shift.AFTER )) private void impl$doTeamUpdateForSuffix(final ITextComponent suffix, final CallbackInfo ci) { - this.bridge$Suffix = SpongeTexts.toText(suffix); + this.bridge$Suffix = SpongeAdventure.asAdventure(suffix); } @Inject(method = "setColor", at = @At("RETURN")) private void impl$doTeamUpdateForFormat(final TextFormatting format, final CallbackInfo ci) { - this.bridge$Color = SpongeTextColor.of(format); + this.bridge$Color = SpongeAdventure.asAdventureNamed(format); // This isn't called by Vanilla, so we inject the call ourselves. this.impl$doTeamUpdate(); } @Override - public Text bridge$getDisplayName() { + public Component bridge$getDisplayName() { return this.bridge$displayName; } @Override - public void bridge$setDisplayName(final Text text) { - final String newText = SpongeTexts.toLegacy(text); + public void bridge$setDisplayName(final Component text) { + final String newText = SpongeAdventure.legacySection(text); if (newText.length() > 32) { throw new IllegalArgumentException(String.format("Display name is %s characters long! It must be at most 32.", newText.length())); } this.bridge$displayName = text; - this.displayName = SpongeTexts.toComponent(text); + this.displayName = SpongeAdventure.asVanilla(text); this.impl$doTeamUpdate(); } @Override - public Text bridge$getPrefix() { + public Component bridge$getPrefix() { return this.bridge$Prefix; } @Override - public void bridge$setPrefix(final Text text) { - final String newPrefix = SpongeTexts.toLegacy(text); + public void bridge$setPrefix(final Component text) { + final String newPrefix = SpongeAdventure.legacySection(text); if (newPrefix.length() > 16) { throw new IllegalArgumentException(String.format("Prefix is %s characters long! It must be at most 16.", newPrefix.length())); } this.bridge$Prefix = text; - this.prefix = SpongeTexts.toComponent(text); + this.prefix = SpongeAdventure.asVanilla(text); this.impl$doTeamUpdate(); } @Override - public Text bridge$getSuffix() { + public Component bridge$getSuffix() { return this.bridge$Suffix; } @Override - public void bridge$setSuffix(final Text suffix) { - final String newSuffix = SpongeTexts.toLegacy(suffix); + public void bridge$setSuffix(final Component suffix) { + final String newSuffix = SpongeAdventure.legacySection(suffix); if (newSuffix.length() > 16) { throw new IllegalArgumentException(String.format("Suffix is %s characters long! It must be at most 16.", newSuffix.length())); } this.bridge$Suffix = suffix; - this.suffix = SpongeTexts.toComponent(suffix); + this.suffix = SpongeAdventure.asVanilla(suffix); this.impl$doTeamUpdate(); } @Override - public void bridge$setColor(TextColor color) { - if (color.equals(TextColors.NONE.get())) { - color = TextColors.RESET.get(); - } + public void bridge$setColor(NamedTextColor color) { this.bridge$Color = color; - this.color = SpongeTextColor.of(color); + this.color = SpongeAdventure.asVanilla(color); this.impl$doTeamUpdate(); } @SuppressWarnings("EqualsBetweenInconvertibleTypes") @Override - public MessageChannel bridge$getTeamChannel(final ServerPlayerEntity player) { - return MessageChannel.to(this.getMembershipCollection().stream() + public Audience bridge$getTeamChannel(final ServerPlayerEntity player) { + return Audience.of(this.getMembershipCollection().stream() .map(name -> Sponge.getGame().getServer().getPlayer(name)) .filter(Optional::isPresent) .map(Optional::get) @@ -201,8 +196,8 @@ public abstract class ScorePlayerTeamMixin implements ScorePlayerTeamBridge { } @Override - public MessageChannel bridge$getNonTeamChannel() { - return MessageChannel.to(Sponge.getGame().getServer().getOnlinePlayers().stream() + public Audience bridge$getNonTeamChannel() { + return Audience.of(Sponge.getGame().getServer().getOnlinePlayers().stream() .filter(player -> ((ServerPlayerEntity) player).getTeam() != (Object) this) .collect(Collectors.toSet())); } diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ServerScoreboardMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ServerScoreboardMixin.java index 2f4e586e804..775ba3a225b 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ServerScoreboardMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/ServerScoreboardMixin.java @@ -24,6 +24,7 @@ */ package org.spongepowered.common.mixin.core.scoreboard; +import net.kyori.adventure.text.Component; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.IPacket; import net.minecraft.network.play.server.SDisplayObjectivePacket; @@ -43,7 +44,6 @@ import org.spongepowered.api.scoreboard.displayslot.DisplaySlot; import org.spongepowered.api.scoreboard.objective.Objective; import org.spongepowered.api.scoreboard.objective.displaymode.ObjectiveDisplayMode; -import org.spongepowered.api.text.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @@ -53,12 +53,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.accessor.scoreboard.ScorePlayerTeamAccessor; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.scoreboard.ScoreObjectiveBridge; import org.spongepowered.common.bridge.scoreboard.ServerScoreboardBridge; import org.spongepowered.common.registry.MappedRegistry; import org.spongepowered.common.scoreboard.SpongeObjective; import org.spongepowered.common.scoreboard.SpongeScore; -import org.spongepowered.common.text.SpongeTexts; import org.spongepowered.common.util.Constants; import java.util.ArrayList; @@ -82,7 +82,7 @@ public abstract class ServerScoreboardMixin extends Scoreboard implements Server public ScoreObjective addObjective(final String name, final ScoreCriteria criteria, ITextComponent text, ScoreCriteria.RenderType type) { final SpongeObjective objective = new SpongeObjective(name, (Criterion) criteria); objective.setDisplayMode((ObjectiveDisplayMode) (Object) type); - objective.setDisplayName((Text) text); + objective.setDisplayName(SpongeAdventure.asAdventure(text)); ((org.spongepowered.api.scoreboard.Scoreboard) this).addObjective(objective); return objective.getObjectiveFor(this); } @@ -121,7 +121,7 @@ public void removeTeam(final ScorePlayerTeam team) { @Override public Score getOrCreateScore(final String name, final ScoreObjective objective) { - return ((SpongeScore) ((ScoreObjectiveBridge) objective).bridge$getSpongeObjective().getOrCreateScore(SpongeTexts.fromLegacy(name))) + return ((SpongeScore) ((ScoreObjectiveBridge) objective).bridge$getSpongeObjective().getOrCreateScore(SpongeAdventure.legacySection(name))) .getScoreFor(objective); } @@ -129,14 +129,14 @@ public Score getOrCreateScore(final String name, final ScoreObjective objective) public void removeObjectiveFromEntity(final String name, final ScoreObjective objective) { if (objective != null) { final SpongeObjective spongeObjective = ((ScoreObjectiveBridge) objective).bridge$getSpongeObjective(); - final Optional score = spongeObjective.getScore(SpongeTexts.fromLegacy(name)); + final Optional score = spongeObjective.getScore(SpongeAdventure.legacySection(name)); if (score.isPresent()) { spongeObjective.removeScore(score.get()); } else { SpongeCommon.getLogger().warn("Objective " + objective + " did have have the score " + name); } } else { - final Text textName = SpongeTexts.fromLegacy(name); + final Component textName = SpongeAdventure.legacySection(name); for (final ScoreObjective scoreObjective: this.getScoreObjectives()) { ((ScoreObjectiveBridge) scoreObjective).bridge$getSpongeObjective().removeScore(textName); } diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/TeamMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/TeamMixin.java index 478cda63160..6d28134360f 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/TeamMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/scoreboard/TeamMixin.java @@ -24,13 +24,13 @@ */ package org.spongepowered.common.mixin.core.scoreboard; +import net.kyori.adventure.text.format.NamedTextColor; import net.minecraft.scoreboard.Team; import net.minecraft.util.text.TextFormatting; -import org.spongepowered.api.text.format.TextColor; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.common.adventure.SpongeAdventure; import org.spongepowered.common.bridge.scoreboard.TeamBridge; -import org.spongepowered.common.text.format.SpongeTextColor; @Mixin(Team.class) public abstract class TeamMixin implements TeamBridge { @@ -38,7 +38,7 @@ public abstract class TeamMixin implements TeamBridge { @Shadow public abstract TextFormatting getColor(); @Override - public TextColor bridge$getColor() { - return SpongeTextColor.of(this.getColor()); + public NamedTextColor bridge$getColor() { + return SpongeAdventure.asAdventureNamed(this.getColor()); } } diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/server/CustomServerBossInfoMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/server/CustomServerBossInfoMixin.java new file mode 100644 index 00000000000..2fec2fcfff1 --- /dev/null +++ b/src/mixins/java/org/spongepowered/common/mixin/core/server/CustomServerBossInfoMixin.java @@ -0,0 +1,21 @@ +package org.spongepowered.common.mixin.core.server; + +import net.minecraft.server.CustomServerBossInfo; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.common.mixin.core.world.ServerBossInfoMixin; + +@Mixin(CustomServerBossInfo.class) +public abstract class CustomServerBossInfoMixin extends ServerBossInfoMixin { + @Shadow private int max; + + @Redirect(method = {"getValue", "write"}, + at = @At(value = "FIELD", target = "Lnet/minecraft/server/CustomServerBossInfo;value:I")) + private int valueRead(final CustomServerBossInfo $this) { + return (int) (this.bridge$asAdventure().percent() * this.max); + } + + // Value writes already update the percent field of superclasses, so we don't need to redirect +} diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/server/MinecraftServerMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/server/MinecraftServerMixin.java index 57c36e09de5..6fb80f02aba 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/server/MinecraftServerMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/server/MinecraftServerMixin.java @@ -36,8 +36,6 @@ import org.spongepowered.api.Server; import org.spongepowered.api.event.cause.Cause; import org.spongepowered.api.resourcepack.ResourcePack; -import org.spongepowered.api.service.permission.PermissionService; -import org.spongepowered.api.util.Tristate; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -48,7 +46,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.bridge.command.CommandSourceProviderBridge; -import org.spongepowered.common.bridge.permissions.SubjectBridge; import org.spongepowered.common.bridge.server.MinecraftServerBridge; import org.spongepowered.common.bridge.server.management.PlayerProfileCacheBridge; import org.spongepowered.common.entity.player.SpongeUser; @@ -62,7 +59,7 @@ import javax.annotation.Nullable; @Mixin(MinecraftServer.class) -public abstract class MinecraftServerMixin extends RecursiveEventLoop implements MinecraftServerBridge, SubjectBridge, +public abstract class MinecraftServerMixin extends RecursiveEventLoop implements MinecraftServerBridge, CommandSourceProviderBridge { @Shadow @Final private static Logger LOGGER; @@ -91,16 +88,6 @@ public MinecraftServerMixin(final String name) { } } - @Override - public String bridge$getSubjectCollectionIdentifier() { - return PermissionService.SUBJECTS_SYSTEM; - } - - @Override - public Tristate bridge$permDefault(final String permission) { - return Tristate.TRUE; - } - // /** diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/service/permission/SubjectMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/service/permission/SubjectMixin.java index 22e1762b260..3aa2edfc36b 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/service/permission/SubjectMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/service/permission/SubjectMixin.java @@ -27,7 +27,6 @@ import net.minecraft.entity.item.minecart.MinecartCommandBlockEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.rcon.RConConsoleSource; -import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.CommandBlockTileEntity; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.api.service.permission.Subject; @@ -47,7 +46,7 @@ * Mixin to provide a common implementation of subject that refers to the * installed permissions service for a subject. */ -@Mixin(value = {ServerPlayerEntity.class, CommandBlockTileEntity.class, MinecartCommandBlockEntity.class, MinecraftServer.class, RConConsoleSource.class}, targets = {"net/minecraft/tileentity/SignTileEntity$1", "net/minecraft/tileentity/SignTileEntity$2"}) +@Mixin(value = {ServerPlayerEntity.class, CommandBlockTileEntity.class, MinecartCommandBlockEntity.class, RConConsoleSource.class}, targets = {"net/minecraft/tileentity/SignTileEntity$1", "net/minecraft/tileentity/SignTileEntity$2"}) public abstract class SubjectMixin implements SubjectBridge { @Nullable diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/util/text/StyleMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/util/text/StyleMixin.java new file mode 100644 index 00000000000..fd2d6d17396 --- /dev/null +++ b/src/mixins/java/org/spongepowered/common/mixin/core/util/text/StyleMixin.java @@ -0,0 +1,86 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.spongepowered.common.mixin.core.util.text; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextDecoration; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.common.adventure.NbtLegacyHoverEventSerializer; +import org.spongepowered.common.adventure.SpongeAdventure; +import org.spongepowered.common.bridge.util.text.StyleBridge; + +import java.io.IOException; + +@Mixin(Style.class) +public class StyleMixin implements StyleBridge { + private net.kyori.adventure.text.format.Style bridge$adventure; + + @Override + @SuppressWarnings("ConstantConditions") + public net.kyori.adventure.text.format.Style bridge$asAdventure() { + if (this.bridge$adventure == null) { + final net.kyori.adventure.text.format.Style.Builder builder = net.kyori.adventure.text.format.Style.builder(); + final Style $this = (Style) (Object) this; + // font + // TODO(adventure): 1.16 + // color + builder.color(SpongeAdventure.asAdventureNamed($this.getColor())); + // decorations + builder.decoration(TextDecoration.OBFUSCATED, $this.getObfuscated()); + builder.decoration(TextDecoration.BOLD, $this.getBold()); + builder.decoration(TextDecoration.STRIKETHROUGH, $this.getStrikethrough()); + builder.decoration(TextDecoration.UNDERLINED, $this.getUnderlined()); + builder.decoration(TextDecoration.ITALIC, $this.getItalic()); + // events + final HoverEvent hoverEvent = $this.getHoverEvent(); + if (hoverEvent != null) { + final net.kyori.adventure.text.event.HoverEvent.Action action = SpongeAdventure.asAdventure(hoverEvent.getAction()); + final Component value = SpongeAdventure.asAdventure(hoverEvent.getValue()); + try { + if (action == net.kyori.adventure.text.event.HoverEvent.Action.SHOW_TEXT) { + builder.hoverEvent(net.kyori.adventure.text.event.HoverEvent.showText(SpongeAdventure.asAdventure(hoverEvent.getValue()))); + } else if (action == net.kyori.adventure.text.event.HoverEvent.Action.SHOW_ITEM) { + builder.hoverEvent(net.kyori.adventure.text.event.HoverEvent.showItem(NbtLegacyHoverEventSerializer.INSTANCE.deserializeShowItem(value))); + } else if (action == net.kyori.adventure.text.event.HoverEvent.Action.SHOW_ENTITY) { + builder.hoverEvent(net.kyori.adventure.text.event.HoverEvent.showEntity(NbtLegacyHoverEventSerializer.INSTANCE.deserializeShowEntity(value, SpongeAdventure.GSON::deserialize))); + } + } catch (IOException e) { + // can't deal + } + } + final ClickEvent clickEvent = $this.getClickEvent(); + if (clickEvent != null) { + builder.clickEvent(net.kyori.adventure.text.event.ClickEvent.of(SpongeAdventure.asAdventure(clickEvent.getAction()), clickEvent.getValue())); + } + // insertion + builder.insertion($this.getInsertion()); + this.bridge$adventure = builder.build(); + } + return this.bridge$adventure; + } +} diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/util/text/TextComponentMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/util/text/TextComponentMixin.java new file mode 100644 index 00000000000..a6bed2b45c1 --- /dev/null +++ b/src/mixins/java/org/spongepowered/common/mixin/core/util/text/TextComponentMixin.java @@ -0,0 +1,99 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.spongepowered.common.mixin.core.util.text; + +import net.kyori.adventure.text.BlockNBTComponent; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.ComponentBuilder; +import net.kyori.adventure.text.EntityNBTComponent; +import net.kyori.adventure.text.KeybindComponent; +import net.kyori.adventure.text.ScoreComponent; +import net.kyori.adventure.text.SelectorComponent; +import net.kyori.adventure.text.TranslatableComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.KeybindTextComponent; +import net.minecraft.util.text.NBTTextComponent; +import net.minecraft.util.text.ScoreTextComponent; +import net.minecraft.util.text.SelectorTextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.common.adventure.SpongeAdventure; +import org.spongepowered.common.bridge.util.text.StyleBridge; +import org.spongepowered.common.bridge.util.text.TextComponentBridge; + +import java.util.ArrayList; +import java.util.List; + +@Mixin(TextComponent.class) +public class TextComponentMixin implements TextComponentBridge { + private Component bridge$adventureComponent; + + @Override + @SuppressWarnings("ConstantConditions") + public Component bridge$asAdventureComponent() { + if (this.bridge$adventureComponent == null) { + ComponentBuilder builder = null; + if ((Object) this instanceof StringTextComponent) { + builder = net.kyori.adventure.text.TextComponent.builder(((StringTextComponent) (Object) this).getText()); + } else if ((Object) this instanceof TranslationTextComponent) { + final TranslationTextComponent $this = (TranslationTextComponent) (Object) this; + final List with = new ArrayList<>($this.getFormatArgs().length); + for (final Object arg : $this.getFormatArgs()) { + if (arg instanceof ITextComponent) { + with.add(SpongeAdventure.asAdventure((ITextComponent) arg)); + } else { + with.add(net.kyori.adventure.text.TextComponent.of(arg.toString())); + } + } + builder = TranslatableComponent.builder($this.getKey()).args(with.toArray(new Component[0])); + } else if ((Object) this instanceof KeybindTextComponent) { + builder = KeybindComponent.builder(((KeybindTextComponent) (Object) this).getKeybind()); + } else if ((Object) this instanceof ScoreTextComponent) { + final ScoreTextComponent $this = (ScoreTextComponent) (Object) this; + builder = ScoreComponent.builder($this.getName(), $this.getObjective()).value($this.getUnformattedComponentText()); + } else if ((Object) this instanceof SelectorTextComponent) { + builder = SelectorComponent.builder(((SelectorTextComponent) (Object) this).getSelector()); + } else if ((Object) this instanceof NBTTextComponent) { + if ((Object) this instanceof NBTTextComponent.Block) { + final NBTTextComponent.Block $this = (NBTTextComponent.Block) (Object) this; + builder = BlockNBTComponent.builder().pos(BlockNBTComponent.Pos.fromString($this.func_218683_k())).nbtPath($this.func_218676_i()).interpret($this.func_218677_j()); + } else if ((Object) this instanceof NBTTextComponent.Entity) { + final NBTTextComponent.Entity $this = (NBTTextComponent.Entity) (Object) this; + builder = EntityNBTComponent.builder().nbtPath($this.func_218676_i()).interpret($this.func_218677_j()).selector($this.func_218687_k()); + } + } else { + throw new UnsupportedOperationException(); + } + for (final ITextComponent child : ((ITextComponent) this).getSiblings()) { + builder.append(SpongeAdventure.asAdventure(child)); + } + builder.style(((StyleBridge) ((ITextComponent) this).getStyle()).bridge$asAdventure()); + this.bridge$adventureComponent = builder.build(); + } + return this.bridge$adventureComponent; + } +} diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/world/BossInfoMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/world/BossInfoMixin.java new file mode 100644 index 00000000000..4aadffeaf57 --- /dev/null +++ b/src/mixins/java/org/spongepowered/common/mixin/core/world/BossInfoMixin.java @@ -0,0 +1,135 @@ +package org.spongepowered.common.mixin.core.world; + +import net.kyori.adventure.bossbar.BossBar; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.BossInfo; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.common.adventure.SpongeAdventure; +import org.spongepowered.common.bridge.world.BossInfoBridge; + +@Mixin(BossInfo.class) +public class BossInfoMixin implements BossInfoBridge { + @Shadow protected ITextComponent name; + + @Shadow protected float percent; + @Shadow protected BossInfo.Color color; + @Shadow protected BossInfo.Overlay overlay; + @Shadow protected boolean createFog; + @Shadow protected boolean darkenSky; + @Shadow protected boolean playEndBossMusic; + protected BossBar impl$adventure; + + @Override + public void bridge$copyAndAssign(final BossBar adventure) { + this.impl$adventure = adventure; + this.percent = adventure.percent(); + this.darkenSky = adventure.flags().contains(BossBar.Flag.DARKEN_SCREEN); + this.playEndBossMusic = adventure.flags().contains(BossBar.Flag.PLAY_BOSS_MUSIC); + this.createFog = adventure.flags().contains(BossBar.Flag.CREATE_WORLD_FOG); + } + + @Override + public BossBar bridge$asAdventure() { + if (this.impl$adventure == null) { + this.bridge$setAdventure(BossBar.of(SpongeAdventure.asAdventure(this.name), + this.percent, + SpongeAdventure.asAdventure(this.color), + SpongeAdventure.asAdventure(this.overlay), + SpongeAdventure.asAdventureFlags(this.darkenSky, this.playEndBossMusic, this.createFog))); + } + return this.impl$adventure; + } + + @Override + public void bridge$setAdventure(BossBar adventure) { + this.impl$adventure = adventure; + } + + // Redirect setters + @Redirect(method = "setName", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;name:Lnet/minecraft/util/text/ITextComponent;")) + private void adventureName(final BossInfo $this, final ITextComponent name) { + this.bridge$asAdventure().name(SpongeAdventure.asAdventure(name)); + } + + @Redirect(method = "setPercent", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;percent:F")) + private void adventurePercent(final BossInfo $this, final float percent) { + this.bridge$asAdventure().percent(percent); + } + + @Redirect(method = "setColor", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;color:Lnet/minecraft/world/BossInfo$Color;")) + private void adventureColor(final BossInfo $this, final BossInfo.Color color) { + this.bridge$asAdventure().color(SpongeAdventure.asAdventure(color)); + } + + @Redirect(method = "setOverlay", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;overlay:Lnet/minecraft/world/BossInfo$Overlay;")) + private void adventureOverlay(final BossInfo $this, final BossInfo.Overlay overlay) { + this.bridge$asAdventure().overlay(SpongeAdventure.asAdventure(overlay)); + } + + @Redirect(method = "setDarkenSky", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;darkenSky:Z")) + private void adventureDarkenSky(final BossInfo $this, final boolean playEndBossMusic) { + if (playEndBossMusic) { + this.bridge$asAdventure().addFlags(BossBar.Flag.DARKEN_SCREEN); + } else { + this.bridge$asAdventure().removeFlags(BossBar.Flag.DARKEN_SCREEN); + } + } + + @Redirect(method = "setPlayEndBossMusic", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;playEndBossMusic:Z")) + private void adventurePlayEndBossMusic(final BossInfo $this, final boolean playEndBossMusic) { + if (playEndBossMusic) { + this.bridge$asAdventure().addFlags(BossBar.Flag.PLAY_BOSS_MUSIC); + } else { + this.bridge$asAdventure().removeFlags(BossBar.Flag.PLAY_BOSS_MUSIC); + } + } + + @Redirect(method = "setCreateFog", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;createFog:Z")) + private void adventureCreateFog(final BossInfo $this, final boolean createFog) { + if (createFog) { + this.bridge$asAdventure().addFlags(BossBar.Flag.CREATE_WORLD_FOG); + } else { + this.bridge$asAdventure().removeFlags(BossBar.Flag.CREATE_WORLD_FOG); + } + } + + // Redirect getters + + @Redirect(method = "getName", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;name:Lnet/minecraft/util/text/ITextComponent;")) + private ITextComponent nameRead(final BossInfo $this) { + return SpongeAdventure.asVanilla(this.bridge$asAdventure().name()); + } + + @Redirect(method = "getPercent", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;percent:F")) + private float percentRead(final BossInfo $this) { + return this.bridge$asAdventure().percent(); + } + + @Redirect(method = "getColor", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;color:Lnet/minecraft/world/BossInfo$Color;")) + private BossInfo.Color colorRead(final BossInfo $this) { + return SpongeAdventure.asVanilla(this.bridge$asAdventure().color()); + } + + @Redirect(method = "getOverlay", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;overlay:Lnet/minecraft/world/BossInfo$Overlay;")) + private BossInfo.Overlay overlayRead(final BossInfo $this) { + return SpongeAdventure.asVanilla(this.bridge$asAdventure().overlay()); + } + + @Redirect(method = "shouldDarkenSky", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;darkenSky:Z")) + private boolean darkenSkyRead(final BossInfo $this) { + return this.bridge$asAdventure().flags().contains(BossBar.Flag.DARKEN_SCREEN); + } + + @Redirect(method = "shouldPlayEndBossMusic", at =@At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;playEndBossMusic:Z")) + private boolean playEndBossMusicRead(final BossInfo $this) { + return this.bridge$asAdventure().flags().contains(BossBar.Flag.PLAY_BOSS_MUSIC); + } + + @Redirect(method = "shouldCreateFog", at = @At(value = "FIELD", target = "Lnet/minecraft/world/BossInfo;createFog:Z")) + private boolean createFogRead(final BossInfo $this) { + return this.bridge$asAdventure().flags().contains(BossBar.Flag.CREATE_WORLD_FOG); + } +} diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/world/ServerBossInfoMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/world/ServerBossInfoMixin.java new file mode 100644 index 00000000000..859dc37423e --- /dev/null +++ b/src/mixins/java/org/spongepowered/common/mixin/core/world/ServerBossInfoMixin.java @@ -0,0 +1,119 @@ +/* + * This file is part of Sponge, licensed under the MIT License (MIT). + * + * Copyright (c) SpongePowered + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package org.spongepowered.common.mixin.core.world; + +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.text.Component; +import net.minecraft.network.play.server.SUpdateBossInfoPacket; +import net.minecraft.world.BossInfo; +import net.minecraft.world.ServerBossInfo; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Set; + +@Mixin(ServerBossInfo.class) +public abstract class ServerBossInfoMixin extends BossInfoMixin implements BossBar.Listener { + + private static final float EPSILON = 1e-2f; + + private float impl$lastSentPercent = 0f; + + @Shadow protected abstract void sendUpdate(final SUpdateBossInfoPacket.Operation operation); + + @Override + public void bridge$setAdventure(final BossBar adventure) { + final BossBar oldAdventure = this.impl$adventure; + super.bridge$setAdventure(adventure); + if (oldAdventure != adventure) { + if (oldAdventure != null) { + oldAdventure.removeListener(this); // TODO(adventure): how to update viewers? + } + adventure.addListener(this); + + // Apply invalid data where possible, avoid sameness checks + this.name = null; + this.percent = Float.MIN_VALUE; + this.color = null; + this.overlay = null; + // flags have to be done separately + } + } + + @Inject(method = "setDarkenSky", at = @At("HEAD")) + private void forceDarkenSkyUpdate(final boolean darkenSky, final CallbackInfoReturnable ci) { + this.darkenSky = !darkenSky; + } + + @Inject(method = "setPlayEndBossMusic", at = @At("HEAD")) + private void forcePlayEndBossMusicUpdate(final boolean endBossMusic, final CallbackInfoReturnable ci) { + this.playEndBossMusic = !endBossMusic; + } + + @Inject(method = "setCreateFog", at = @At("HEAD")) + private void forceCreateFogUpdate(final boolean createFog, final CallbackInfoReturnable ci) { + this.createFog = !createFog; + } + + // Convert to using BossBar.Listener + + @Redirect(method = {"setPercent", "setColor", "setOverlay", "setDarkenSky", "setPlayEndBossMusic", "setCreateFog", "setName"}, + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/ServerBossInfo;sendUpdate(Lnet/minecraft/network/play/server/SUpdateBossInfoPacket$Operation;)V")) + private void redirectUpdatePacket(final ServerBossInfo $this, final SUpdateBossInfoPacket.Operation op) { + // This becomes a no-op, the Adventure BossBar's listener calls this update operation + } + + @Override + public void bossBarNameChanged(final BossBar bar, final Component oldName, final Component newName) { + this.sendUpdate(SUpdateBossInfoPacket.Operation.UPDATE_NAME); + } + + @Override + public void bossBarPercentChanged(final BossBar bar, final float oldPercent, final float newPercent) { + if (Math.abs(newPercent - this.impl$lastSentPercent) > EPSILON) { + this.impl$lastSentPercent = newPercent; + this.sendUpdate(SUpdateBossInfoPacket.Operation.UPDATE_PCT); + } + } + + @Override + public void bossBarColorChanged(final BossBar bar, final BossBar.Color oldColor, final BossBar.Color newColor) { + this.sendUpdate(SUpdateBossInfoPacket.Operation.UPDATE_STYLE); + } + + @Override + public void bossBarOverlayChanged(final BossBar bar, final BossBar.Overlay oldOverlay, final BossBar.Overlay newOverlay) { + this.sendUpdate(SUpdateBossInfoPacket.Operation.UPDATE_STYLE); + } + + @Override + public void bossBarFlagsChanged(final BossBar bar, final Set oldFlags, final Set newFlags) { + this.sendUpdate(SUpdateBossInfoPacket.Operation.UPDATE_PROPERTIES); + } +} diff --git a/src/mixins/java/org/spongepowered/common/mixin/inventory/api/entity/player/ServerPlayerEntityMixin_Inventory_API.java b/src/mixins/java/org/spongepowered/common/mixin/inventory/api/entity/player/ServerPlayerEntityMixin_Inventory_API.java index 8919af942d5..4385ee5b885 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/inventory/api/entity/player/ServerPlayerEntityMixin_Inventory_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/inventory/api/entity/player/ServerPlayerEntityMixin_Inventory_API.java @@ -24,6 +24,7 @@ */ package org.spongepowered.common.mixin.inventory.api.entity.player; +import net.kyori.adventure.text.Component; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.ServerPlayerEntity; @@ -35,7 +36,6 @@ import org.spongepowered.api.item.inventory.Inventory; import org.spongepowered.api.item.inventory.ItemStackSnapshot; import org.spongepowered.api.scheduler.Task; -import org.spongepowered.api.text.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.common.SpongeCommon; import org.spongepowered.common.bridge.inventory.container.ContainerBridge; @@ -63,7 +63,7 @@ public Optional openInventory(final Inventory inventory) throws Illeg @SuppressWarnings({"unchecked", "ConstantConditions", "rawtypes"}) @Override - public Optional openInventory(final Inventory inventory, final Text displayName) { + public Optional openInventory(final Inventory inventory, final Component displayName) { ContainerBridge openContainer = (ContainerBridge) ((PlayerEntity) (Object) this).openContainer; if (openContainer.bridge$isInUse()) { final Cause cause = PhaseTracker.getCauseStackManager().getCurrentCause(); diff --git a/src/mixins/resources/mixins.common.api.json b/src/mixins/resources/mixins.common.api.json index e80ad8a1647..b5b7eedf17c 100644 --- a/src/mixins/resources/mixins.common.api.json +++ b/src/mixins/resources/mixins.common.api.json @@ -287,7 +287,6 @@ "mcp.util.HandSideMixin_API", "mcp.util.IndirectEntityDamageSourceMixin_API", "mcp.util.ResourceLocationMixin_API", - "mcp.util.SoundCategoryMixin_API", "mcp.util.SoundEventMixin_API", "mcp.world.DifficultyMixin_API", "mcp.world.ExplosionMixin_API", diff --git a/src/mixins/resources/mixins.common.core.json b/src/mixins/resources/mixins.common.core.json index d359879f0d8..9209c9be739 100644 --- a/src/mixins/resources/mixins.common.core.json +++ b/src/mixins/resources/mixins.common.core.json @@ -8,6 +8,9 @@ "mixinPriority": 1101, "mixins": [ "advancements.FunctionManagerMixin", + "adventure.bossbar.BossBarImplMixin", + "adventure.text.AbstractComponentMixin", + "adventure.text.format.StyleMixin", "command.CommandsMixin", "command.CommandSourceMixin", "command.arguments.ArgumentTypes_EntryMixin", @@ -18,14 +21,19 @@ "entity.player.PlayerEntityMixin", "entity.player.ServerPlayerEntityMixin", "network.rcon.RConConsoleSourceMixin", + "server.CustomServerBossInfoMixin", "server.MinecraftServerMixin", "server.management.PlayerProfileCacheMixin", "service.permission.SubjectMixin", "tileentity.CommandBlockTileEntity_1Mixin", "tileentity.LecternTileEntityMixin", "tileentity.SignTileEntityMixin", + "world.BossInfoMixin", + "world.ServerBossInfoMixin", "world.dimension.DimensionTypeMixin", - "util.datafix.versions.V1125Mixin" + "util.datafix.versions.V1125Mixin", + "util.text.StyleMixin", + "util.text.TextComponentMixin" ], "client": [ "client.MinecraftMixin" diff --git a/src/test/invalid/common/data/manipulator/ManipulatorTest.java b/src/test/invalid/common/data/manipulator/ManipulatorTest.java index ef18ec222b9..d679825b8b2 100644 --- a/src/test/invalid/common/data/manipulator/ManipulatorTest.java +++ b/src/test/invalid/common/data/manipulator/ManipulatorTest.java @@ -50,7 +50,6 @@ import org.spongepowered.api.entity.EntitySnapshot; import org.spongepowered.api.event.SpongeEventFactoryTest; import org.spongepowered.api.item.merchant.TradeOffer; -import org.spongepowered.api.text.Text; import org.spongepowered.api.util.PEBKACException; import org.spongepowered.asm.util.PrettyPrinter; import org.spongepowered.common.util.TypeTokenHelper; diff --git a/src/test/invalid/common/event/EventFilterTest.java b/src/test/invalid/common/event/EventFilterTest.java index 17d60ae91e6..e3db8df72f9 100644 --- a/src/test/invalid/common/event/EventFilterTest.java +++ b/src/test/invalid/common/event/EventFilterTest.java @@ -39,7 +39,6 @@ import org.spongepowered.api.event.cause.Cause; import org.spongepowered.api.event.cause.EventContext; import org.spongepowered.api.item.inventory.ItemStack; -import org.spongepowered.api.text.Text; import org.spongepowered.api.world.biome.BiomeTypes; import org.spongepowered.api.world.extent.Extent; import org.spongepowered.common.event.filter.FilterFactory; diff --git a/src/test/invalid/common/registry/CatalogTypeMethodTest.java b/src/test/invalid/common/registry/CatalogTypeMethodTest.java index a56d00d0afd..eb8ff1f0f1e 100644 --- a/src/test/invalid/common/registry/CatalogTypeMethodTest.java +++ b/src/test/invalid/common/registry/CatalogTypeMethodTest.java @@ -34,8 +34,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spongepowered.api.CatalogType; -import org.spongepowered.api.text.translation.Translatable; -import org.spongepowered.api.text.translation.Translation; import org.spongepowered.lwts.runner.LaunchWrapperParameterized; import java.lang.reflect.InvocationTargetException; diff --git a/src/test/invalid/common/test/TestServer.java b/src/test/invalid/common/test/TestServer.java index 527af592d46..43b7e3e968c 100644 --- a/src/test/invalid/common/test/TestServer.java +++ b/src/test/invalid/common/test/TestServer.java @@ -31,8 +31,6 @@ import org.spongepowered.api.profile.GameProfileManager; import org.spongepowered.api.resourcepack.ResourcePack; import org.spongepowered.api.scoreboard.Scoreboard; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.channel.MessageChannel; import org.spongepowered.api.world.ChunkTicketManager; import org.spongepowered.api.world.World; import org.spongepowered.api.world.WorldArchetype; diff --git a/src/test/invalid/common/text/LegacyParserTest.java b/src/test/invalid/common/text/LegacyParserTest.java index 16ff7050004..acef8be771d 100644 --- a/src/test/invalid/common/text/LegacyParserTest.java +++ b/src/test/invalid/common/text/LegacyParserTest.java @@ -28,10 +28,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import org.spongepowered.api.text.Text; -import org.spongepowered.api.text.format.TextColors; -import org.spongepowered.api.text.format.TextStyles; -import org.spongepowered.api.text.serializer.TextSerializers; import org.spongepowered.lwts.runner.LaunchWrapperTestRunner; @RunWith(LaunchWrapperTestRunner.class) diff --git a/vanilla/invalid/java/org/spongepowered/vanilla/mixin/core/network/NetHandlerPlayServerMixin_Vanilla.java b/vanilla/invalid/java/org/spongepowered/vanilla/mixin/core/network/NetHandlerPlayServerMixin_Vanilla.java index 7c4841eadda..60828d14391 100644 --- a/vanilla/invalid/java/org/spongepowered/vanilla/mixin/core/network/NetHandlerPlayServerMixin_Vanilla.java +++ b/vanilla/invalid/java/org/spongepowered/vanilla/mixin/core/network/NetHandlerPlayServerMixin_Vanilla.java @@ -45,7 +45,7 @@ import org.spongepowered.api.network.RemoteConnection; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.channel.MessageChannel; -import org.spongepowered.api.text.chat.ChatTypes; +import org.spongepowered.api.entity.living.player.chat.ChatTypes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At;