From f742d6d81923b394517c557e72e656eec871cf1e Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sun, 29 Jan 2023 21:54:59 +0700 Subject: [PATCH] Declare redstone control as abstract class, not interface to further enforce composition usage of this class --- .../mc/otm/block/entity/MatteryBlockEntity.kt | 2 +- .../mc/otm/block/entity/RedstoneControl.kt | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt index b2a0bf3c3..8b187d490 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt @@ -27,7 +27,7 @@ abstract class MatteryBlockEntity( p_155230_: BlockState ) : SynchronizedBlockEntity(p_155228_, p_155229_, p_155230_), MenuProvider, IRedstoneControlProvider { var customDisplayName: Component? = null - override val redstoneControl: IRedstoneControl = RedstoneControl(::redstoneStatusUpdated) + override val redstoneControl: AbstractRedstoneControl = RedstoneControl(::redstoneStatusUpdated) protected open val defaultDisplayName: Component get() = level?.getBlockState(blockPos)?.block?.name ?: TextComponent("null at $blockPos") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt index 92a5401aa..8f6e80e88 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt @@ -7,12 +7,12 @@ import ru.dbotthepony.mc.otm.core.nbt.set import ru.dbotthepony.mc.otm.network.FieldSynchronizer interface IRedstoneControlProvider { - val redstoneControl: IRedstoneControl + val redstoneControl: AbstractRedstoneControl } -interface IRedstoneControl : INBTSerializable { - var redstoneSetting: RedstoneSetting - var redstoneSignal: Int +abstract class AbstractRedstoneControl : INBTSerializable { + abstract var redstoneSetting: RedstoneSetting + abstract var redstoneSignal: Int val isBlockedByRedstone: Boolean get() = !redstoneSetting.test(redstoneSignal) @@ -40,7 +40,7 @@ interface IRedstoneControl : INBTSerializable { } } -class RedstoneControl(private val valueChanges: (new: Boolean, old: Boolean) -> Unit) : IRedstoneControl { +class RedstoneControl(private val valueChanges: (new: Boolean, old: Boolean) -> Unit) : AbstractRedstoneControl() { override var redstoneSetting: RedstoneSetting = RedstoneSetting.LOW set(level) { val old = isBlockedByRedstone @@ -66,7 +66,7 @@ class RedstoneControl(private val valueChanges: (new: Boolean, old: Boolean) -> class SynchronizedRedstoneControl( synchronizer: FieldSynchronizer, private val valueChanges: (new: Boolean, old: Boolean) -> Unit -) : IRedstoneControl { +) : AbstractRedstoneControl() { override var redstoneSetting: RedstoneSetting by synchronizer.enum(RedstoneSetting.LOW, setter = { value, access, setByRemote -> if (setByRemote) { access.write(value)