PhysicalConnectivity/src/main/kotlin/net/shadowfacts/phycon/client/model/RedstoneControllerModel.kt

48 lines
1.5 KiB
Kotlin

package net.shadowfacts.phycon.client.model
import net.minecraft.block.BlockState
import net.minecraft.client.render.model.BakedModel
import net.minecraft.client.render.model.ModelLoader
import net.minecraft.client.texture.Sprite
import net.minecraft.client.util.SpriteIdentifier
import net.minecraft.util.Identifier
import net.shadowfacts.phycon.PhysicalConnectivity
import net.shadowfacts.phycon.block.FaceDeviceBlock
import net.shadowfacts.phycon.block.redstone_controller.RedstoneControllerBlock
import java.util.function.Function
/**
* @author shadowfacts
*/
object RedstoneControllerModel: FaceDeviceModel() {
private val ON = Identifier(PhysicalConnectivity.MODID, "block/redstone_controller_side_on")
private val OFF = Identifier(PhysicalConnectivity.MODID, "block/redstone_controller_side_off")
private val onModels = Array<BakedModel?>(6) { null }
private val offModels = Array<BakedModel?>(6) { null }
override fun getSideModelIDs(): Collection<Identifier> {
return listOf(ON, OFF)
}
override fun bakeSideModels(loader: ModelLoader, textureGetter: Function<SpriteIdentifier, Sprite>) {
defaultRotations.forEachIndexed { i, rot ->
onModels[i] = loader.bake(ON, rot)
offModels[i] = loader.bake(OFF, rot)
}
}
override fun getSideModel(state: BlockState): BakedModel? {
return if (state[RedstoneControllerBlock.POWERED]) {
onModels[state[FaceDeviceBlock.FACING].ordinal]
} else {
offModels[state[FaceDeviceBlock.FACING].ordinal]
}
}
override fun getParticleSprite(): Sprite {
return offModels.first()!!.particleSprite
}
}