Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 19 additions & 15 deletions src/api/kotlin/hiiragi283/ragium/api/RagiumAPI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ package hiiragi283.ragium.api

import com.mojang.logging.LogUtils
import com.mojang.serialization.MapCodec
import hiiragi283.ragium.api.data.map.HTEquipAction
import hiiragi283.ragium.api.data.map.HTMaterialRecipeData
import hiiragi283.ragium.api.data.registry.HTBrewingEffect
import hiiragi283.ragium.api.data.registry.HTSolarPower
import hiiragi283.ragium.api.material.HTMaterialPrefix
import hiiragi283.ragium.api.registry.toId
import net.minecraft.core.Registry
import net.minecraft.resources.ResourceKey
Expand All @@ -15,7 +15,7 @@ import org.slf4j.Logger
import java.util.ServiceLoader

/**
* @see [mekanism.api.MekanismAPI]
* @see mekanism.api.MekanismAPI
*/
object RagiumAPI {
/**
Expand Down Expand Up @@ -56,34 +56,38 @@ object RagiumAPI {

// Registry //

@JvmStatic
private fun <T : Any> createKey(path: String): ResourceKey<Registry<T>> = ResourceKey.createRegistryKey(id(path))

@JvmStatic
private fun <T : Any> createRegistry(key: ResourceKey<Registry<T>>): Registry<T> = RegistryBuilder<T>(key)
.sync(true)
.create()

// Builtin
@JvmField
val BREWING_EFFECT_KEY: ResourceKey<Registry<HTBrewingEffect>> = ResourceKey.createRegistryKey(id("brewing_effect"))
val EQUIP_ACTION_TYPE_KEY: ResourceKey<Registry<MapCodec<out HTEquipAction>>> = createKey("equip_action_type")

@JvmField
val MATERIAL_PREFIX_KEY: ResourceKey<Registry<HTMaterialPrefix>> = ResourceKey.createRegistryKey(id("material_prefix"))
val EQUIP_ACTION_TYPE_REGISTRY: Registry<MapCodec<out HTEquipAction>> = createRegistry(EQUIP_ACTION_TYPE_KEY)

@JvmField
val MATERIAL_PREFIX_REGISTRY: Registry<HTMaterialPrefix> = RegistryBuilder(MATERIAL_PREFIX_KEY)
.sync(true)
.create()
val MATERIAL_RECIPE_TYPE_KEY: ResourceKey<Registry<MapCodec<out HTMaterialRecipeData>>> = createKey("material_recipe_type")

@JvmField
val MATERIAL_RECIPE_TYPE_KEY: ResourceKey<Registry<MapCodec<out HTMaterialRecipeData>>> = ResourceKey.createRegistryKey(
id("material_recipe_type"),
)
val MATERIAL_RECIPE_TYPE_REGISTRY: Registry<MapCodec<out HTMaterialRecipeData>> = createRegistry(MATERIAL_RECIPE_TYPE_KEY)

// Dynamic
@JvmField
val MATERIAL_RECIPE_TYPE_REGISTRY: Registry<MapCodec<out HTMaterialRecipeData>> = RegistryBuilder(MATERIAL_RECIPE_TYPE_KEY)
.sync(true)
.create()
val BREWING_EFFECT_KEY: ResourceKey<Registry<HTBrewingEffect>> = createKey("brewing_effect")

@JvmField
val SOLAR_POWER_KEY: ResourceKey<Registry<HTSolarPower>> = ResourceKey.createRegistryKey(id("solar_power"))
val SOLAR_POWER_KEY: ResourceKey<Registry<HTSolarPower>> = createKey("solar_power")

// Service //

/**
* @see [mekanism.api.MekanismAPI.getService]
* @see mekanism.api.MekanismAPI.getService
*/
@Suppress("UnstableApiUsage")
@JvmStatic
Expand Down
9 changes: 3 additions & 6 deletions src/api/kotlin/hiiragi283/ragium/api/RagiumPlatform.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.google.gson.JsonObject
import hiiragi283.ragium.api.addon.RagiumAddon
import hiiragi283.ragium.api.material.HTMaterialDefinition
import hiiragi283.ragium.api.material.HTMaterialKey
import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix
import hiiragi283.ragium.api.recipe.manager.HTMaterialRecipeManager
import hiiragi283.ragium.api.recipe.manager.HTRecipeCache
import hiiragi283.ragium.api.recipe.manager.HTRecipeFinder
Expand All @@ -13,7 +14,6 @@ import hiiragi283.ragium.api.serialization.value.HTValueInput
import hiiragi283.ragium.api.serialization.value.HTValueOutput
import hiiragi283.ragium.api.storage.energy.HTEnergyBattery
import hiiragi283.ragium.api.storage.item.HTItemHandler
import io.wispforest.accessories.api.AccessoriesCapability
import net.minecraft.client.Minecraft
import net.minecraft.core.Holder
import net.minecraft.core.HolderLookup
Expand All @@ -23,7 +23,6 @@ import net.minecraft.resources.ResourceKey
import net.minecraft.server.MinecraftServer
import net.minecraft.server.level.ServerLevel
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.item.DyeColor
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.alchemy.Potion
Expand Down Expand Up @@ -60,6 +59,8 @@ interface RagiumPlatform {

fun getMaterialDefinition(key: HTMaterialKey): HTMaterialDefinition = getMaterialDefinitions()[key] ?: HTMaterialDefinition.Empty

fun getPrefix(name: String): HTMaterialPrefix?

// Recipe //

fun getMaterialRecipeManager(): HTMaterialRecipeManager
Expand Down Expand Up @@ -109,8 +110,4 @@ interface RagiumPlatform {
fun createValueInput(lookup: HolderLookup.Provider, compoundTag: CompoundTag): HTValueInput

fun createValueOutput(lookup: HolderLookup.Provider, compoundTag: CompoundTag): HTValueOutput

// Accessory //

fun getAccessoryCap(entity: LivingEntity): AccessoriesCapability? = AccessoriesCapability.get(entity)
}
7 changes: 7 additions & 0 deletions src/api/kotlin/hiiragi283/ragium/api/addon/RagiumAddon.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package hiiragi283.ragium.api.addon

import hiiragi283.ragium.api.material.prefix.HTPrefixLike
import hiiragi283.ragium.api.network.HTPayloadRegistrar
import net.minecraft.core.Holder
import net.minecraft.resources.ResourceKey
import net.minecraft.world.item.CreativeModeTab
Expand All @@ -13,6 +15,7 @@ import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent
import net.neoforged.fml.event.lifecycle.FMLDedicatedServerSetupEvent
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent
import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent
import java.util.function.Consumer

/**
* Ragiumのアドオン向けのインターフェース
Expand Down Expand Up @@ -44,8 +47,12 @@ interface RagiumAddon {

fun onClientSetup(event: FMLClientSetupEvent) {}

fun registerPayloads(registrar: HTPayloadRegistrar) {}

// Extension //

fun bindMaterialPrefixes(consumer: Consumer<HTPrefixLike>) {}

fun modifyComponents(event: ModifyDefaultComponentsEvent) {}

fun buildCreativeTabs(helper: CreativeTabHelper) {}
Expand Down
23 changes: 23 additions & 0 deletions src/api/kotlin/hiiragi283/ragium/api/data/map/HTEquipAction.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package hiiragi283.ragium.api.data.map

import com.mojang.serialization.Codec
import com.mojang.serialization.MapCodec
import hiiragi283.ragium.api.RagiumAPI
import net.minecraft.world.entity.player.Player
import net.minecraft.world.item.ItemStack
import java.util.function.Function

interface HTEquipAction {
companion object {
@JvmField
val CODEC: Codec<HTEquipAction> = RagiumAPI.EQUIP_ACTION_TYPE_REGISTRY
.byNameCodec()
.dispatch(HTEquipAction::type, Function.identity())
}

fun type(): MapCodec<out HTEquipAction>

fun onEquip(player: Player, stackTo: ItemStack)

fun onUnequip(player: Player, stackFrom: ItemStack)
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import hiiragi283.ragium.api.data.recipe.ingredient.HTFluidIngredientCreator
import hiiragi283.ragium.api.data.recipe.ingredient.HTItemIngredientCreator
import hiiragi283.ragium.api.material.HTMaterialKey
import hiiragi283.ragium.api.material.HTMaterialLike
import hiiragi283.ragium.api.material.HTMaterialPrefix
import hiiragi283.ragium.api.material.prefix.HTPrefixLike
import net.minecraft.advancements.Advancement
import net.minecraft.advancements.AdvancementHolder
import net.minecraft.core.HolderSet
Expand Down Expand Up @@ -77,7 +77,7 @@ interface HTMaterialRecipeData {
) {
fun getAllMaterials(): Set<HTMaterialKey> = RagiumPlatform.INSTANCE.getAllMaterials()

fun isPresentTag(prefix: HTMaterialPrefix, material: HTMaterialLike): Boolean = isPresentTag(prefix.itemTagKey(material))
fun isPresentTag(prefix: HTPrefixLike, material: HTMaterialLike): Boolean = isPresentTag(prefix.itemTagKey(material))

fun isPresentTag(tagKey: TagKey<Item>): Boolean {
val holderSet: Optional<HolderSet.Named<Item>> = access.lookupOrThrow(Registries.ITEM).get(tagKey)
Expand Down
20 changes: 13 additions & 7 deletions src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMaps.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import net.minecraft.core.RegistryAccess
import net.minecraft.core.registries.Registries
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.entity.EntityType
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.RecipeType
import net.minecraft.world.item.enchantment.Enchantment
Expand All @@ -29,6 +30,12 @@ interface RagiumDataMaps {
@JvmField
val INSTANCE: RagiumDataMaps = RagiumAPI.getService()

@JvmField
val ENCHANT_FUEL: DataMapType<Enchantment, LevelBasedValue> = INSTANCE.enchFuelType

@JvmField
val MOB_HEAD: DataMapType<EntityType<*>, HTMobHead> = INSTANCE.mobHeadType

@JvmField
val THERMAL_FUEL: DataMapType<Fluid, HTFluidFuelData> = INSTANCE.thermalFuelType

Expand All @@ -39,22 +46,21 @@ interface RagiumDataMaps {
val NUCLEAR_FUEL: DataMapType<Fluid, HTFluidFuelData> = INSTANCE.nuclearFuelType

@JvmField
val ENCHANT_FUEL: DataMapType<Enchantment, LevelBasedValue> = INSTANCE.enchFuelType

@JvmField
val MOB_HEAD: DataMapType<EntityType<*>, HTMobHead> = INSTANCE.mobHeadType
val ARMOR_EQUIP: DataMapType<Item, HTEquipAction> = INSTANCE.armorEquipType

@JvmField
val MATERIAL_RECIPE: IdMapDataMap<RecipeType<*>, HTMaterialRecipeData> = INSTANCE.materialRecipeType
}

val enchFuelType: DataMapType<Enchantment, LevelBasedValue>

val mobHeadType: DataMapType<EntityType<*>, HTMobHead>

val thermalFuelType: DataMapType<Fluid, HTFluidFuelData>
val combustionFuelType: DataMapType<Fluid, HTFluidFuelData>
val nuclearFuelType: DataMapType<Fluid, HTFluidFuelData>

val enchFuelType: DataMapType<Enchantment, LevelBasedValue>

val mobHeadType: DataMapType<EntityType<*>, HTMobHead>
val armorEquipType: DataMapType<Item, HTEquipAction>

val materialRecipeType: IdMapDataMap<RecipeType<*>, HTMaterialRecipeData>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package hiiragi283.ragium.api.data.map.equip

import com.mojang.serialization.MapCodec
import hiiragi283.ragium.api.data.map.HTEquipAction
import net.minecraft.core.Holder
import net.minecraft.world.effect.MobEffect
import net.minecraft.world.effect.MobEffectInstance
import net.minecraft.world.entity.player.Player
import net.minecraft.world.item.ItemStack

data class HTMobEffectEquipAction(private val instance: MobEffectInstance) : HTEquipAction {
companion object {
@JvmField
val CODEC: MapCodec<HTMobEffectEquipAction> = MobEffectInstance.CODEC
.fieldOf("effect")
.xmap(::HTMobEffectEquipAction, HTMobEffectEquipAction::instance)
}

constructor(
effect: Holder<MobEffect>,
duration: Int,
amplifier: Int = 0,
ambient: Boolean = false,
visible: Boolean = true,
) : this(MobEffectInstance(effect, duration, amplifier, ambient, visible))

override fun type(): MapCodec<out HTEquipAction> = CODEC

override fun onEquip(player: Player, stackTo: ItemStack) {
player.addEffect(instance)
}

override fun onUnequip(player: Player, stackFrom: ItemStack) {
player.removeEffect(instance.effect)
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package hiiragi283.ragium.api.data.recipe

import hiiragi283.ragium.api.material.HTMaterialLike
import hiiragi283.ragium.api.material.HTMaterialPrefix
import hiiragi283.ragium.api.material.prefix.HTPrefixLike
import net.minecraft.tags.TagKey
import net.minecraft.world.item.Item
import net.minecraft.world.item.crafting.Ingredient
Expand All @@ -12,7 +12,7 @@ import net.minecraft.world.level.ItemLike
* @param BUILDER [HTRecipeBuilder]を継承したクラス
*/
interface HTIngredientRecipeBuilder<BUILDER : HTIngredientRecipeBuilder<BUILDER>> : HTRecipeBuilder {
fun addIngredient(prefix: HTMaterialPrefix, key: HTMaterialLike): BUILDER = addIngredient(prefix.itemTagKey(key))
fun addIngredient(prefix: HTPrefixLike, key: HTMaterialLike): BUILDER = addIngredient(prefix.itemTagKey(key))

fun addIngredient(tagKey: TagKey<Item>): BUILDER = addIngredient(Ingredient.of(tagKey))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package hiiragi283.ragium.api.data.recipe

import hiiragi283.ragium.api.RagiumConst
import hiiragi283.ragium.api.material.HTMaterialLike
import hiiragi283.ragium.api.material.HTMaterialPrefix
import hiiragi283.ragium.api.material.prefix.HTPrefixLike
import net.minecraft.advancements.Criterion
import net.minecraft.data.recipes.RecipeBuilder
import net.minecraft.data.recipes.RecipeOutput
Expand Down Expand Up @@ -73,7 +73,7 @@ interface HTRecipeBuilder : RecipeBuilder {
}
}

fun tagCondition(prefix: HTMaterialPrefix, material: HTMaterialLike): Prefixed = tagCondition(prefix.itemTagKey(material))
fun tagCondition(prefix: HTPrefixLike, material: HTMaterialLike): Prefixed = tagCondition(prefix.itemTagKey(material))

fun tagCondition(tagKey: TagKey<Item>): Prefixed = addCondition(NotCondition(TagEmptyCondition(tagKey)))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package hiiragi283.ragium.api.data.recipe

import hiiragi283.ragium.api.RagiumAPI
import hiiragi283.ragium.api.material.HTMaterialLike
import hiiragi283.ragium.api.material.HTMaterialPrefix
import hiiragi283.ragium.api.material.prefix.HTPrefixLike
import hiiragi283.ragium.api.recipe.result.HTFluidResult
import hiiragi283.ragium.api.recipe.result.HTItemResult
import hiiragi283.ragium.api.recipe.result.HTRecipeResult
Expand Down Expand Up @@ -69,7 +69,7 @@ interface HTResultHelper {
/**
* 指定した引数から[HTItemResult]を返します。
*/
fun item(prefix: HTMaterialPrefix, material: HTMaterialLike, count: Int = 1): HTItemResult = item(prefix.itemTagKey(material), count)
fun item(prefix: HTPrefixLike, material: HTMaterialLike, count: Int = 1): HTItemResult = item(prefix.itemTagKey(material), count)

/**
* 指定した引数から[HTItemResult]を返します。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@ package hiiragi283.ragium.api.data.recipe.ingredient

import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient
import hiiragi283.ragium.api.registry.HTFluidContent
import net.minecraft.core.HolderSet
import net.minecraft.world.level.material.Fluid

/**
* [HTFluidIngredient]を返す[HTIngredientCreator]の拡張インターフェース
* @see mekanism.api.recipes.ingredients.creator.IFluidStackIngredientCreator
*/
interface HTFluidIngredientCreator : HTIngredientCreator<Fluid, HTFluidIngredient> {
override fun fromSet(holderSet: HolderSet<Fluid>, amount: Int): HTFluidIngredient = HTFluidIngredient.of(holderSet, amount)

fun fromContent(content: HTFluidContent<*, *, *>, amount: Int): HTFluidIngredient = fromTagKey(content.commonTag, amount)

fun water(amount: Int): HTFluidIngredient = fromContent(HTFluidContent.WATER, amount)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package hiiragi283.ragium.api.data.recipe.ingredient

import hiiragi283.ragium.api.recipe.ingredient.HTIngredient
import hiiragi283.ragium.api.serialization.codec.BiCodec
import net.minecraft.core.Holder
import net.minecraft.core.HolderSet
import net.minecraft.network.RegistryFriendlyByteBuf
import net.minecraft.tags.TagKey

/**
Expand Down Expand Up @@ -36,7 +34,4 @@ interface HTIngredientCreator<TYPE : Any, INGREDIENT : HTIngredient<TYPE, *>> {
fun fromTagKeys(vararg tagKeys: TagKey<TYPE>, amount: Int): INGREDIENT = fromTagKeys(tagKeys.toList(), amount)

fun fromTagKeys(tagKeys: Iterable<TagKey<TYPE>>, amount: Int): INGREDIENT

// Codec
fun codec(): BiCodec<RegistryFriendlyByteBuf, INGREDIENT>
}
Loading