summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/blockvisitor/ExtraBlockChange.kt
blob: 3f7e070a837b5410c76cce9f58aa6660d046c2d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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)
        }
    }
}