Merge remote-tracking branch 'origin/master' into master

# Conflicts:
#	src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt
#	src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt
This commit is contained in:
DBotThePony 2023-07-18 12:04:13 +07:00
commit dc50a79b20
Signed by: DBot
GPG Key ID: DCC23B5715498507
22 changed files with 487 additions and 8 deletions

View File

@ -193,7 +193,7 @@ dependencies {
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("curse.maven:jade-324717:${jade_id}"))
implementation(fg.deobf("curse.maven:jade-324717:${jade_id}"))
//runtimeOnly(fg.deobf("curse.maven:configured-457570:${configured_id}"))
compileOnly(fg.deobf("curse.maven:resourceful-lib-570073:${resourceful_lib_id}"))

View File

@ -17,7 +17,7 @@ jei_mc_version=1.20
curios_mc_version=1.20
forge_gradle_version=[6.0,6.2)
forge_version=47.0.19
forge_version=47.1.0
mixingradle_version=0.7.33
mixin_version=0.8.5
@ -30,7 +30,7 @@ ad_astra_id=4594155
botarium_id=4594094
resourceful_lib_id=4598948
resourceful_config_id=4576455
jade_id=4573193
jade_id=4614153
configured_id=4462894
kotlin_for_forge_version=3.1.0

View File

@ -146,6 +146,7 @@ private fun misc(provider: MatteryLanguageProvider) {
gui("exopack.toggle_glow", "Glows in dark")
gui("exopack.change_color", "Customize color")
gui("exopack.change_color2", "Remove color")
gui("exopack.go_curios", "Open Curios inventory")
gui("exopack.probe1", "This little device feels unnatural to touch, it is almost certainly resilient to any possible attempt to break it open.")
gui("exopack.probe2", "There is fingerprint reader built into one of sides which gently glow when touched.")
@ -799,6 +800,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) {
decoratives(provider)
sounds(provider)
@ -813,6 +829,8 @@ fun AddEnglishLanguage(provider: MatteryLanguageProvider) {
research(provider)
gui(provider)
jade(provider)
with(provider.english) {
add("itemGroup.otm", "Overdrive That Matters")
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.AndroidResearchType
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock
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: 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) {
val path = "$path."
constructor(vararg path: String) : this(path.joinToString("."))

View File

@ -154,6 +154,7 @@ private fun misc(provider: MatteryLanguageProvider) {
gui("exopack.toggle_glow", "Свечение в темноте")
gui("exopack.change_color", "Изменить окраску")
gui("exopack.change_color2", "Убрать окраску")
gui("exopack.go_curios", "Открыть инвентарь Curios")
gui("exopack.probe1", "Данное маленькое устройство необычно на ощупь, а так же неприступно для любых попыток вскрыть.")
gui("exopack.probe2", "На одной из сторон данного устройства находится сканер отпечатка, который тускло загорается при касании.")
@ -800,6 +801,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) {
decoratives(provider)
blocks(provider)
@ -811,4 +827,5 @@ fun AddRussianLanguage(provider: MatteryLanguageProvider) {
research(provider)
death(provider)
androidFeatures(provider)
jade(provider)
}

View File

@ -126,6 +126,8 @@ class MatterCapacitorBankBlockEntity(p_155229_: BlockPos, p_155230_: BlockState)
capacitorStatus[slot].boolean = new.getCapability(MatteryCapability.MATTER).isPresent
gaugeLevel = (storedMatter / maxStoredMatter).toFloat()
}
override fun getMaxStackSize(): Int = 1
}.also(::addDroppableContainer)
val itemConfig = ConfigurableItemHandler(inputOutput = container.handler(object : HandlerFilter {

View File

@ -54,9 +54,7 @@ class PatternStorageBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
super.setChanged(slot, new, old)
}
override fun getMaxStackSize(): Int {
return 1
}
override fun getMaxStackSize(): Int = 1
}.also(::addDroppableContainer)
private fun updateBlockstate() {

View File

@ -35,6 +35,8 @@ class BatteryBankBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : Matte
batteryStatus[slot].boolean = new.getCapability(ForgeCapabilities.ENERGY).isPresent
gaugeLevel = batteryLevel.percentage(maxBatteryLevel)
}
override fun getMaxStackSize(): Int = 1
}.also(::addDroppableContainer)
val batteryStatus = immutableList(CAPACITY) {

View File

@ -51,6 +51,7 @@ object Widgets18 {
val CROSS = miscGrid.next()
val FORWARD_SLASH = miscGrid.next()
val RETURN_ARROW_LEFT = miscGrid.next()
val CURIOS_INVENTORY = miscGrid.next()
private val slotBgGrid = WidgetLocation.SLOT_BACKGROUNDS.grid(4, 4)

View File

@ -23,6 +23,8 @@ import ru.dbotthepony.mc.otm.client.screen.widget.ProgressGaugePanel
import ru.dbotthepony.mc.otm.client.screen.widget.TallHorizontalProfiledPowerGaugePanel
import ru.dbotthepony.mc.otm.client.setMousePos
import ru.dbotthepony.mc.otm.client.shouldOpenVanillaInventory
import ru.dbotthepony.mc.otm.compat.curios.isCuriosLoaded
import ru.dbotthepony.mc.otm.compat.curios.openCuriosScreen
import ru.dbotthepony.mc.otm.core.math.integerDivisionDown
import ru.dbotthepony.mc.otm.menu.ExoPackInventoryMenu
import ru.dbotthepony.mc.otm.network.ExoPackMenuOpen
@ -235,7 +237,7 @@ class ExoPackInventoryScreen(menu: ExoPackInventoryMenu) : MatteryScreen<ExoPack
scrollPanel.dock = Dock.RIGHT
scrollPanel.setDockMargin(right = 3f)
LargeRectangleButtonPanel(this, frame, x = frame.width - 2f - LargeRectangleButtonPanel.SIZE, y = -LargeRectangleButtonPanel.SIZE - 2f, skinElement = Widgets18.RETURN_ARROW_LEFT, onPress = {
val closeButtonPanel = LargeRectangleButtonPanel(this, frame, x = frame.width - 2f - LargeRectangleButtonPanel.SIZE, y = -LargeRectangleButtonPanel.SIZE - 2f, skinElement = Widgets18.RETURN_ARROW_LEFT, onPress = {
shouldOpenVanillaInventory = true
val minecraft = minecraft!!
@ -247,6 +249,12 @@ class ExoPackInventoryScreen(menu: ExoPackInventoryMenu) : MatteryScreen<ExoPack
setMousePos(mouseX, mouseY)
}).also { it.tooltips.add(TranslatableComponent("otm.gui.exopack.go_back")) }
if (isCuriosLoaded) {
LargeRectangleButtonPanel(this, frame, x = closeButtonPanel.x - 2f - LargeRectangleButtonPanel.SIZE, y = closeButtonPanel.y, skinElement = Widgets18.CURIOS_INVENTORY, onPress = {
openCuriosScreen(minecraft!!.player!!.containerMenu.carried)
}).also { it.tooltips.add(TranslatableComponent("otm.gui.exopack.go_curios")) }
}
makeInventoryRowsControls(frame, frame.width + 2f, frame.height.coerceAtMost(95f)) { movePixels ->
frame.y += movePixels
moveMousePosScaled(y = movePixels)

View File

@ -4,7 +4,10 @@ import com.google.common.collect.Streams
import net.minecraft.world.entity.player.Player
import net.minecraft.world.inventory.Slot
import net.minecraft.world.item.ItemStack
import net.minecraftforge.api.distmarker.Dist
import net.minecraftforge.fml.ModList
import net.minecraftforge.fml.loading.FMLEnvironment
import net.minecraftforge.network.PacketDistributor
import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.container.awareStream
@ -16,6 +19,8 @@ import top.theillusivec4.curios.api.CuriosApi
import top.theillusivec4.curios.api.event.SlotModifiersUpdatedEvent
import top.theillusivec4.curios.common.inventory.CosmeticCurioSlot
import top.theillusivec4.curios.common.inventory.CurioSlot
import top.theillusivec4.curios.common.network.NetworkHandler
import top.theillusivec4.curios.common.network.client.CPacketOpenCurios
import java.util.stream.Stream
import kotlin.collections.ArrayList
@ -28,6 +33,10 @@ fun onCuriosSlotModifiersUpdated(event: SlotModifiersUpdatedEvent) {
event.entity.matteryPlayer?.recreateExoPackMenu()
}
fun openCuriosScreen(carriedStack: ItemStack = ItemStack.EMPTY) {
if (FMLEnvironment.dist.isClient) NetworkHandler.INSTANCE.send(PacketDistributor.SERVER.noArg(), CPacketOpenCurios(carriedStack))
}
private fun Player.getCuriosSlotsImpl(): List<PlayerSlot<Slot, Slot>> {
val handler = getCapability(MatteryCapability.CURIOS_INVENTORY).orNull() ?: return listOf()

View File

@ -0,0 +1,29 @@
package ru.dbotthepony.mc.otm.compat.jade
import net.minecraft.resources.ResourceLocation
import ru.dbotthepony.mc.otm.OverdriveThatMatters.loc
import ru.dbotthepony.mc.otm.core.math.RGBAColor
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"
}
object JadeColors {
val ENERGY_COLOR = RGBAColor(231, 232, 0)
val ENERGY_COLOR2 = RGBAColor(192, 193, 0)
val MATTER_COLOR = RGBAColor(71, 255, 187)
}

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,64 @@
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.JadeColors
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(JadeColors.MATTER_COLOR.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,62 @@
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.JadeColors
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(JadeColors.ENERGY_COLOR.toARGB(), JadeColors.ENERGY_COLOR2.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
)
)
}
}
}
}

View File

@ -15,6 +15,8 @@ import net.minecraftforge.common.capabilities.ICapabilityProvider
import ru.dbotthepony.mc.otm.capability.FlowDirection
import ru.dbotthepony.mc.otm.capability.energy.ItemEnergyStorageImpl
import ru.dbotthepony.mc.otm.capability.energy.batteryLevel
import ru.dbotthepony.mc.otm.capability.energy.getBarColor
import ru.dbotthepony.mc.otm.capability.energy.getBarWidth
import ru.dbotthepony.mc.otm.capability.matteryEnergy
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.math.Decimal
@ -47,6 +49,18 @@ class ProceduralBatteryItem : Item(Properties().stacksTo(1)) {
get() = maxBatteryLevel
}
override fun isBarVisible(p_150899_: ItemStack): Boolean {
return p_150899_.matteryEnergy != null
}
override fun getBarWidth(p_150900_: ItemStack): Int {
return p_150900_.matteryEnergy?.getBarWidth() ?: super.getBarWidth(p_150900_)
}
override fun getBarColor(p_150901_: ItemStack): Int {
return p_150901_.matteryEnergy?.getBarColor() ?: super.getBarColor(p_150901_)
}
override fun appendHoverText(p_41421_: ItemStack, p_41422_: Level?, p_41423_: MutableList<Component>, p_41424_: TooltipFlag) {
super.appendHoverText(p_41421_, p_41422_, p_41423_, p_41424_)

View File

@ -43,7 +43,7 @@ Matter. Energy. Combined.
# Does this dependency have to exist - if not, ordering below must be specified
mandatory=true #mandatory
# The version range of the dependency
versionRange="[47.0.1,)" #mandatory
versionRange="[47.1.0,)" #mandatory
# An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory
ordering="NONE"
# Side this dependency is applied on - BOTH, CLIENT or SERVER

Binary file not shown.

Before

Width:  |  Height:  |  Size: 815 B

After

Width:  |  Height:  |  Size: 826 B