Skip to content

Commit 5e33807

Browse files
committed
feat(pigvariants): Introduce PigVariant feature with model, texture, and biome support; add PigVariant and PigVariantTag arguments, and implement related tests.
1 parent 63c23b6 commit 5e33807

File tree

12 files changed

+174
-2
lines changed

12 files changed

+174
-2
lines changed

generation/src/main/kotlin/generators/generators.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ suspend fun launchAllSimpleGenerators() {
1515
gen("Enchantments", "enchantments"),
1616
gen("Instruments", "instruments"),
1717
gen("JukeboxSongs", "jukebox_songs"),
18-
gen("PaintingVariants", "painting_variants"),
18+
gen("PaintingVariants", "paintings"),
1919
gen("Recipes", "recipes"),
2020
gen("TrimMaterials", "trim_materials"),
2121
gen("TrimPatterns", "trim_patterns"),
22-
gen("WolfVariants", "wolf_variants"),
22+
gen("PigVariants", "pigs"),
23+
gen("WolfVariants", "wolfs"),
2324
gen("Biomes", "worldgen/biome"),
2425
gen("BiomePresets", "worldgen/multi_noise_biome_source_parameter_list"),
2526
gen("ConfiguredFeatures", "worldgen/configured_feature"),
@@ -48,6 +49,7 @@ suspend fun launchAllSimpleGenerators() {
4849
"instrument" to "InstrumentTag",
4950
"item" to "ItemTag",
5051
"painting_variant" to "PaintingVariantTag",
52+
"pig_variant" to "PigVariantTag",
5153
"wolf_variant" to "WolfVariantTag",
5254
"worldgen/biome" to "BiomeTag",
5355
"worldgen/structure" to "ConfiguredStructureTag",

kore/src/main/kotlin/io/github/ayfri/kore/DataPack.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import io.github.ayfri.kore.features.itemmodifiers.ItemModifier
1414
import io.github.ayfri.kore.features.jukeboxsongs.JukeboxSong
1515
import io.github.ayfri.kore.features.loottables.LootTable
1616
import io.github.ayfri.kore.features.paintingvariant.PaintingVariant
17+
import io.github.ayfri.kore.features.pigvariants.PigVariant
1718
import io.github.ayfri.kore.features.predicates.Predicate
1819
import io.github.ayfri.kore.features.recipes.RecipeFile
1920
import io.github.ayfri.kore.features.tags.Tag
@@ -78,6 +79,7 @@ class DataPack(val name: String) {
7879
val noises = registerGenerator<Noise>()
7980
val noiseSettings = registerGenerator<NoiseSettings>()
8081
val paintingVariants = registerGenerator<PaintingVariant>()
82+
val pigVariants = registerGenerator<PigVariant>()
8183
val placedFeatures = registerGenerator<PlacedFeature>()
8284
val predicates = registerGenerator<Predicate>()
8385
val processorLists = registerGenerator<ProcessorList>()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.github.ayfri.kore.arguments.types
2+
3+
import io.github.ayfri.kore.arguments.Argument
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable(with = Argument.ArgumentSerializer::class)
7+
interface PigVariantOrTagArgument : Argument
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.github.ayfri.kore.arguments.types.resources
2+
3+
import io.github.ayfri.kore.arguments.Argument
4+
import io.github.ayfri.kore.arguments.types.PigVariantOrTagArgument
5+
import io.github.ayfri.kore.arguments.types.ResourceLocationArgument
6+
import kotlinx.serialization.Serializable
7+
8+
@Serializable(with = Argument.ArgumentSerializer::class)
9+
interface PigVariantArgument : ResourceLocationArgument, PigVariantOrTagArgument {
10+
companion object {
11+
operator fun invoke(name: String, namespace: String = "minecraft") = object : PigVariantArgument {
12+
override val name = name
13+
override val namespace = namespace
14+
}
15+
}
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.github.ayfri.kore.arguments.types.resources.tagged
2+
3+
import io.github.ayfri.kore.arguments.Argument
4+
import io.github.ayfri.kore.arguments.types.PigVariantOrTagArgument
5+
import io.github.ayfri.kore.arguments.types.TaggedResourceLocationArgument
6+
import kotlinx.serialization.Serializable
7+
8+
@Serializable(with = Argument.ArgumentSerializer::class)
9+
interface PigVariantTagArgument : TaggedResourceLocationArgument, PigVariantOrTagArgument {
10+
companion object {
11+
operator fun invoke(name: String, namespace: String = "minecraft") = object : PigVariantTagArgument {
12+
override val name = name
13+
override val namespace = namespace
14+
}
15+
}
16+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.github.ayfri.kore.features.pigvariants
2+
3+
import io.github.ayfri.kore.serializers.LowercaseSerializer
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable(with = PigModel.Companion.PigModelSerializer::class)
7+
enum class PigModel {
8+
NORMAL,
9+
COLD;
10+
11+
companion object {
12+
data object PigModelSerializer : LowercaseSerializer<PigModel>(entries)
13+
}
14+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.github.ayfri.kore.features.pigvariants
2+
3+
import io.github.ayfri.kore.DataPack
4+
import io.github.ayfri.kore.Generator
5+
import io.github.ayfri.kore.arguments.types.resources.PigVariantArgument
6+
import io.github.ayfri.kore.arguments.types.resources.worldgen.BiomeArgument
7+
import io.github.ayfri.kore.generated.Biomes
8+
import io.github.ayfri.kore.serializers.InlinableList
9+
import kotlinx.serialization.Serializable
10+
import kotlinx.serialization.Transient
11+
import kotlinx.serialization.encodeToString
12+
13+
@Serializable
14+
data class PigVariant(
15+
@Transient
16+
override var fileName: String = "pig_variant",
17+
var model: PigModel = PigModel.NORMAL,
18+
var texture: String = "minecraft:entity/pig/pig",
19+
var biome: InlinableList<BiomeArgument> = listOf(Biomes.PLAINS),
20+
) : Generator("pig_variant") {
21+
override fun generateJson(dataPack: DataPack) = dataPack.jsonEncoder.encodeToString(this)
22+
}
23+
24+
fun DataPack.pigVariant(
25+
fileName: String = "pig_variant",
26+
block: PigVariant.() -> Unit = {},
27+
): PigVariantArgument {
28+
val pigVariant = PigVariant(fileName).apply(block)
29+
pigVariants += pigVariant
30+
return PigVariantArgument(fileName, pigVariant.namespace ?: name)
31+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.github.ayfri.kore.features.predicates.sub.entityspecific
2+
3+
import io.github.ayfri.kore.arguments.types.PigVariantOrTagArgument
4+
import io.github.ayfri.kore.features.predicates.sub.Entity
5+
import io.github.ayfri.kore.serializers.InlinableList
6+
import kotlinx.serialization.Serializable
7+
8+
@Serializable
9+
data class Pig(
10+
override var variant: InlinableList<PigVariantOrTagArgument>,
11+
) : EntityTypeSpecific(), VariantEntityTypeSpecific<PigVariantOrTagArgument>
12+
13+
fun Entity.pigTypeSpecific(vararg variants: PigVariantOrTagArgument, block: Pig.() -> Unit = {}) = apply {
14+
typeSpecific = Pig(variants.toList()).apply(block)
15+
}

kore/src/main/kotlin/io/github/ayfri/kore/features/tags/commonTags.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,13 @@ fun DataPack.trimPatternTag(
143143
block: Tag<TrimPatternTagArgument>.() -> Unit = {},
144144
) = tag(fileName, "trim_pattern", namespace, replace, block)
145145

146+
fun DataPack.pigVariantTag(
147+
fileName: String = "pig_variant",
148+
namespace: String = name,
149+
replace: Boolean = false,
150+
block: Tag<PigVariantTagArgument>.() -> Unit = {},
151+
) = tag(fileName, "pig_variant", namespace, replace, block)
152+
146153
fun DataPack.wolfVariantTag(
147154
fileName: String = "wolf_variant",
148155
namespace: String = name,
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package io.github.ayfri.kore.features
2+
3+
import io.github.ayfri.kore.DataPack
4+
import io.github.ayfri.kore.assertions.assertsIs
5+
import io.github.ayfri.kore.features.pigvariants.PigModel
6+
import io.github.ayfri.kore.features.pigvariants.pigVariant
7+
import io.github.ayfri.kore.generated.Biomes
8+
9+
fun DataPack.pigVariantTests() {
10+
pigVariant("test_pig_variant") {
11+
model = PigModel.COLD
12+
texture = "my_datapack:entity/cold_pig/pig"
13+
biome = listOf(Biomes.SNOWY_TAIGA, Biomes.SNOWY_PLAINS)
14+
}
15+
16+
pigVariants.last() assertsIs """
17+
{
18+
"model": "cold",
19+
"texture": "my_datapack:entity/cold_pig/pig",
20+
"biome": [
21+
"minecraft:snowy_taiga",
22+
"minecraft:snowy_plains"
23+
]
24+
}
25+
""".trimIndent()
26+
27+
pigVariant("normal_pig_variant") {
28+
model = PigModel.NORMAL
29+
texture = "my_datapack:entity/normal_pig/pig"
30+
biome = listOf(Biomes.PLAINS, Biomes.FOREST)
31+
}
32+
33+
pigVariants.last() assertsIs """
34+
{
35+
"model": "normal",
36+
"texture": "my_datapack:entity/normal_pig/pig",
37+
"biome": [
38+
"minecraft:plains",
39+
"minecraft:forest"
40+
]
41+
}
42+
""".trimIndent()
43+
}

0 commit comments

Comments
 (0)