From 672cb834cf92c604346a2ad686cd6ce6c19364c1 Mon Sep 17 00:00:00 2001 From: Juuz <6596629+Juuxel@users.noreply.github.com> Date: Mon, 5 Jul 2021 20:40:44 +0300 Subject: [PATCH] Add dashloader support --- .../adorn/block/property/OptionalProperty.kt | 14 +++++--- fabric/build.gradle.kts | 14 ++++++++ .../dashloader/DashOptionalNoneValue.java | 21 ++++++++++++ .../dashloader/DashOptionalProperty.java | 32 ++++++++++++++++++ .../dashloader/DashOptionalSomeValue.java | 33 +++++++++++++++++++ fabric/src/main/resources/fabric.mod.json | 11 ++++++- gradle.properties | 1 + 7 files changed, 120 insertions(+), 6 deletions(-) create mode 100644 fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalNoneValue.java create mode 100644 fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalProperty.java create mode 100644 fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalSomeValue.java diff --git a/common/src/main/kotlin/juuxel/adorn/block/property/OptionalProperty.kt b/common/src/main/kotlin/juuxel/adorn/block/property/OptionalProperty.kt index 75304074a..a314dbf45 100644 --- a/common/src/main/kotlin/juuxel/adorn/block/property/OptionalProperty.kt +++ b/common/src/main/kotlin/juuxel/adorn/block/property/OptionalProperty.kt @@ -1,14 +1,15 @@ package juuxel.adorn.block.property +import net.minecraft.state.property.EnumProperty import net.minecraft.state.property.Property import net.minecraft.util.StringIdentifiable import java.util.Optional @Suppress("UNCHECKED_CAST") class OptionalProperty( - private val delegate: Property + val delegate: EnumProperty ) : Property>(delegate.name, Value::class.java as Class>) - where T : Any, T : Comparable, T : StringIdentifiable { + where T : Enum, T : StringIdentifiable { val none: Value.None = Value.None() private val values: Map> = sequence { for (value in delegate.values) { @@ -36,11 +37,13 @@ class OptionalProperty( fun wrap(value: T): Value? = values[value] fun wrapOrNone(value: T): Value = values[value] ?: none - sealed class Value> : Comparable> { + sealed class Value : Comparable> + where T : Enum, T : StringIdentifiable { abstract val isPresent: Boolean abstract val value: T? - data class Some>(override val value: T) : Value() { + data class Some(override val value: T) : Value() + where T : Enum, T : StringIdentifiable { override val isPresent = true override fun compareTo(other: Value) = when (other) { @@ -49,7 +52,8 @@ class OptionalProperty( } } - class None> : Value() { + class None : Value() + where T : Enum, T : StringIdentifiable { override val isPresent = false override val value: T? = null diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index cf036290a..d13ba6df5 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -47,6 +47,18 @@ repositories { maven { name = "TerraformersMC" url = uri("https://maven.terraformersmc.com/releases") + + content { + includeGroup("com.terraformersmc") + } + } + + maven { + url = uri("https://oskarstrom.net/maven") + + content { + includeGroup("net.oskarstrom") + } } } @@ -75,6 +87,8 @@ dependencies { // Mod compat modCompileOnly("com.github.Virtuoel:Towelette:${rootProject.property("towelette")}") modRuntime(modCompileOnly("com.terraformersmc:modmenu:${rootProject.property("modmenu")}")!!) + modCompileOnly("net.oskarstrom:DashLoader:${rootProject.property("dashloader")}") + runtimeOnly("org.yaml:snakeyaml:1.27") // TODO: for dashloader, remove when pom is fixed } tasks { diff --git a/fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalNoneValue.java b/fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalNoneValue.java new file mode 100644 index 000000000..a7cb725b9 --- /dev/null +++ b/fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalNoneValue.java @@ -0,0 +1,21 @@ +package juuxel.adorn.compat.dashloader; + +import juuxel.adorn.block.property.OptionalProperty; +import net.oskarstrom.dashloader.DashRegistry; +import net.oskarstrom.dashloader.api.annotation.DashConstructor; +import net.oskarstrom.dashloader.api.annotation.DashObject; +import net.oskarstrom.dashloader.api.enums.ConstructorMode; +import net.oskarstrom.dashloader.blockstate.property.value.DashPropertyValue; + +@DashObject(OptionalProperty.Value.None.class) +public class DashOptionalNoneValue implements DashPropertyValue { + @DashConstructor(ConstructorMode.EMPTY) + public DashOptionalNoneValue() { + } + + @SuppressWarnings("rawtypes") + @Override + public Comparable toUndash(DashRegistry registry) { + return new OptionalProperty.Value.None(); + } +} diff --git a/fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalProperty.java b/fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalProperty.java new file mode 100644 index 000000000..bfcf57146 --- /dev/null +++ b/fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalProperty.java @@ -0,0 +1,32 @@ +package juuxel.adorn.compat.dashloader; + +import io.activej.serializer.annotations.Deserialize; +import io.activej.serializer.annotations.Serialize; +import juuxel.adorn.block.property.OptionalProperty; +import net.minecraft.state.property.Property; +import net.oskarstrom.dashloader.DashRegistry; +import net.oskarstrom.dashloader.api.annotation.DashConstructor; +import net.oskarstrom.dashloader.api.annotation.DashObject; +import net.oskarstrom.dashloader.api.enums.ConstructorMode; +import net.oskarstrom.dashloader.blockstate.property.DashEnumProperty; +import net.oskarstrom.dashloader.blockstate.property.DashProperty; + +@DashObject(OptionalProperty.class) +public class DashOptionalProperty implements DashProperty { + @Serialize(order = 0) + public final DashEnumProperty property; + + public DashOptionalProperty(@Deserialize("property") DashEnumProperty property) { + this.property = property; + } + + @DashConstructor(ConstructorMode.OBJECT) + public DashOptionalProperty(OptionalProperty property) { + this(new DashEnumProperty(property.getDelegate())); + } + + @Override + public Property toUndash(DashRegistry registry) { + return new OptionalProperty<>(property.toUndash(registry)); + } +} diff --git a/fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalSomeValue.java b/fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalSomeValue.java new file mode 100644 index 000000000..630838539 --- /dev/null +++ b/fabric/src/main/java/juuxel/adorn/compat/dashloader/DashOptionalSomeValue.java @@ -0,0 +1,33 @@ +package juuxel.adorn.compat.dashloader; + +import io.activej.serializer.annotations.Deserialize; +import io.activej.serializer.annotations.Serialize; +import juuxel.adorn.block.property.OptionalProperty; +import net.oskarstrom.dashloader.DashRegistry; +import net.oskarstrom.dashloader.api.ExtraVariables; +import net.oskarstrom.dashloader.api.annotation.DashConstructor; +import net.oskarstrom.dashloader.api.annotation.DashObject; +import net.oskarstrom.dashloader.api.enums.ConstructorMode; +import net.oskarstrom.dashloader.blockstate.property.value.DashEnumValue; +import net.oskarstrom.dashloader.blockstate.property.value.DashPropertyValue; + +@DashObject(OptionalProperty.Value.Some.class) +public class DashOptionalSomeValue implements DashPropertyValue { + @Serialize(order = 0) + public final DashEnumValue value; + + public DashOptionalSomeValue(@Deserialize("value") DashEnumValue value) { + this.value = value; + } + + @DashConstructor(ConstructorMode.OBJECT_EXTRA) + public DashOptionalSomeValue(OptionalProperty.Value.Some value, ExtraVariables extra) { + this(new DashEnumValue(value.getValue(), extra)); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public Comparable toUndash(DashRegistry registry) { + return new OptionalProperty.Value.Some(value.toUndash(registry)); + } +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index a293ce8e7..8117a5d0f 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -53,6 +53,15 @@ "byg": "<1.1" }, "breaks": { - "towelette": "<4.0.0" + "towelette": "<4.0.0", + "dashloader": "<2.0-" + }, + + "custom": { + "dashloader:customobject": [ + "juuxel.adorn.compat.dashloader.DashOptionalProperty", + "juuxel.adorn.compat.dashloader.DashOptionalSomeValue", + "juuxel.adorn.compat.dashloader.DashOptionalNoneValue" + ] } } diff --git a/gradle.properties b/gradle.properties index f695ad50e..1ce96c6f7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,3 +20,4 @@ libgui = 4.0.0+1.17 modmenu = 2.0.0-beta.7 jankson = 3.0.1+j1.2.0 libcd = 3.0.3+1.16.3 +dashloader = 2.0-dev10