Add matter capacity upgrade
This commit is contained in:
parent
91d0f5a65b
commit
2095055e73
@ -626,6 +626,9 @@ private fun items(provider: MatteryLanguageProvider) {
|
||||
add(MItems.CreativeUpgrades.ENERGY_STORAGE, "Creative Energy Storage Upgrade")
|
||||
add(MItems.CreativeUpgrades.ENERGY_STORAGE_FLAT, "Creative Energy Storage Upgrade (Flat)")
|
||||
add(MItems.CreativeUpgrades.ENERGY_STORAGE_FLAT_SMALL, "Creative Energy Storage Upgrade (Flat Small)")
|
||||
add(MItems.CreativeUpgrades.MATTER_STORAGE, "Creative Matter Storage Upgrade")
|
||||
add(MItems.CreativeUpgrades.MATTER_STORAGE_FLAT, "Creative Matter Storage Upgrade (Flat)")
|
||||
add(MItems.CreativeUpgrades.MATTER_STORAGE_FLAT_SMALL, "Creative Matter Storage Upgrade (Flat Small)")
|
||||
add(MItems.CreativeUpgrades.ENERGY_THROUGHPUT, "Creative Energy Throughput Upgrade")
|
||||
add(MItems.CreativeUpgrades.ENERGY_THROUGHPUT_FLAT, "Creative Energy Throughput Upgrade (Flat)")
|
||||
add(MItems.CreativeUpgrades.ENERGY_THROUGHPUT_FLAT_SMALL, "Creative Energy Throughput Upgrade (Flat Small)")
|
||||
@ -738,7 +741,9 @@ private fun gui(provider: MatteryLanguageProvider) {
|
||||
gui("upgrade.speed", "Operation speed: %s%%")
|
||||
gui("upgrade.processing_items", "Items processed per cycle: +%s")
|
||||
gui("upgrade.energy_storage_flat", "Energy capacity: +%s")
|
||||
gui("upgrade.matter_storage_flat", "Matter capacity: +%s")
|
||||
gui("upgrade.energy_storage", "Energy capacity: +%s%%")
|
||||
gui("upgrade.matter_storage", "Matter capacity: +%s%%")
|
||||
gui("upgrade.energy_consumed", "Energy consumption: %s%%")
|
||||
gui("upgrade.energy_throughput_flat", "Energy throughput: +%s")
|
||||
gui("upgrade.energy_throughput", "Energy throughput: +%s%%")
|
||||
@ -749,6 +754,7 @@ private fun gui(provider: MatteryLanguageProvider) {
|
||||
gui("upgrade_type.allowed_none", "No possible upgrades at the moment.")
|
||||
gui("upgrade_type.speed", "Speed")
|
||||
gui("upgrade_type.processing", "Processing")
|
||||
gui("upgrade_type.matter_storage", "Matter Storage")
|
||||
gui("upgrade_type.energy_storage", "Energy Storage")
|
||||
gui("upgrade_type.energy_consumption", "Energy Consumption")
|
||||
gui("upgrade_type.energy_throughput", "Energy Throughput")
|
||||
|
@ -629,6 +629,9 @@ private fun items(provider: MatteryLanguageProvider) {
|
||||
add(MItems.CreativeUpgrades.ENERGY_STORAGE, "Творческое улучшение энергохраналища")
|
||||
add(MItems.CreativeUpgrades.ENERGY_STORAGE_FLAT, "Творческое улучшение энергохраналища (простое)")
|
||||
add(MItems.CreativeUpgrades.ENERGY_STORAGE_FLAT_SMALL, "Творческое улучшение энергохраналища (малое простое)")
|
||||
add(MItems.CreativeUpgrades.MATTER_STORAGE, "Творческое улучшение хранилища материи")
|
||||
add(MItems.CreativeUpgrades.MATTER_STORAGE_FLAT, "Творческое улучшение хранилища материи (простое)")
|
||||
add(MItems.CreativeUpgrades.MATTER_STORAGE_FLAT_SMALL, "Творческое улучшение хранилища материи (малое простое)")
|
||||
add(MItems.CreativeUpgrades.ENERGY_THROUGHPUT, "Творческое улучшение энергоканала")
|
||||
add(MItems.CreativeUpgrades.ENERGY_THROUGHPUT_FLAT, "Творческое улучшение энергоканала (простое)")
|
||||
add(MItems.CreativeUpgrades.ENERGY_THROUGHPUT_FLAT_SMALL, "Творческое улучшение энергоканала (малое простое)")
|
||||
@ -741,7 +744,9 @@ private fun gui(provider: MatteryLanguageProvider) {
|
||||
gui("upgrade.speed", "Скорость работы: %s%%")
|
||||
gui("upgrade.processing_items", "Работы за цикл: +%s")
|
||||
gui("upgrade.energy_storage_flat", "Хранилище энергии: +%s")
|
||||
gui("upgrade.matter_storage_flat", "Хранилище материи: +%s")
|
||||
gui("upgrade.energy_storage", "Хранилище энергии: +%s%%")
|
||||
gui("upgrade.matter_storage", "Хранилище материи: +%s%%")
|
||||
gui("upgrade.energy_consumed", "Потребление энергии: %s%%")
|
||||
gui("upgrade.energy_throughput_flat", "Пропускная способность энергии: +%s")
|
||||
gui("upgrade.energy_throughput", "Пропускная способность энергии: +%s%%")
|
||||
@ -752,6 +757,7 @@ private fun gui(provider: MatteryLanguageProvider) {
|
||||
gui("upgrade_type.allowed_none", "На данный момент нет допустимых улучшений.")
|
||||
gui("upgrade_type.speed", "Скорость")
|
||||
gui("upgrade_type.processing", "Обработка")
|
||||
gui("upgrade_type.matter_storage", "Хранилище материи")
|
||||
gui("upgrade_type.energy_storage", "Энергохранилище")
|
||||
gui("upgrade_type.energy_consumption", "Энергоэффективность")
|
||||
gui("upgrade_type.energy_throughput", "Энергоканал")
|
||||
|
@ -102,9 +102,9 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
||||
}
|
||||
}
|
||||
|
||||
override val upgrades = UpgradeContainer(this::setChangedLight, 3, UpgradeType.BASIC)
|
||||
override val upgrades = UpgradeContainer(this::setChangedLight, 3, UpgradeType.BASIC_MATTER)
|
||||
val energy = ProfiledEnergyStorage(WorkerEnergyStorage(::powerLevelUpdated, upgrades.transform(ENERGY_VALUES)))
|
||||
val matter = ProfiledMatterStorage(MatterStorageImpl(::matterLevelUpdated, FlowDirection.INPUT, ::MATTER_CAPACITY))
|
||||
val matter = ProfiledMatterStorage(MatterStorageImpl(::matterLevelUpdated, FlowDirection.INPUT, upgrades.matterCapacity(::MATTER_CAPACITY)))
|
||||
val container = MatteryContainer(::itemContainerUpdated, 5).also(::addDroppableContainer)
|
||||
|
||||
val energyConfig = ConfigurableEnergy(energy)
|
||||
|
@ -8,6 +8,7 @@ import ru.dbotthepony.mc.otm.core.TextComponent
|
||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||
import ru.dbotthepony.mc.otm.core.immutableSet
|
||||
import ru.dbotthepony.mc.otm.core.math.Decimal
|
||||
import ru.dbotthepony.mc.otm.core.util.formatMatter
|
||||
import ru.dbotthepony.mc.otm.core.util.formatPower
|
||||
|
||||
/**
|
||||
@ -46,6 +47,18 @@ interface IMatteryUpgrade {
|
||||
*/
|
||||
val energyStorage: Decimal get() = Decimal.ZERO
|
||||
|
||||
/**
|
||||
* **CAM NOT be negative.**
|
||||
*
|
||||
* Added directly over regular matter storage capacity.
|
||||
*/
|
||||
val matterStorageFlat: Decimal get() = Decimal.ZERO
|
||||
|
||||
/**
|
||||
* **CAM NOT be negative.**
|
||||
*/
|
||||
val matterStorage: Decimal get() = Decimal.ZERO
|
||||
|
||||
/**
|
||||
* Value of `1` means power consumption is doubled, `2` is tripled, `-0.5` is halved.
|
||||
*/
|
||||
@ -107,6 +120,14 @@ fun IMatteryUpgrade.addUpgradeTooltipLines(tooltips: MutableCollection<Component
|
||||
tooltips.add(TranslatableComponent("otm.gui.upgrade.energy_storage", TextComponent((energyStorage * 100).toString(0)).withStyle(ChatFormatting.DARK_GREEN)).withStyle(ChatFormatting.GRAY))
|
||||
}
|
||||
|
||||
if (matterStorageFlat != Decimal.ZERO) {
|
||||
tooltips.add(TranslatableComponent("otm.gui.upgrade.matter_storage_flat", matterStorageFlat.formatMatter(formatAsReadable = ShiftPressedCond).copy().withStyle(ChatFormatting.DARK_GREEN)).withStyle(ChatFormatting.GRAY))
|
||||
}
|
||||
|
||||
if (matterStorage != Decimal.ZERO) {
|
||||
tooltips.add(TranslatableComponent("otm.gui.upgrade.matter_storage", TextComponent((matterStorage * 100).toString(0)).withStyle(ChatFormatting.DARK_GREEN)).withStyle(ChatFormatting.GRAY))
|
||||
}
|
||||
|
||||
if (energyConsumed >= positiveBound) {
|
||||
tooltips.add(TranslatableComponent("otm.gui.upgrade.energy_consumed", TextComponent("+" + (energyConsumed.coerceIn(MachinesConfig.Upgrades.MIN_ENERGY, MachinesConfig.Upgrades.MAX_ENERGY) * 100).toString(0)).withStyle(ChatFormatting.DARK_RED)).withStyle(ChatFormatting.GRAY))
|
||||
} else if (energyConsumed <= negativeBound) {
|
||||
@ -138,6 +159,7 @@ enum class UpgradeType {
|
||||
ENERGY_STORAGE,
|
||||
ENERGY_CONSUMPTION,
|
||||
ENERGY_THROUGHPUT,
|
||||
MATTER_STORAGE,
|
||||
FAILSAFE;
|
||||
|
||||
val localeId = "otm.gui.upgrade_type.${name.lowercase()}"
|
||||
@ -161,6 +183,9 @@ enum class UpgradeType {
|
||||
@JvmField
|
||||
val BASIC = set(SPEED, ENERGY_STORAGE, ENERGY_CONSUMPTION, ENERGY_THROUGHPUT)
|
||||
|
||||
@JvmField
|
||||
val BASIC_MATTER = set(SPEED, ENERGY_STORAGE, ENERGY_CONSUMPTION, ENERGY_THROUGHPUT, MATTER_STORAGE)
|
||||
|
||||
@JvmField
|
||||
val BASIC_PROCESSING = set(SPEED, ENERGY_STORAGE, ENERGY_CONSUMPTION, ENERGY_THROUGHPUT, PROCESSING)
|
||||
|
||||
|
@ -21,22 +21,33 @@ open class UpgradeContainer(slotCount: Int, open val allowedUpgrades: Set<Upgrad
|
||||
final override val upgradeTypes: Set<UpgradeType>
|
||||
get() = setOf()
|
||||
|
||||
protected fun decimals(fn: (IMatteryUpgrade) -> Decimal, reducer: (Decimal, Decimal) -> Decimal): Decimal {
|
||||
return iterator()
|
||||
.filter { it.isNotEmpty }
|
||||
.map { it.getCapability(MatteryCapability.UPGRADE).map(fn).orElse(Decimal.ZERO).moreThanZero() * it.count }
|
||||
.reduce(Decimal.ZERO, reducer)
|
||||
}
|
||||
|
||||
override val speedBonus: Double
|
||||
get() = iterator().filter { it.isNotEmpty }.mapToDouble { it.getCapability(MatteryCapability.UPGRADE).map { it.speedBonus }.orElse(0.0) * it.count }.sum()
|
||||
override val processingItems: Int
|
||||
get() = iterator().filter { it.isNotEmpty }.mapToInt { it.getCapability(MatteryCapability.UPGRADE).map { it.processingItems }.orElse(0).coerceAtLeast(0) * it.count }.reduce(0) { a, b -> a + b }
|
||||
override val energyStorageFlat: Decimal
|
||||
get() = iterator().filter { it.isNotEmpty }.map { it.getCapability(MatteryCapability.UPGRADE).map { it.energyStorageFlat }.orElse(Decimal.ZERO).moreThanZero() * it.count }.reduce(Decimal.ZERO, Decimal::plus)
|
||||
get() = decimals(IMatteryUpgrade::energyStorageFlat, Decimal::plus)
|
||||
override val energyStorage: Decimal
|
||||
get() = iterator().filter { it.isNotEmpty }.map { it.getCapability(MatteryCapability.UPGRADE).map { it.energyStorage }.orElse(Decimal.ZERO).moreThanZero() * it.count }.reduce(Decimal.ZERO, Decimal::plus)
|
||||
get() = decimals(IMatteryUpgrade::energyStorage, Decimal::plus)
|
||||
override val matterStorageFlat: Decimal
|
||||
get() = decimals(IMatteryUpgrade::matterStorageFlat, Decimal::plus)
|
||||
override val matterStorage: Decimal
|
||||
get() = decimals(IMatteryUpgrade::matterStorage, Decimal::plus)
|
||||
override val energyConsumed: Decimal
|
||||
get() = iterator().filter { it.isNotEmpty }.map { it.getCapability(MatteryCapability.UPGRADE).map { it.energyConsumed }.orElse(Decimal.ZERO) * it.count }.reduce(Decimal.ZERO, Decimal::plus)
|
||||
get() = decimals(IMatteryUpgrade::energyConsumed, Decimal::plus)
|
||||
override val failureMultiplier: Double
|
||||
get() = iterator().filter { it.isNotEmpty }.mapToDouble { it.getCapability(MatteryCapability.UPGRADE).map { it.failureMultiplier }.orElse(1.0).coerceAtLeast(0.0).pow(it.count.toDouble()) }.reduce(1.0) { a, b -> a * b }
|
||||
override val energyThroughputFlat: Decimal
|
||||
get() = iterator().filter { it.isNotEmpty }.map { it.getCapability(MatteryCapability.UPGRADE).map { it.energyThroughputFlat }.orElse(Decimal.ZERO).moreThanZero() * it.count }.reduce(Decimal.ZERO, Decimal::plus)
|
||||
get() = decimals(IMatteryUpgrade::energyThroughputFlat, Decimal::plus)
|
||||
override val energyThroughput: Decimal
|
||||
get() = iterator().filter { it.isNotEmpty }.map { it.getCapability(MatteryCapability.UPGRADE).map { it.energyThroughput }.orElse(Decimal.ZERO).moreThanZero() * it.count }.reduce(Decimal.ZERO, Decimal::plus)
|
||||
get() = decimals(IMatteryUpgrade::energyThroughput, Decimal::plus)
|
||||
|
||||
fun transform(values: ConciseBalanceValues): ConciseBalanceValues {
|
||||
return object : ConciseBalanceValues {
|
||||
@ -57,4 +68,8 @@ open class UpgradeContainer(slotCount: Int, open val allowedUpgrades: Set<Upgrad
|
||||
get() = values.extract * (energyThroughput + Decimal.ONE) + energyThroughputFlat
|
||||
}
|
||||
}
|
||||
|
||||
fun matterCapacity(value: () -> Decimal): () -> Decimal {
|
||||
return { value.invoke() * (matterStorage + Decimal.ONE) + matterStorageFlat }
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,8 @@ class SimpleUpgrade(
|
||||
override val energyConsumed: Decimal = Decimal.ZERO,
|
||||
override val energyThroughputFlat: Decimal = Decimal.ZERO,
|
||||
override val energyThroughput: Decimal = Decimal.ZERO,
|
||||
override val matterStorage: Decimal = Decimal.ZERO,
|
||||
override val matterStorageFlat: Decimal = Decimal.ZERO,
|
||||
override val failureMultiplier: Double = 1.0,
|
||||
) : Item(properties), IMatteryUpgrade, ICapabilityProvider {
|
||||
private val resolver = LazyOptional.of { this }
|
||||
|
@ -175,6 +175,10 @@ object MItems {
|
||||
val FAILURE: SimpleUpgrade by registry.register("creative_failure_upgrade") { SimpleUpgrade(Item.Properties().rarity(Rarity.EPIC), UpgradeType.FAILSAFE.set(), failureMultiplier = 2.0) }
|
||||
val PROCESSING_ITEMS: SimpleUpgrade by registry.register("creative_processing_upgrade") { SimpleUpgrade(Item.Properties().rarity(Rarity.EPIC), UpgradeType.PROCESSING.set(), processingItems = 1) }
|
||||
|
||||
val MATTER_STORAGE: SimpleUpgrade by registry.register("creative_matter_storage_upgrade") { SimpleUpgrade(Item.Properties().rarity(Rarity.EPIC), UpgradeType.MATTER_STORAGE.set(), matterStorage = Decimal.ONE) }
|
||||
val MATTER_STORAGE_FLAT: SimpleUpgrade by registry.register("creative_matter_storage_flat_upgrade") { SimpleUpgrade(Item.Properties().rarity(Rarity.EPIC), UpgradeType.MATTER_STORAGE.set(), matterStorageFlat = Decimal.LONG_MAX_VALUE) }
|
||||
val MATTER_STORAGE_FLAT_SMALL: SimpleUpgrade by registry.register("creative_matter_storage_flat2_upgrade") { SimpleUpgrade(Item.Properties().rarity(Rarity.EPIC), UpgradeType.MATTER_STORAGE.set(), matterStorageFlat = Decimal.INT_MAX_VALUE) }
|
||||
|
||||
val LIST = SupplierList(
|
||||
::SPEED,
|
||||
::ENERGY_CONSUMPTION,
|
||||
@ -187,6 +191,9 @@ object MItems {
|
||||
::FAILSAFE,
|
||||
::FAILURE,
|
||||
::PROCESSING_ITEMS,
|
||||
::MATTER_STORAGE,
|
||||
::MATTER_STORAGE_FLAT,
|
||||
::MATTER_STORAGE_FLAT_SMALL,
|
||||
)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user