diff --git a/build.gradle b/build.gradle index 8f346c5..295b665 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,6 @@ repositories { // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. // See https://docs.gradle.org/current/userguide/declaring_repositories.html // for more information about repositories. - maven { url "https://maven.nucleoid.xyz" } maven { url "https://jitpack.io" } maven { @@ -34,7 +33,6 @@ sourceSets { dependencies { compileOnly 'org.jetbrains:annotations:24.1.0' implementation 'com.mojang:datafixerupper:8.0.16' - } processResources { diff --git a/output.json b/output.json index a68238f..7bdfb84 100644 --- a/output.json +++ b/output.json @@ -6,37 +6,42 @@ "bold": true, "color": "red" }, - { - "text": "\n\nTesting standalone build of " - }, + "\n\nTesting standalone build of ", { "text": "Text Placeholder API", "bold": true, "color": "gold" }, - { - "text": " by " - }, - { - "text": "Patbox" - }, - { - "text": "!\n\n" - }, + " by ", + "Patbox", + "!\n\n", { "text": "Base stuff works, but more is needed! The Placeholder API part isn't even\nmodified, instead it mocks rest of used MC code!", "italic": true }, + "\n\n", { - "text": "\n\n" + "translate": "item.minecraft.apple", + "fallback": "Apple", + "with": [], + "hoverEvent": { + "contents": { + "text": "Attack with ", + "extra": [ + { + "keybind": "key.attack" + } + ] + }, + "action": "show_text" + } }, + "\n", { "text": "Was it bad idea? Maybe.", "color": "yellow" }, - { - "text": "\n\n" - }, + "\n\n", { "text": "", "extra": [ diff --git a/src/main/java/eu/pb4/placeholderstandalone/Main.java b/src/main/java/eu/pb4/placeholderstandalone/Main.java index b696c25..f1b7660 100644 --- a/src/main/java/eu/pb4/placeholderstandalone/Main.java +++ b/src/main/java/eu/pb4/placeholderstandalone/Main.java @@ -23,7 +23,7 @@ public static void main(String... args) { var text = node.toText(PlaceholderContext.of(new ServerPlayerEntity("Patbox"))); var gson = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create(); - Files.writeString(Path.of("output.json"), gson.toJson(TextCodecs.CODEC.encodeStart(JsonOps.INSTANCE, text).result().get()), StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); + Files.writeString(Path.of("output.json"), gson.toJson(TextCodecs.CODEC.encodeStart(JsonOps.INSTANCE, text).getOrThrow()), StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); } catch (Throwable e) { e.printStackTrace(); } diff --git a/src/main/java/eu/pb4/placeholderstandalone/TextCodecs.java b/src/main/java/eu/pb4/placeholderstandalone/TextCodecs.java index 193ca2e..5af9aca 100644 --- a/src/main/java/eu/pb4/placeholderstandalone/TextCodecs.java +++ b/src/main/java/eu/pb4/placeholderstandalone/TextCodecs.java @@ -1,55 +1,162 @@ package eu.pb4.placeholderstandalone; -import com.mojang.serialization.Codec; -import com.mojang.serialization.DataResult; -import com.mojang.serialization.MapCodec; +import com.google.common.collect.ImmutableMap; +import com.mojang.datafixers.util.Either; +import com.mojang.serialization.*; import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.entity.EntityType; +import net.minecraft.item.ItemStack; import net.minecraft.text.*; +import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import org.jetbrains.annotations.Nullable; -import java.util.List; -import java.util.Locale; -import java.util.Optional; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + public class TextCodecs { + public static final Text DEFAULT_SEPARATOR = Text.literal(", ").formatted(Formatting.GRAY); public static final Codec IDENTIFIER_CODEC = Codec.STRING.xmap(Identifier::of, Identifier::toString); public static final Codec COLOR_CODEC = Codec.STRING.flatXmap(TextColor::parse, (x) -> DataResult.success(x.name())); - public static final Codec> HOVER_EVENT_CODEC = Codec.unit(null); - public static final Codec CLICK_EVENT_CODEC = RecordCodecBuilder.create(instance -> instance.group( + /*public static final Map, MapCodec> HOVER_CODECS = (Map, MapCodec>) (Object) + ImmutableMap., MapCodec>builder() + .put(BlockNbtDataSource.class, Codec.STRING.xmap(BlockNbtDataSource::new, BlockNbtDataSource::path).fieldOf("block")) + .put(EntityNbtDataSource.class, Codec.STRING.xmap(EntityNbtDataSource::new, EntityNbtDataSource::path).fieldOf("entity")) + .put(StorageNbtDataSource.class, IDENTIFIER_CODEC.xmap(StorageNbtDataSource::new, StorageNbtDataSource::path).fieldOf("storage")) + .build())*/ + public static final Codec CLICK_EVENT_CODEC = RecordCodecBuilder.create(instance -> instance.group( Codec.stringResolver(x -> x.name().toLowerCase(Locale.ROOT), x -> ClickEvent.Action.valueOf(x.toUpperCase(Locale.ROOT))) .fieldOf("action").forGetter(ClickEvent::action), Codec.STRING.fieldOf("value").forGetter(ClickEvent::value) ).apply(instance, ClickEvent::new)); - public static final MapCodec