From 917a498e1e693f6542a1275fc30b280de9b92bea Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 25 Mar 2023 00:20:28 +0700 Subject: [PATCH] Make matter reconstructor work only with anvil repair items by default --- .../entity/matter/ItemRepairerBlockEntity.kt | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/ItemRepairerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/ItemRepairerBlockEntity.kt index f80417776..2abbe7fa6 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/ItemRepairerBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/ItemRepairerBlockEntity.kt @@ -31,7 +31,6 @@ import ru.dbotthepony.mc.otm.core.registryName import ru.dbotthepony.mc.otm.core.util.WriteOnce import ru.dbotthepony.mc.otm.graph.matter.MatterGraph import ru.dbotthepony.mc.otm.graph.matter.MatterNode -import ru.dbotthepony.mc.otm.graph.matter.SimpleMatterNode import ru.dbotthepony.mc.otm.matter.IMatterValue import ru.dbotthepony.mc.otm.matter.MatterManager import ru.dbotthepony.mc.otm.menu.matter.ItemRepairerMenu @@ -95,7 +94,7 @@ class ItemRepairerBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matt return false } - if (!ONLY_ANVIL) { + if (ALLOW_TO_SKIP_ANVIL && !ONLY_ANVIL) { if (MatterManager.get(stack.item).hasMatterValue) { return true } @@ -149,10 +148,11 @@ class ItemRepairerBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matt matterPerTick = Decimal.ZERO progressPerTick = 0.0 } else { - if (!ONLY_ANVIL) { + if (ALLOW_TO_SKIP_ANVIL && !ONLY_ANVIL) { val matter = MatterManager.get(item.item) if (matter.hasMatterValue) { + failureChance = FAILURE_CHANCE progressPerTick = (item.maxDamage / matter.complexity) / DIVISOR matterPerTick = (matter.matter / matter.complexity) / DIVISOR return@once @@ -162,12 +162,23 @@ class ItemRepairerBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matt val found = matterNode.graph.patterns.filter { item.item.isValidRepairItem(item, ItemStack(it.item, 1)) }.findFirst().orElse(null) if (found != null) { + failureChance = (1.0 - found.researchPercent) + FAILURE_CHANCE + + if (!ONLY_ANVIL) { + val matter = MatterManager.get(item.item) + + if (matter.hasMatterValue) { + progressPerTick = (item.maxDamage / matter.complexity) / DIVISOR + matterPerTick = (matter.matter / matter.complexity) / DIVISOR + return@once + } + } + @Suppress("name_shadowing") val matter = MatterManager.get(found.item) * 2 progressPerTick = (item.maxDamage / matter.complexity) / DIVISOR matterPerTick = (matter.matter / matter.complexity) / DIVISOR - failureChance = (1.0 - found.researchPercent) + FAILURE_CHANCE } else { matterPerTick = Decimal.ZERO progressPerTick = 0.0 @@ -242,6 +253,7 @@ class ItemRepairerBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matt val EXTRACT_TICKS: Int get() = _EXTRACT_TICKS.get() val FAILURE_CHANCE: Double get() = _FAILURE_CHANCE.get() val ONLY_ANVIL: Boolean get() = _ONLY_ANVIL.get() + val ALLOW_TO_SKIP_ANVIL: Boolean get() = _ALLOW_TO_SKIP_ANVIL.get() private var _CAPACITY: DecimalConfigValue by WriteOnce() private var _ENERGY_CONSUMPTION: DecimalConfigValue by WriteOnce() @@ -249,6 +261,7 @@ class ItemRepairerBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matt private var _FAILURE_CHANCE: ConfigValue by WriteOnce() private var _EXTRACT_TICKS: ConfigValue by WriteOnce() private var _ONLY_ANVIL: ConfigValue by WriteOnce() + private var _ALLOW_TO_SKIP_ANVIL: ConfigValue by WriteOnce() var ENERGY_VALUES: ConciseBalanceValues by WriteOnce() private set @@ -261,6 +274,11 @@ class ItemRepairerBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matt _CAPACITY = builder.defineDecimal("matterCapacity", Decimal(800), Decimal.ONE_TENTH) _ENERGY_CONSUMPTION = builder.defineDecimal("energyConsumption", Decimal(600), Decimal.ONE) + _ALLOW_TO_SKIP_ANVIL = builder + .comment("Allow to repair tools without having their anvil-repair items researched") + .comment("Ignored if onlyAnvil is true") + .define("allowToSkipAnvil", false) + _ONLY_ANVIL = builder .comment("Force repairing only by matter value of anvil materials") .comment("Doesn't make logical sense but might be good for balancing") @@ -274,7 +292,7 @@ class ItemRepairerBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matt .defineInRange("extractTicks", 200, 1, Int.MAX_VALUE) _FAILURE_CHANCE = builder - .comment("Chance that replication will fail at any given tick") + .comment("Constant additional chance (over pattern research factor) that replication will fail at any given tick") .comment("In event of failure repair tick is wasted, wasting resources") .defineInRange("failureChance", 0.01, 0.0, 0.99)