jade compat

DBot — Сегодня, в 6:21
Не думай.
This commit is contained in:
YuRaNnNzZZ 2023-07-15 07:48:59 +03:00
parent 027d6ef65f
commit f2e4c80d31
Signed by: YuRaNnNzZZ
GPG Key ID: 5F71738C85A6006D
12 changed files with 436 additions and 2 deletions

View File

@ -193,7 +193,7 @@ dependencies {
compileOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-forge-api:${jei_version}")) compileOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-forge-api:${jei_version}"))
//runtimeOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-forge:${jei_version}")) //runtimeOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-forge:${jei_version}"))
//runtimeOnly(fg.deobf("curse.maven:jade-324717:${jade_id}")) implementation(fg.deobf("curse.maven:jade-324717:${jade_id}"))
//runtimeOnly(fg.deobf("curse.maven:configured-457570:${configured_id}")) //runtimeOnly(fg.deobf("curse.maven:configured-457570:${configured_id}"))
compileOnly(fg.deobf("curse.maven:resourceful-lib-570073:${resourceful_lib_id}")) compileOnly(fg.deobf("curse.maven:resourceful-lib-570073:${resourceful_lib_id}"))

View File

@ -30,7 +30,7 @@ ad_astra_id=4594155
botarium_id=4594094 botarium_id=4594094
resourceful_lib_id=4598948 resourceful_lib_id=4598948
resourceful_config_id=4576455 resourceful_config_id=4576455
jade_id=4573193 jade_id=4614153
configured_id=4462894 configured_id=4462894
kotlin_for_forge_version=3.1.0 kotlin_for_forge_version=3.1.0

View File

@ -777,6 +777,21 @@ private fun gui(provider: MatteryLanguageProvider) {
} }
} }
private fun jade(provider: MatteryLanguageProvider) {
with(provider.english) {
jadeloc("matter_storage", "Matter Storage")
jadeloc("mattery_energy", "Energy Storage")
jadeloc("mattery_worker", "Machine Job Progress")
jadeloc("matter_bottler", "Matter Bottler Mode")
jadeloc("matter_reconstructor", "Matter Reconstructor Progress")
jade("mode", "Mode: %s")
jade("matter_bottler.mode.fill", "Filling")
jade("matter_bottler.mode.drain", "Emptying")
}
}
fun AddEnglishLanguage(provider: MatteryLanguageProvider) { fun AddEnglishLanguage(provider: MatteryLanguageProvider) {
decoratives(provider) decoratives(provider)
sounds(provider) sounds(provider)
@ -791,6 +806,8 @@ fun AddEnglishLanguage(provider: MatteryLanguageProvider) {
research(provider) research(provider)
gui(provider) gui(provider)
jade(provider)
with(provider.english) { with(provider.english) {
add("itemGroup.otm", "Overdrive That Matters") add("itemGroup.otm", "Overdrive That Matters")
add("itemGroup.otm_decorative", "Overdrive That Matters Decorative") add("itemGroup.otm_decorative", "Overdrive That Matters Decorative")

View File

@ -21,6 +21,7 @@ import ru.dbotthepony.mc.otm.android.AndroidFeatureType
import ru.dbotthepony.mc.otm.android.AndroidResearch import ru.dbotthepony.mc.otm.android.AndroidResearch
import ru.dbotthepony.mc.otm.android.AndroidResearchType import ru.dbotthepony.mc.otm.android.AndroidResearchType
import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock
private fun researchString(key: AndroidResearchType): String { private fun researchString(key: AndroidResearchType): String {
@ -104,6 +105,9 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
fun sound(key: String, value: String) = slave.add("otm.sound.$key", value) fun sound(key: String, value: String) = slave.add("otm.sound.$key", value)
fun sound(key: SoundEvent, value: String) = slave.add("otm.sound.${key.location.path}", value) fun sound(key: SoundEvent, value: String) = slave.add("otm.sound.${key.location.path}", value)
fun jade(key: String, value: String) = slave.add("otm.jade.$key", value)
fun jadeloc(key: String, value: String) = slave.add("config.jade.plugin_${DataGen.MOD_ID}.$key", value)
inner class Prepended(path: String) { inner class Prepended(path: String) {
val path = "$path." val path = "$path."
constructor(vararg path: String) : this(path.joinToString(".")) constructor(vararg path: String) : this(path.joinToString("."))

View File

@ -778,6 +778,21 @@ private fun gui(provider: MatteryLanguageProvider) {
} }
} }
private fun jade(provider: MatteryLanguageProvider) {
with(provider.russian) {
jadeloc("matter_storage", "Хранилище материи")
jadeloc("mattery_energy", "Хранилище энергии")
jadeloc("mattery_worker", "Прогресс работы механизма")
jadeloc("matter_bottler", "Режим бутилировщика материи")
jadeloc("matter_reconstructor", "Прогресс материального реконструктора")
jade("mode", "Режим: %s")
jade("matter_bottler.mode.fill", "Заполнение")
jade("matter_bottler.mode.drain", "Опустошение")
}
}
fun AddRussianLanguage(provider: MatteryLanguageProvider) { fun AddRussianLanguage(provider: MatteryLanguageProvider) {
decoratives(provider) decoratives(provider)
blocks(provider) blocks(provider)
@ -789,4 +804,5 @@ fun AddRussianLanguage(provider: MatteryLanguageProvider) {
research(provider) research(provider)
death(provider) death(provider)
androidFeatures(provider) androidFeatures(provider)
jade(provider)
} }

View File

@ -0,0 +1,22 @@
package ru.dbotthepony.mc.otm.compat.jade
import net.minecraft.resources.ResourceLocation
import ru.dbotthepony.mc.otm.OverdriveThatMatters.loc
object JadeUids {
val MATTERY_ENERGY: ResourceLocation = loc("mattery_energy")
val MATTER_STORAGE: ResourceLocation = loc("matter_storage")
val MATTERY_WORKER: ResourceLocation = loc("mattery_worker")
val MATTER_BOTTLER: ResourceLocation = loc("matter_bottler")
val MATTER_RECONSTRUCTOR: ResourceLocation = loc("matter_reconstructor")
}
object JadeTagKeys {
val MATTERY_ENERGY_DATA = "otmJadeMatteryEnergyData"
val MATTER_STORAGE_DATA = "otmJadeMatterStorageData"
val MATTERY_WORKER_DATA = "otmJadeMatteryWorkerData"
val MATTER_BOTTLER_DATA = "otmJadeMatterBottlerData"
val MATTER_RECONSTRUCTOR_DATA = "otmJadeMatterReconstructorData"
}

View File

@ -0,0 +1,38 @@
package ru.dbotthepony.mc.otm.compat.jade
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.entity.BlockEntity
import ru.dbotthepony.mc.otm.block.MatteryBlock
import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity
import ru.dbotthepony.mc.otm.block.entity.matter.MatterBottlerBlockEntity
import ru.dbotthepony.mc.otm.block.entity.matter.MatterReconstructorBlockEntity
import ru.dbotthepony.mc.otm.block.entity.matter.MatterReplicatorBlockEntity
import ru.dbotthepony.mc.otm.block.entity.matter.MatterScannerBlockEntity
import ru.dbotthepony.mc.otm.block.matter.MatterBottlerBlock
import ru.dbotthepony.mc.otm.block.matter.MatterReconstructorBlock
import ru.dbotthepony.mc.otm.block.matter.MatterReplicatorBlock
import ru.dbotthepony.mc.otm.block.matter.MatterScannerBlock
import ru.dbotthepony.mc.otm.compat.jade.providers.*
import snownee.jade.api.IWailaClientRegistration
import snownee.jade.api.IWailaCommonRegistration
import snownee.jade.api.IWailaPlugin
import snownee.jade.api.WailaPlugin
@WailaPlugin
class JadePlugin : IWailaPlugin {
override fun register(reg: IWailaCommonRegistration) {
reg.registerBlockDataProvider(MatterStorageProvider, BlockEntity::class.java)
reg.registerBlockDataProvider(MatteryEnergyProvider, BlockEntity::class.java)
reg.registerBlockDataProvider(MatteryWorkerProvider, MatteryWorkerBlockEntity::class.java)
reg.registerBlockDataProvider(MatterBottlerProvider, MatterBottlerBlockEntity::class.java)
reg.registerBlockDataProvider(MatterReconstructorProvider, MatterReconstructorBlockEntity::class.java)
}
override fun registerClient(reg: IWailaClientRegistration) {
reg.registerBlockComponent(MatteryEnergyProvider, Block::class.java)
reg.registerBlockComponent(MatterStorageProvider, Block::class.java)
reg.registerBlockComponent(MatteryWorkerProvider, MatteryBlock::class.java)
reg.registerBlockComponent(MatterBottlerProvider, MatterBottlerBlock::class.java)
reg.registerBlockComponent(MatterReconstructorProvider, MatterReconstructorBlock::class.java)
}
}

View File

@ -0,0 +1,67 @@
package ru.dbotthepony.mc.otm.compat.jade.providers
import net.minecraft.nbt.CompoundTag
import net.minecraft.resources.ResourceLocation
import ru.dbotthepony.mc.otm.block.entity.WorkerState
import ru.dbotthepony.mc.otm.block.entity.matter.MatterBottlerBlockEntity
import ru.dbotthepony.mc.otm.compat.jade.JadeTagKeys
import ru.dbotthepony.mc.otm.compat.jade.JadeUids
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.math.RGBAColor
import snownee.jade.api.BlockAccessor
import snownee.jade.api.IBlockComponentProvider
import snownee.jade.api.IServerDataProvider
import snownee.jade.api.ITooltip
import snownee.jade.api.config.IPluginConfig
import snownee.jade.api.ui.BoxStyle
object MatterBottlerProvider : IBlockComponentProvider, IServerDataProvider<BlockAccessor> {
override fun getUid(): ResourceLocation = JadeUids.MATTER_BOTTLER
override fun appendServerData(data: CompoundTag, accessor: BlockAccessor) {
if (accessor.blockEntity is MatterBottlerBlockEntity) {
val bottler = accessor.blockEntity as MatterBottlerBlockEntity
val bottlerData = CompoundTag()
bottlerData.putBoolean("isBottling", bottler.isBottling)
bottlerData.putBoolean("isIdling", accessor.blockState.getValue(WorkerState.SEMI_WORKER_STATE) !== WorkerState.WORKING)
bottlerData.putFloat("workProgress", bottler.getWorkProgress())
data.put(JadeTagKeys.MATTER_BOTTLER_DATA, bottlerData)
}
}
override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) {
val data = accessor.serverData
if (!data.contains(JadeTagKeys.MATTER_BOTTLER_DATA)) return
val bottlerData = data.getCompound(JadeTagKeys.MATTER_BOTTLER_DATA)
val elementHelper = tooltip.elementHelper
tooltip.add(
elementHelper.text(
TranslatableComponent(
"otm.jade.mode",
if (bottlerData.getBoolean("isBottling"))
TranslatableComponent("otm.jade.matter_bottler.mode.fill")
else
TranslatableComponent("otm.jade.matter_bottler.mode.drain")
)
)
)
if (!data.getBoolean("isIdling")) {
val workProgress = data.getFloat("workProgress")
val style = elementHelper.progressStyle().color(RGBAColor.WHITE.toARGB())
tooltip.add(
elementHelper.progress(
workProgress,
null,
style,
BoxStyle.DEFAULT,
true
)
)
}
}
}

View File

@ -0,0 +1,62 @@
package ru.dbotthepony.mc.otm.compat.jade.providers
import net.minecraft.nbt.CompoundTag
import net.minecraft.resources.ResourceLocation
import ru.dbotthepony.mc.otm.block.entity.matter.MatterReconstructorBlockEntity
import ru.dbotthepony.mc.otm.compat.jade.JadeTagKeys
import ru.dbotthepony.mc.otm.compat.jade.JadeUids
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.math.RGBAColor
import snownee.jade.api.BlockAccessor
import snownee.jade.api.IBlockComponentProvider
import snownee.jade.api.IServerDataProvider
import snownee.jade.api.ITooltip
import snownee.jade.api.config.IPluginConfig
import snownee.jade.api.ui.BoxStyle
object MatterReconstructorProvider : IBlockComponentProvider, IServerDataProvider<BlockAccessor> {
override fun getUid(): ResourceLocation = JadeUids.MATTER_RECONSTRUCTOR
override fun appendServerData(data: CompoundTag, accessor: BlockAccessor) {
if (accessor.blockEntity is MatterReconstructorBlockEntity) {
val reconstructor = accessor.blockEntity as MatterReconstructorBlockEntity
val item = reconstructor.repairContainer.get(0)
if (!item.isEmpty && item.isDamageableItem && item.maxDamage != 0) {
val reconstructorData = CompoundTag()
reconstructorData.putInt("damage", item.maxDamage - item.damageValue)
reconstructorData.putInt("maxDamage", item.maxDamage)
data.put(JadeTagKeys.MATTER_RECONSTRUCTOR_DATA, reconstructorData)
}
}
}
override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) {
val data = accessor.serverData
if (!data.contains(JadeTagKeys.MATTER_RECONSTRUCTOR_DATA)) return
val reconstructorData = data.getCompound(JadeTagKeys.MATTER_RECONSTRUCTOR_DATA)
val damage = reconstructorData.getInt("damage")
val maxDamage = reconstructorData.getInt("maxDamage")
val ratio = damage.toFloat() / maxDamage.toFloat()
tooltip.add(
tooltip.elementHelper.progress(
ratio,
TranslatableComponent(
"item.durability",
damage,
maxDamage
),
tooltip.elementHelper.progressStyle().color(RGBAColor.DARK_GREEN.toARGB()).textColor(RGBAColor.WHITE.toARGB()),
BoxStyle.DEFAULT,
true
)
)
}
}

View File

@ -0,0 +1,63 @@
package ru.dbotthepony.mc.otm.compat.jade.providers
import net.minecraft.nbt.CompoundTag
import net.minecraft.resources.ResourceLocation
import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.compat.jade.JadeTagKeys
import ru.dbotthepony.mc.otm.compat.jade.JadeUids
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.ifPresentK
import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.RGBAColor
import ru.dbotthepony.mc.otm.core.math.getDecimal
import ru.dbotthepony.mc.otm.core.math.putDecimal
import ru.dbotthepony.mc.otm.core.util.formatMatter
import snownee.jade.api.BlockAccessor
import snownee.jade.api.IBlockComponentProvider
import snownee.jade.api.IServerDataProvider
import snownee.jade.api.ITooltip
import snownee.jade.api.config.IPluginConfig
import snownee.jade.api.ui.BoxStyle
object MatterStorageProvider : IBlockComponentProvider, IServerDataProvider<BlockAccessor> {
override fun getUid(): ResourceLocation = JadeUids.MATTER_STORAGE
override fun appendServerData(data: CompoundTag, accessor: BlockAccessor) {
accessor.blockEntity?.getCapability(MatteryCapability.MATTER)?.ifPresentK {
val matterData = CompoundTag()
matterData.putDecimal("storedMatter", it.storedMatter)
matterData.putDecimal("maxStoredMatter", it.maxStoredMatter)
data.put(JadeTagKeys.MATTER_STORAGE_DATA, matterData)
}
}
override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) {
val data = accessor.serverData
if (!data.contains(JadeTagKeys.MATTER_STORAGE_DATA)) return
val matterData = data.getCompound(JadeTagKeys.MATTER_STORAGE_DATA)
val storedMatter = matterData.getDecimal("storedMatter")
val maxStoredMatter = matterData.getDecimal("maxStoredMatter")
val ratio = if (maxStoredMatter.isZero) 0f else (storedMatter / maxStoredMatter).coerceIn(Decimal.ZERO, Decimal.ONE).toFloat()
val style = tooltip.elementHelper.progressStyle()
.color(RGBAColor.LOW_MATTER.linearInterpolation(ratio, RGBAColor.FULL_MATTER).toARGB())
.textColor(RGBAColor.WHITE.toARGB())
tooltip.add(
tooltip.elementHelper.progress(
ratio,
TranslatableComponent(
"otm.gui.level",
storedMatter.formatMatter(),
maxStoredMatter.formatMatter()
),
style,
BoxStyle.DEFAULT,
true
)
)
}
}

View File

@ -0,0 +1,61 @@
package ru.dbotthepony.mc.otm.compat.jade.providers
import net.minecraft.nbt.CompoundTag
import net.minecraft.resources.ResourceLocation
import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.compat.jade.JadeTagKeys
import ru.dbotthepony.mc.otm.compat.jade.JadeUids
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.ifPresentK
import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.RGBAColor
import ru.dbotthepony.mc.otm.core.math.getDecimal
import ru.dbotthepony.mc.otm.core.math.putDecimal
import ru.dbotthepony.mc.otm.core.util.formatPower
import snownee.jade.api.*
import snownee.jade.api.config.IPluginConfig
import snownee.jade.api.ui.BoxStyle
object MatteryEnergyProvider : IBlockComponentProvider, IServerDataProvider<BlockAccessor> {
override fun getUid(): ResourceLocation = JadeUids.MATTERY_ENERGY
override fun appendServerData(data: CompoundTag, accessor: BlockAccessor) {
accessor.blockEntity?.getCapability(MatteryCapability.ENERGY)?.ifPresentK {
val energyData = CompoundTag()
energyData.putDecimal("batteryLevel", it.batteryLevel)
energyData.putDecimal("maxBatteryLevel", it.maxBatteryLevel)
data.put(JadeTagKeys.MATTERY_ENERGY_DATA, energyData)
}
}
override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) {
val data = accessor.serverData
if (!data.contains(JadeTagKeys.MATTERY_ENERGY_DATA)) return
val energyData = data.getCompound(JadeTagKeys.MATTERY_ENERGY_DATA)
val batteryLevel = energyData.getDecimal("batteryLevel")
val maxBatteryLevel = energyData.getDecimal("maxBatteryLevel")
val ratio = if (maxBatteryLevel.isZero) 0f else (batteryLevel / maxBatteryLevel).coerceIn(Decimal.ZERO, Decimal.ONE).toFloat()
val style = tooltip.elementHelper.progressStyle()
.color(RGBAColor.LOW_POWER.linearInterpolation(ratio, RGBAColor.FULL_POWER).toARGB())
.textColor(RGBAColor.WHITE.toARGB())
tooltip.add(
tooltip.elementHelper.progress(
ratio,
TranslatableComponent(
"otm.gui.level",
batteryLevel.formatPower(),
maxBatteryLevel.formatPower()
),
style,
BoxStyle.DEFAULT,
true
)
)
}
}

View File

@ -0,0 +1,84 @@
package ru.dbotthepony.mc.otm.compat.jade.providers
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.ListTag
import net.minecraft.resources.ResourceLocation
import ru.dbotthepony.mc.otm.block.entity.MachineItemJob
import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity
import ru.dbotthepony.mc.otm.compat.jade.JadeTagKeys
import ru.dbotthepony.mc.otm.compat.jade.JadeUids
import ru.dbotthepony.mc.otm.core.math.RGBAColor
import ru.dbotthepony.mc.otm.core.nbt.getCompoundList
import ru.dbotthepony.mc.otm.core.nbt.getItemStack
import ru.dbotthepony.mc.otm.core.nbt.set
import snownee.jade.api.BlockAccessor
import snownee.jade.api.IBlockComponentProvider
import snownee.jade.api.IServerDataProvider
import snownee.jade.api.ITooltip
import snownee.jade.api.config.IPluginConfig
import snownee.jade.api.ui.BoxStyle
object MatteryWorkerProvider : IBlockComponentProvider, IServerDataProvider<BlockAccessor> {
override fun getUid(): ResourceLocation = JadeUids.MATTERY_WORKER
override fun appendServerData(data: CompoundTag, accessor: BlockAccessor) {
if (accessor.blockEntity is MatteryWorkerBlockEntity<*>) {
val worker = accessor.blockEntity as MatteryWorkerBlockEntity<*>
val workerData = CompoundTag()
workerData["jobs"] = ListTag().also {
for (job in worker.jobEventLoops) {
val jobData = CompoundTag()
jobData.putFloat("workProgress", job.workProgress)
jobData.putBoolean("isIdling", job.isIdling)
jobData.putBoolean("isUnableToProcess", job.isUnableToProcess)
if (job.currentJob is MachineItemJob) {
val currentJob = job.currentJob as MachineItemJob
jobData.put("itemStack", currentJob.itemStack.serializeNBT())
}
it.add(jobData)
}
}
data.put(JadeTagKeys.MATTERY_WORKER_DATA, workerData)
}
}
override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) {
val data = accessor.serverData
if (!data.contains(JadeTagKeys.MATTERY_WORKER_DATA)) return
val workerData = data.getCompound(JadeTagKeys.MATTERY_WORKER_DATA)
val elementHelper = tooltip.elementHelper
val style = elementHelper.progressStyle().color(RGBAColor.WHITE.toARGB())
val styleError = elementHelper.progressStyle().color(RGBAColor.REDDISH.toARGB())
for (job in workerData.getCompoundList("jobs")) {
val progress = job.getFloat("workProgress")
val isIdling = job.getBoolean("isIdling")
val isUnableToProcess = job.getBoolean("isUnableToProcess")
val itemStack = job.getItemStack("itemStack")
if (!isIdling) {
if (!itemStack.isEmpty) {
tooltip.add(elementHelper.smallItem(itemStack))
tooltip.append(elementHelper.text(itemStack.hoverName))
}
tooltip.add(
elementHelper.progress(
progress,
null,
if (isUnableToProcess) styleError else style,
BoxStyle.DEFAULT,
true
)
)
}
}
}
}