diff options
author | Dico <dico.karssiens@gmail.com> | 2018-09-26 07:08:42 +0100 |
---|---|---|
committer | Dico <dico.karssiens@gmail.com> | 2018-09-26 07:08:42 +0100 |
commit | 520ae530d2de076fa9e87da7f04fcf78e080f4de (patch) | |
tree | dafbe3c14d5b6cbe49eef4f87499d35d1c69676d /src/main/kotlin/io/dico/parcels2/blockvisitor/ExtraBlockChange.kt | |
parent | 2225bdae95b3de4985347edf30ae31a28f73f35b (diff) |
Make progress
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/blockvisitor/ExtraBlockChange.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/blockvisitor/ExtraBlockChange.kt | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/blockvisitor/ExtraBlockChange.kt b/src/main/kotlin/io/dico/parcels2/blockvisitor/ExtraBlockChange.kt new file mode 100644 index 0000000..3f7e070 --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/blockvisitor/ExtraBlockChange.kt @@ -0,0 +1,38 @@ +package io.dico.parcels2.blockvisitor + +import org.bukkit.block.Block +import org.bukkit.block.BlockState +import org.bukkit.block.Sign +import kotlin.reflect.KClass + +interface ExtraBlockChange { + fun update(block: Block) +} + +abstract class BlockStateChange<T : BlockState> : ExtraBlockChange { + abstract val stateClass: KClass<T> + + abstract fun update(state: T) + + override fun update(block: Block) { + val state = block.state + if (stateClass.isInstance(state)) { + @Suppress("UNCHECKED_CAST") + update(state as T) + } + } +} + +class SignStateChange(state: Sign) : BlockStateChange<Sign>() { + val lines = state.lines + + override val stateClass: KClass<Sign> + get() = Sign::class + + override fun update(state: Sign) { + for (i in lines.indices) { + val line = lines[i] + state.setLine(i, line) + } + } +} |