Fix compact minus of fractions were actually adding

This commit is contained in:
DBotThePony 2021-12-23 23:38:09 +07:00
parent 26808f0ce8
commit e58b5b725e
Signed by: DBot
GPG Key ID: DCC23B5715498507
5 changed files with 38 additions and 3 deletions

View File

@ -147,7 +147,7 @@ public class BlockEntityMatterDecomposer extends BlockEntityMatteryWorker implem
if (MatterRegistry.canDecompose(copy)) { if (MatterRegistry.canDecompose(copy)) {
var matter_value = MatterRegistry.getMatterValue(copy); var matter_value = MatterRegistry.getMatterValue(copy);
if (!matter_value.equals(BigDecimal.ZERO) && matter.canReceiveAll(matter_value)) { if (!matter_value.equals(Fraction.ZERO) && matter.canReceiveAll(matter_value)) {
stack.shrink(1); stack.shrink(1);
return new MachineJob(copy, matter_value.toDouble() * 12_500d); return new MachineJob(copy, matter_value.toDouble() * 12_500d);
} }

View File

@ -9,6 +9,7 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatteryPowered; import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatteryPowered;
import ru.dbotthepony.mc.otm.capability.MatteryCapability; import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import ru.dbotthepony.mc.otm.core.Fraction; import ru.dbotthepony.mc.otm.core.Fraction;

View File

@ -30,7 +30,7 @@ public record MachineJob(ItemStack stack, double ticks_processing_time, Fraction
store_job.put("data", data); store_job.put("data", data);
store_job.put("stack", stack.serializeNBT()); store_job.put("stack", stack.serializeNBT());
store_job.putDouble("ticks_processing_time", ticks_processing_time); store_job.putDouble("ticks_processing_time", ticks_processing_time);
store_job.putString("power_consumption_multiplier", power_consumption_multiplier.toString()); store_job.put("power_consumption_multiplier", power_consumption_multiplier.serializeNBT());
return store_job; return store_job;
} }

View File

@ -190,7 +190,7 @@ data class Fraction @JvmOverloads constructor(@JvmField val value: BigInteger, @
fun minusCompact(other: Fraction): Fraction { fun minusCompact(other: Fraction): Fraction {
if (divisor == other.divisor) { if (divisor == other.divisor) {
if (divisor == BigInteger.ONE) if (divisor == BigInteger.ONE)
return Fraction(value + other.value) return Fraction(value - other.value)
val new = value - other.value val new = value - other.value
val mod = new % divisor val mod = new % divisor

View File

@ -118,4 +118,38 @@ object FractionTests {
assert(value.compareTo(Fraction.deserializeNBT(serialized)) == 0) assert(value.compareTo(Fraction.deserializeNBT(serialized)) == 0)
} }
@Test
@DisplayName("Fraction inaccurate representation")
fun inaccurate() {
var value = 1.1
var frac = Fraction(value)
assert(frac.toDouble() == value) { "$value != $frac as (${frac.toDouble()})" }
value = 1.45
frac = Fraction(value)
assert(frac.toDouble() == value) { "$value != $frac as (${frac.toDouble()})" }
value = -1.0
frac = Fraction(value)
assert(frac.toDouble() == value) { "$value != $frac as (${frac.toDouble()})" }
value = -254.66
frac = Fraction(value)
assert(frac.toDouble() == value) { "$value != $frac as (${frac.toDouble()})" }
value = 94.949494
frac = Fraction(value)
assert(frac.toDouble() == value) { "$value != $frac as (${frac.toDouble()})" }
value = 1.0 / 3
frac = Fraction(value)
assert(frac.toDouble() == value) { "$value != $frac as (${frac.toDouble()})" }
}
} }