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
85 changes: 78 additions & 7 deletions src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package hiiragi283.ragium.client

import hiiragi283.lib.HTConstants
import hiiragi283.lib.capability.HTFluidCapabilities
import hiiragi283.lib.event.HTRegisterWidgetRendererEvent
import hiiragi283.lib.fluid.FluidStackTintSource
import hiiragi283.lib.fluid.HTFluidModelRegister
import hiiragi283.lib.item.alchemy.HTPotionHelper
import hiiragi283.lib.mod.HTClientMod
import hiiragi283.lib.network.HTPayloadHandlers
import hiiragi283.lib.resource.vanillaId
import hiiragi283.lib.text.HTCommonTranslation
import hiiragi283.lib.text.Text
import hiiragi283.lib.transfer.fluid.HTFluidView
import hiiragi283.ragium.api.RagiumAPI
import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper
import hiiragi283.ragium.api.data.chemical.HTClientChemicalHelper
import hiiragi283.ragium.api.tag.RagiumTags
import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen
import hiiragi283.ragium.client.gui.screen.tooltip.HTMemoryDiscClientTooltipComponent
import hiiragi283.ragium.client.gui.widget.HTEnergySlotWidgetRenderer
Expand All @@ -25,9 +30,11 @@ import hiiragi283.ragium.common.gui.widget.RagiumWidgetTypes
import hiiragi283.ragium.common.item.tooltip.HTMemoryDiscTooltipComponent
import hiiragi283.ragium.common.network.HTUpdateBlockEntityPacket
import hiiragi283.ragium.common.network.HTUpdateMenuPacket
import net.minecraft.ChatFormatting
import net.minecraft.client.resources.model.sprite.Material
import net.minecraft.util.ARGB
import net.minecraft.world.item.DyeColor
import net.minecraft.world.item.ItemStack
import net.neoforged.api.distmarker.Dist
import net.neoforged.bus.api.IEventBus
import net.neoforged.fml.ModContainer
Expand All @@ -36,16 +43,22 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent
import net.neoforged.neoforge.client.event.EntityRenderersEvent
import net.neoforged.neoforge.client.event.RegisterClientTooltipComponentFactoriesEvent
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent
import net.neoforged.neoforge.client.fluid.FluidTintSources
import net.neoforged.neoforge.client.network.event.RegisterClientPayloadHandlersEvent
import net.neoforged.neoforge.common.tooltip.TooltipLocation
import net.neoforged.neoforge.event.RegisterTooltipAppendersEvent
import net.neoforged.neoforge.fluids.FluidStack
import net.neoforged.neoforge.transfer.fluid.FluidResource
import java.awt.Color
import java.util.function.Consumer

@Mod(value = RagiumAPI.MOD_ID, dist = [Dist.CLIENT])
data object RagiumClient : HTClientMod() {
override fun initialize(eventBus: IEventBus, container: ModContainer) {
eventBus.addListener { event: RegisterClientTooltipComponentFactoriesEvent ->
event.register(HTMemoryDiscTooltipComponent::class.java, ::HTMemoryDiscClientTooltipComponent)
}
eventBus.addListener(::registerTooltipAppenders)

configScreen(container)
}
Expand Down Expand Up @@ -112,6 +125,10 @@ data object RagiumClient : HTClientMod() {
transparent()
colorTint(Color(0x003399))
}
register.register(RagiumFluids.NITROGEN) {
transparent()
colorTint(Color(0x009999))
}
register.register(RagiumFluids.OXYGEN) {
transparent()
colorTint(Color(0x3399cc))
Expand All @@ -121,6 +138,10 @@ data object RagiumClient : HTClientMod() {
colorTint(Color(0x99cc33))
}

register.register(RagiumFluids.CARBON_DIOXIDE) {
transparent()
colorTint(Color(0x336699))
}
register.register(RagiumFluids.WOOD_TAR) {
molten()
colorTint(Color(0x663333))
Expand Down Expand Up @@ -170,6 +191,10 @@ data object RagiumClient : HTClientMod() {
colorTint(Color(0x33cc66))
}

register.register(RagiumFluids.SALT_WATER) {
dull()
tintSource = FluidTintSources.water()
}
register.register(RagiumFluids.NAOH_SOLUTION) {
dull()
colorTint(Color(0x003366))
Expand Down Expand Up @@ -202,12 +227,9 @@ data object RagiumClient : HTClientMod() {
dull()
colorTint(Color(0xccff99))
}

register.register(RagiumFluids.ORE_SLURRY) {
still = Material(vanillaId(HTConstants.BLOCK, "white_concrete_powder"))
tintSource = FluidStackTintSource { stack: FluidStack ->
ARGB.opaque(HTOreSlurryDataHelper.getData(stack)?.color ?: 0x333300)
}
register.register(RagiumFluids.CAOH_SOLUTION) {
dull()
colorTint(Color(0x333399))
}
}

Expand All @@ -219,4 +241,53 @@ data object RagiumClient : HTClientMod() {
event.registerBlockEntityRenderer(RagiumBlockEntityTypes.TANK.get(), ::HTTankBlockEntityRenderer)
event.registerBlockEntityRenderer(RagiumBlockEntityTypes.CREATIVE_TANK.get(), ::HTTankBlockEntityRenderer)
}

@JvmStatic
private fun registerTooltipAppenders(event: RegisterTooltipAppendersEvent) {
event.registerAppender(
TooltipLocation.HEAD
) { stack: ItemStack, _, _, _, _, builder: Consumer<Text> ->
if (!stack.`is`(RagiumTags.Items.SHOW_FLUID_TOOLTIPS)) return@registerAppender
val view: HTFluidView = HTFluidCapabilities.getSlot(stack, 0) ?: return@registerAppender
val isCreative: Boolean = stack.`is`(RagiumTags.BlockItem.STORAGES_CREATIVE.item)
// Fluid Name
val resource: FluidResource = view.resource
when {
resource.isEmpty -> HTCommonTranslation.EMPTY.translateColored(ChatFormatting.RED)

isCreative -> HTCommonTranslation.STORED.translateColored(
ChatFormatting.LIGHT_PURPLE,
resource.hoverName,
ChatFormatting.GRAY,
HTCommonTranslation.INFINITE
)

else -> HTCommonTranslation.STORED_MB.translateColored(
ChatFormatting.LIGHT_PURPLE,
resource.hoverName,
ChatFormatting.GRAY,
view.amount
)
}.let(builder::accept)
// Tank Capacity
when (isCreative) {
true -> HTCommonTranslation.CAPACITY.translateColored(
ChatFormatting.BLUE,
ChatFormatting.GRAY,
HTCommonTranslation.INFINITE
)

false -> HTCommonTranslation.CAPACITY_MB.translateColored(
ChatFormatting.BLUE,
ChatFormatting.GRAY,
view.currentCapacity
)
}.let(builder::accept)
}
event.registerAppender(
TooltipLocation.HEAD
) { stack: ItemStack, _, _, _, _, builder: Consumer<Text> ->
HTClientChemicalHelper.addToTooltip(stack, builder::accept)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package hiiragi283.ragium.client.event

import hiiragi283.lib.item.alchemy.HTPotionHelper
import hiiragi283.lib.text.Text
import hiiragi283.ragium.api.RagiumAPI
import hiiragi283.ragium.api.data.chemical.HTClientChemicalHelper
import hiiragi283.ragium.common.fluid.RagiumFluids
import net.neoforged.api.distmarker.Dist
import net.neoforged.bus.api.SubscribeEvent
Expand All @@ -14,8 +16,12 @@ data object RagiumClientEventHandler {
@SubscribeEvent
fun onFluidTooltip(event: FluidTooltipEvent) {
val stack: FluidStack = event.fluidStack
val appender: (Text) -> Unit = event.toolTip::add
// Potion Fluid
if (RagiumFluids.POTION.isOf(stack)) {
HTPotionHelper.getContents(stack).addToTooltip(event.context, event.toolTip::add, event.flags, stack)
HTPotionHelper.getContents(stack).addToTooltip(event.context, appender, event.flags, stack)
}
// Chemical Tooltip
HTClientChemicalHelper.addToTooltip(stack, appender)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@ import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient
import hiiragi283.lib.registry.asHolderSequence
import hiiragi283.lib.registry.getKeyOrThrow
import hiiragi283.ragium.api.RagiumAPI
import hiiragi283.ragium.api.RagiumRegistries
import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData
import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper
import hiiragi283.ragium.api.data.RagiumDataComponents
import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders
import hiiragi283.ragium.api.recipe.RagiumRecipeLookups
import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen
Expand All @@ -28,6 +26,7 @@ import hiiragi283.ragium.client.integration.jei.category.RTEnchantingRecipeCateg
import hiiragi283.ragium.client.integration.jei.category.RTReactingRecipeCategory
import hiiragi283.ragium.client.integration.jei.category.RTRefiningRecipeCategory
import hiiragi283.ragium.client.integration.jei.category.RTResourceExtractingRecipeCategory
import hiiragi283.ragium.client.integration.jei.category.RTWashingRecipeCategory
import hiiragi283.ragium.common.block.RagiumBlocks
import hiiragi283.ragium.common.fluid.RagiumFluids
import hiiragi283.ragium.common.recipe.RTPotionBottleDrainingRecipe
Expand All @@ -45,15 +44,12 @@ import mezz.jei.api.registration.IRecipeCategoryRegistration
import mezz.jei.api.registration.IRecipeRegistration
import mezz.jei.api.registration.ISubtypeRegistration
import net.minecraft.core.Holder
import net.minecraft.core.component.DataComponents
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.alchemy.Potion
import net.minecraft.world.item.alchemy.Potions
import net.minecraft.world.item.crafting.display.SlotDisplay
import net.neoforged.neoforge.common.Tags
import net.neoforged.neoforge.fluids.FluidStack
import net.neoforged.neoforge.fluids.crafting.display.FluidTagSlotDisplay

@JeiPlugin
class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) {
Expand All @@ -75,15 +71,12 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) {
.map(Holder<Item>::value)
.forEach { item: Item ->
if (item is HTPotionBasedItem) {
registration.registerSubtypeInterpreter(item) { stack: ItemStack, _ ->
HTPotionHelper.getContents(stack)
}
registration.registerFromDataComponentTypes(item, DataComponents.POTION_CONTENTS)
}
}
// Ore Slurry Bucket
registration.registerSubtypeInterpreter(RagiumFluids.ORE_SLURRY.bucketHolder.get()) { stack: ItemStack, _ ->
HTOreSlurryDataHelper.getData(stack)
}

// Creative Tank
registration.registerFromDataComponentTypes(RagiumBlocks.CREATIVE_TANK.asItem(), RagiumDataComponents.FLUID)
}

override fun <T : Any> registerFluidSubtypes(
Expand All @@ -94,10 +87,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) {
NeoForgeTypes.FLUID_STACK,
RagiumFluids.POTION.getOrThrow()
) { stack: FluidStack, _ -> HTPotionHelper.getContents(stack) }
registration.registerSubtypeInterpreter(
NeoForgeTypes.FLUID_STACK,
RagiumFluids.ORE_SLURRY.getOrThrow()
) { stack: FluidStack, _ -> HTOreSlurryDataHelper.getHolder(stack) }
}

override fun registerIngredients(registration: IModIngredientRegistration) {
Expand All @@ -112,13 +101,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) {
.map(HTPotionHelper::createFluid)
.toList()
)
registration.addExtraIngredients(
NeoForgeTypes.FLUID_STACK,
HTPhysicalSideHelper.registryOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA)
.asHolderSequence()
.map(HTOreSlurryDataHelper::createFluid)
.toList()
)
}

override fun registerCategories(registration: IRecipeCategoryRegistration) {
Expand All @@ -143,6 +125,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) {
RTElectrolyzingRecipeCategory(guiHelper),
HTItemAndFluidToFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.MIXING),
RTReactingRecipeCategory(guiHelper),
RTWashingRecipeCategory(guiHelper),
// Bio
HTItemAndFluidToFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.BREWING),
HTItemToDoubleItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.PLANTING),
Expand All @@ -169,17 +152,18 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) {
HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.REFINING, RagiumRecipeLookups.REFINING)
// Chemical
HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.BATHING, RagiumRecipeLookups.BATHING)
HTJeiRecipeHelper.addRecipes(
registration,
RagiumJeiRecipeTypes.ELECTROLYZING,
RagiumRecipeLookups.ELECTROLYZING
)
HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.MIXING, RagiumRecipeLookups.MIXING)
HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.REACTING, RagiumRecipeLookups.REACTING)
HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.WASHING, RagiumRecipeLookups.WASHING)
// Bio
HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.BREWING, RagiumRecipeLookups.BREWING)
HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.PLANTING, RagiumRecipeLookups.PLANTING)
// Electronics
HTJeiRecipeHelper.addRecipes(
registration,
RagiumJeiRecipeTypes.ELECTROLYZING,
RagiumRecipeLookups.ELECTROLYZING
)
HTJeiRecipeHelper.addRecipes(
registration,
RagiumJeiRecipeTypes.RESOURCE_EXTRACTING,
Expand Down Expand Up @@ -235,34 +219,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) {
}.toList()
)
// Chemical
registration.addRecipes(
RagiumJeiRecipeTypes.MIXING,
listItems()
.mapNotNull { input: Holder<Item> ->
val result: FluidStack =
HTOreSlurryDataHelper.createFluid(input.components()) ?: return@mapNotNull null
RagiumRecipeBuilders.mixing {
itemIngredient = HTJeiRecipeHelper.fakeItem(SlotDisplay.ItemSlotDisplay(input))
fluidIngredient = HTJeiRecipeHelper.fakeFluid(RagiumFluids.SULFURIC_ACID)
result { from(result) }
recipeId replace input.getKeyOrThrow().identifier().withPrefix("solving/")
}.buildSynthetic()
}.toList()
)

registration.addRecipes(
RagiumJeiRecipeTypes.REACTING,
HTPhysicalSideHelper.registryOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA)
.asHolderSequence()
.map { holder: Holder<HTOreSlurryData> ->
RagiumRecipeBuilders.reacting {
primaryIngredient = HTJeiRecipeHelper.fakeFluid(HTOreSlurryDataHelper.createFluid(holder))
secondaryIngredient = HTJeiRecipeHelper.fakeFluid(FluidTagSlotDisplay(Tags.Fluids.WATER))
+holder.value().result
recipeId replace holder.getKeyOrThrow().identifier().withPrefix("ore_slurry/")
}.buildSynthetic()
}.toList()
)
}

override fun registerRecipeCatalysts(registration: IRecipeCatalystRegistration) {
Expand All @@ -283,12 +239,12 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) {
// Chemical
registration.addCraftingStation(RagiumJeiRecipeTypes.BATHING, RagiumBlocks.CHEMICAL_BATH)
registration.addCraftingStation(RagiumJeiRecipeTypes.REACTING, RagiumBlocks.CHEMICAL_REACTOR)
registration.addCraftingStation(RagiumJeiRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER)
registration.addCraftingStation(RagiumJeiRecipeTypes.MIXING, RagiumBlocks.MIXER)
// Bio
registration.addCraftingStation(RagiumJeiRecipeTypes.BREWING, RagiumBlocks.BREWERY)
registration.addCraftingStation(RagiumJeiRecipeTypes.PLANTING, RagiumBlocks.PLANTER)
// Electronics
registration.addCraftingStation(RagiumJeiRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER)
registration.addCraftingStation(RagiumJeiRecipeTypes.ASSEMBLING, RagiumBlocks.PRECISION_ASSEMBLER)
// Arcane
registration.addCraftingStation(RagiumJeiRecipeTypes.ENCHANTING, RagiumBlocks.ENCHANTER)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package hiiragi283.ragium.client.integration.jei

import hiiragi283.lib.integration.jei.HTHolderJeiRecipeType
import hiiragi283.lib.integration.jei.HTJeiRecipeType
import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe
import hiiragi283.lib.recipe.base.HTFluidToRecipe
import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe
import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe
Expand All @@ -13,6 +14,7 @@ import hiiragi283.ragium.api.recipe.RTEnchantingRecipe
import hiiragi283.ragium.api.recipe.RTReactingRecipe
import hiiragi283.ragium.api.recipe.RTRefiningRecipe
import hiiragi283.ragium.api.recipe.RTResourceExtractingRecipe
import hiiragi283.ragium.api.recipe.RTWashingRecipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.common.block.RagiumBlocks

Expand Down Expand Up @@ -69,8 +71,8 @@ data object RagiumJeiRecipeTypes {
HTJeiRecipeType(RagiumRecipeTypes.BATHING, RagiumBlocks.CHEMICAL_BATH)

@JvmField
val ELECTROLYZING: HTHolderJeiRecipeType<RTElectrolyzingRecipe> =
HTJeiRecipeType(RagiumRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER)
val CENTRIFUGING: HTHolderJeiRecipeType<HTFluidToDoubleFluidRecipe.Basic> =
HTJeiRecipeType(RagiumRecipeTypes.CENTRIFUGING, RagiumBlocks.CHEMICAL_BATH)

@JvmField
val MIXING: HTHolderJeiRecipeType<HTItemAndFluidToRecipe.BasicFluid> =
Expand All @@ -80,6 +82,10 @@ data object RagiumJeiRecipeTypes {
val REACTING: HTHolderJeiRecipeType<RTReactingRecipe.Basic> =
HTJeiRecipeType(RagiumRecipeTypes.REACTING, RagiumBlocks.CHEMICAL_REACTOR)

@JvmField
val WASHING: HTHolderJeiRecipeType<RTWashingRecipe> =
HTJeiRecipeType(RagiumRecipeTypes.WASHING, RagiumBlocks.MACHINE_CASING)

// Bio
@JvmField
val BREWING: HTHolderJeiRecipeType<HTItemAndFluidToRecipe.BasicFluid> =
Expand All @@ -90,6 +96,10 @@ data object RagiumJeiRecipeTypes {
HTJeiRecipeType(RagiumRecipeTypes.PLANTING, RagiumBlocks.PLANTER)

// Electronics
@JvmField
val ELECTROLYZING: HTHolderJeiRecipeType<RTElectrolyzingRecipe> =
HTJeiRecipeType(RagiumRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER)

@JvmField
val RESOURCE_EXTRACTING: HTHolderJeiRecipeType<RTResourceExtractingRecipe> =
HTJeiRecipeType(RagiumRecipeTypes.RESOURCE_EXTRACTING, RagiumBlocks.MACHINE_CASING)
Expand Down
Loading
Loading