Skip to content

Commit

Permalink
Add dashloader support
Browse files Browse the repository at this point in the history
  • Loading branch information
Juuxel committed Jul 5, 2021
1 parent 524e9cf commit 672cb83
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -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<T>(
private val delegate: Property<T>
val delegate: EnumProperty<T>
) : Property<OptionalProperty.Value<T>>(delegate.name, Value::class.java as Class<Value<T>>)
where T : Any, T : Comparable<T>, T : StringIdentifiable {
where T : Enum<T>, T : StringIdentifiable {
val none: Value.None<T> = Value.None()
private val values: Map<T?, Value<T>> = sequence {
for (value in delegate.values) {
Expand Down Expand Up @@ -36,11 +37,13 @@ class OptionalProperty<T>(
fun wrap(value: T): Value<T>? = values[value]
fun wrapOrNone(value: T): Value<T> = values[value] ?: none

sealed class Value<T : Comparable<T>> : Comparable<Value<T>> {
sealed class Value<T> : Comparable<Value<T>>
where T : Enum<T>, T : StringIdentifiable {
abstract val isPresent: Boolean
abstract val value: T?

data class Some<T : Comparable<T>>(override val value: T) : Value<T>() {
data class Some<T>(override val value: T) : Value<T>()
where T : Enum<T>, T : StringIdentifiable {
override val isPresent = true

override fun compareTo(other: Value<T>) = when (other) {
Expand All @@ -49,7 +52,8 @@ class OptionalProperty<T>(
}
}

class None<T : Comparable<T>> : Value<T>() {
class None<T> : Value<T>()
where T : Enum<T>, T : StringIdentifiable {
override val isPresent = false
override val value: T? = null

Expand Down
14 changes: 14 additions & 0 deletions fabric/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
}
}

Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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));
}
}
Original file line number Diff line number Diff line change
@@ -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));
}
}
11 changes: 10 additions & 1 deletion fabric/src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
]
}
}
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 672cb83

Please sign in to comment.