aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/firmament/gui/entity/EntityWidget.kt
blob: 42fa4856b759245e3d2f2671b2a5a27fb4f82bfb (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
39
40
/*
 * SPDX-FileCopyrightText: 2024 Linnea Gräf <nea@nea.moe>
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 */

package moe.nea.firmament.gui.entity

import me.shedaniel.math.Dimension
import me.shedaniel.math.Point
import me.shedaniel.math.Rectangle
import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds
import net.minecraft.client.gui.DrawContext
import net.minecraft.client.gui.Element
import net.minecraft.entity.LivingEntity

class EntityWidget(val entity: LivingEntity, val point: Point) : WidgetWithBounds() {
    override fun children(): List<Element> {
        return emptyList()
    }

    var hasErrored = false

    override fun render(context: DrawContext, mouseX: Int, mouseY: Int, delta: Float) {
        try {
            if (!hasErrored)
                EntityRenderer.renderEntity(entity, context, point.x, point.y, mouseX.toFloat(), mouseY.toFloat())
        } catch (ex: Exception) {
            EntityRenderer.logger.error("Failed to render constructed entity: $entity", ex)
            hasErrored = true
        }
        if (hasErrored) {
            context.fill(point.x, point.y, point.x + 50, point.y + 80, 0xFFAA2222.toInt())
        }
    }

    override fun getBounds(): Rectangle {
        return Rectangle(point, Dimension(50, 80))
    }
}