Skip to content

Commit

Permalink
テストコードを複数のメソッドに分割
Browse files Browse the repository at this point in the history
欠けていたKDocを大体追加
  • Loading branch information
Hiiragi283 committed Dec 17, 2024
1 parent 7f86702 commit 981264c
Show file tree
Hide file tree
Showing 10 changed files with 68 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import net.minecraft.util.collection.DefaultedList
import java.util.*
import java.util.function.Function

typealias DataPair<F, S> = Pair<F, S>

// Codec //

/**
Expand Down
5 changes: 2 additions & 3 deletions src/main/kotlin/dev/robustum/core/extensions/ItemExtension.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,13 @@ fun ItemStack.isOf(item: ItemConvertible): Boolean = this.item == item.asItem()
// ItemUsageContext //

/**
* この[ItemUsageContext]が持っている[net.minecraft.world.World]と[net.minecraft.util.math.BlockPos]から[BlockState]を取得します。
* この[ItemUsageContext]から[BlockState]を取得します。
*/
val ItemUsageContext.blockState: BlockState
get() = world.getBlockState(blockPos)

/**
* この[ItemUsageContext]が持っている[net.minecraft.world.World]と[net.minecraft.util.math.BlockPos]から[T]を取得します。
* この[ItemUsageContext]から[T]を取得します。
* @param T [BlockEntity]を継承したクラス
* @return [net.minecraft.world.World.getBlockEntity]で取得した[BlockEntity]が[T]を継承していない場合はnull
*/
inline fun <reified T : BlockEntity> ItemUsageContext.getBlockEntity(): T? = world.getBlockEntity(blockPos) as? T
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ import net.minecraft.recipe.RecipeSerializer
import net.minecraft.util.Identifier
import net.minecraft.util.registry.Registry

/**
* クライアントへの同期を[delegated]に委譲した[RecipeSerializer]です。
* @param T レシピのクラス
* @param recipeCodec レシピのコーデック
* @see RobustumRecipeSerializers
*/
class DelegatedRecipeSerializer<T : Recipe<*>>(private val delegated: RecipeSerializer<T>, private val recipeCodec: RecipeCodec<T>) :
RecipeSerializer<T> {
private fun createCodec(id: Identifier): Codec<T> = RecordCodecBuilder.create { instance ->
Expand All @@ -29,6 +35,11 @@ class DelegatedRecipeSerializer<T : Recipe<*>>(private val delegated: RecipeSeri
.result()
.orElseThrow()

/**
* 指定された[recipe]を[dynamicOps]で[O]に変換します。
* @param O 変換先のクラス
* @return [DataResult]で包まれた[O]
*/
fun <O : Any> write(dynamicOps: DynamicOps<O>, recipe: T): DataResult<O> = createCodec(recipe.id).encodeStart(dynamicOps, recipe)

override fun read(id: Identifier, buf: PacketByteBuf): T = delegated.read(id, buf)
Expand Down
8 changes: 8 additions & 0 deletions src/main/kotlin/dev/robustum/core/recipe/FluidIngredient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ import net.minecraft.fluid.Fluids
import net.minecraft.tag.Tag
import java.util.function.BiPredicate

/**
* 液体版の[ItemIngredient]です。
* @param entryList 条件に一致する液体のリスト
* @param amount 必要な液体量
*/
@Suppress("UnstableApiUsage")
class FluidIngredient(val entryList: RegistryEntryList<Fluid>, val amount: Long = FluidConstants.BUCKET) : BiPredicate<Fluid, Long> {
companion object {
Expand All @@ -32,6 +37,9 @@ class FluidIngredient(val entryList: RegistryEntryList<Fluid>, val amount: Long

constructor(fluid: Fluid, amount: Long = FluidConstants.BUCKET) : this(RegistryEntryList.direct(fluid), amount)

/**
* この素材が有効かどうか判定します。
*/
val isEmpty: Boolean
get() = entryList.isEmpty || amount <= 0

Expand Down
11 changes: 11 additions & 0 deletions src/main/kotlin/dev/robustum/core/recipe/ItemIngredient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ import net.minecraft.recipe.Ingredient
import net.minecraft.tag.Tag
import java.util.function.Predicate

/**
* 個数を受け取る[Ingredient]のクラスです。
* @param entryList 条件に一致するアイテムのリスト
* @param count 必要な個数
*/
class ItemIngredient(val entryList: RegistryEntryList<Item>, val count: Int = 1) : Predicate<ItemStack> {
companion object {
@JvmField
Expand All @@ -32,9 +37,15 @@ class ItemIngredient(val entryList: RegistryEntryList<Item>, val count: Int = 1)

constructor(item: Item, count: Int = 1) : this(RegistryEntryList.direct(item), count)

/**
* この素材が有効かどうか判定します。
*/
val isEmpty: Boolean
get() = entryList.isEmpty || count <= 0

/**
* この素材をバニラの[Ingredient]に変換します。
*/
val vanillaIngredient: Ingredient
get() = when (isEmpty) {
true -> Ingredient.EMPTY
Expand Down
8 changes: 8 additions & 0 deletions src/main/kotlin/dev/robustum/core/recipe/RecipeCodec.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ import com.mojang.serialization.MapCodec
import net.minecraft.recipe.Recipe
import net.minecraft.util.Identifier

/**
* レシピの[MapCodec]を提供するインターフェースです。
* @param T レシピのクラス
*/
fun interface RecipeCodec<T : Recipe<*>> {
/**
* 指定された[id]をコンストラクタに渡すような[MapCodec]を返します。
* @see RobustumRecipeSerializers
*/
fun createCodec(id: Identifier): MapCodec<T>
}
24 changes: 12 additions & 12 deletions src/main/kotlin/dev/robustum/core/tag/RobustumTagEvents.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ import java.util.function.BiConsumer

object RobustumTagEvents {
/**
* [net.minecraft.tag.TagGroupLoader.prepareReload]の最後で呼び出される
* 動的に[Tag]を登録するイベントです。
*
* [net.minecraft.tag.TagGroupLoader.prepareReload]の最後で呼び出されます。
*/
@JvmField
val REGISTER: Event<Register> =
Expand All @@ -22,7 +24,9 @@ object RobustumTagEvents {
}

/**
* [net.minecraft.tag.ServerTagManagerHolder.setTagManager],[net.minecraft.client.network.ClientPlayNetworkHandler.onSynchronizeTags]の最後でそれぞれ呼び出される
* [TagManager]がリロードされた時に呼び出されるイベントです。
*
* [net.minecraft.tag.ServerTagManagerHolder.setTagManager],[net.minecraft.client.network.ClientPlayNetworkHandler.onSynchronizeTags]の最後でそれぞれ呼び出されます。
*/
@JvmField
val RELOAD: Event<Reload> = EventFactory.createArrayBacked(Reload::class.java) { callbacks: Array<out Reload> ->
Expand All @@ -38,24 +42,24 @@ object RobustumTagEvents {
// Helper //

/**
* 動的なタグの登録を補助するクラスです。
* @param registry 現在のレジストリ
* @param consumer 渡されたタグの[Identifier]とそのエントリ[Tag.Entry]を受け取る
* @param consumer 渡されたタグの[Identifier]とそのエントリ[Tag.Entry]を受け取るブロック
*/
class Helper(private val registry: Registry<*>, private val consumer: BiConsumer<Identifier, Tag.Entry>) {
/**
* [Tag]から[Identifier]を取得して登録します。
* @param registryKey 登録しようとしているレジストリのキー
* @param tag 登録しようとしているタグ,[Tag.Identified]を実装している必要がある
* @param values 指定したタグに紐づけようとしている値
* @param tag [Tag.Identified]を実装している必要があります。
*/
fun <T : Any> add(registryKey: RegistryKey<out Registry<T>>, tag: Tag<T>, vararg values: T) {
val tagId: Identifier = tag.idOrNull ?: return
add(registryKey, tagId, *values)
}

/**
* [tagId]に[values]を登録します。
* @param registryKey 登録しようとしているレジストリのキー
* @param tagId 登録しようとしているタグの[Identifier]
* @param values 指定したタグに紐づけようとしている値
*/
@Suppress("UNCHECKED_CAST")
fun <T : Any> add(registryKey: RegistryKey<out Registry<T>>, tagId: Identifier, vararg values: T) {
Expand All @@ -71,14 +75,10 @@ object RobustumTagEvents {

// Reload //

/**
* @see [net.minecraft.tag.ServerTagManagerHolder.setTagManager]
* @see [net.minecraft.client.network.ClientPlayNetworkHandler.onSynchronizeTags]
*/
fun interface Reload {
/**
* @param manager 各サイドにおける[TagManager]
* @param environment 各サイドにおける[EnvType]
* @param environment [net.minecraft.tag.ServerTagManagerHolder]では[EnvType.SERVER],[net.minecraft.client.network.ClientPlayNetworkHandler.onSynchronizeTags]では[EnvType.CLIENT]
*/
fun onReload(manager: TagManager, environment: EnvType)
}
Expand Down
17 changes: 12 additions & 5 deletions src/test/kotlin/test/codec/TestRobustumCodecs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ class TestRobustumCodecs {
}

@Test
fun testCodecs() {
// block
fun testBlock() {
RobustumCodecs.BLOCK
.encodeStart(JsonOps.INSTANCE, Blocks.STONE)
.onSucceeded { it.asString shouldBe "minecraft:stone" }
Expand All @@ -34,7 +33,10 @@ class TestRobustumCodecs {
RobustumCodecs.BLOCK
.encodeStart(JsonOps.INSTANCE, Blocks.AIR)
.onErrored { it shouldBe "Block must not be minecraft:air" }
// item
}

@Test
fun testItem() {
RobustumCodecs.ITEM
.encodeStart(JsonOps.INSTANCE, Items.IRON_INGOT)
.onSucceeded { it.asString shouldBe "minecraft:iron_ingot" }
Expand All @@ -43,7 +45,9 @@ class TestRobustumCodecs {
RobustumCodecs.ITEM
.encodeStart(JsonOps.INSTANCE, Items.AIR)
.onErrored { it shouldBe "Item must not be minecraft:air" }
// item stack
}

fun testItemStack() {
RobustumCodecs.ITEM_STACK
.encodeStart(JsonOps.INSTANCE, ItemStack(Items.IRON_INGOT, 4))
.onSucceeded {
Expand All @@ -57,7 +61,10 @@ class TestRobustumCodecs {
.encodeStart(JsonOps.INSTANCE, ItemStack.EMPTY)
.onSucceeded { it shouldBe JsonOps.INSTANCE.emptyMap() }
.onErrored(::error)
// ingredient (and registry entry list)
}

@Test
fun testIngredient() {
RobustumCodecs.INGREDIENT
.encodeStart(JsonOps.INSTANCE, Ingredient.ofItems(Items.DIAMOND))
.onSucceeded { it.asString shouldBe "minecraft:diamond" }
Expand Down
2 changes: 1 addition & 1 deletion src/test/kotlin/test/recipe/TestRobustumRecipes.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class TestRobustumRecipes {
}

@Test
fun testRecipes() {
fun testRecipe() {
RobustumRecipeSerializers.SMELTING
.write(
JsonOps.INSTANCE,
Expand Down
2 changes: 1 addition & 1 deletion src/test/kotlin/test/registry/TestRobustumRegistries.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class TestRobustumRegistries {
}

@Test
fun testRegistries() {
fun testRegistry() {
// lookup
RegistryLookup.BLOCK
.getId(Blocks.STONE)
Expand Down

0 comments on commit 981264c

Please sign in to comment.