aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/events/EntityRenderTintEvent.kt
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-02-02 00:08:18 +0100
committerLinnea Gräf <nea@nea.moe>2025-02-02 00:08:18 +0100
commit89bceb6735a1e934287c3e01636a203758b085c8 (patch)
tree0766b8d4c10510bdd09f69fc1b50f7a4c1849372 /src/main/kotlin/events/EntityRenderTintEvent.kt
parentc2aefe09ab9bb8fec234ec10cbfc127dd6f7e4d2 (diff)
downloadFirmament-89bceb6735a1e934287c3e01636a203758b085c8.tar.gz
Firmament-89bceb6735a1e934287c3e01636a203758b085c8.tar.bz2
Firmament-89bceb6735a1e934287c3e01636a203758b085c8.zip
feat: Highlight century cake slice players
Diffstat (limited to 'src/main/kotlin/events/EntityRenderTintEvent.kt')
-rw-r--r--src/main/kotlin/events/EntityRenderTintEvent.kt66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/main/kotlin/events/EntityRenderTintEvent.kt b/src/main/kotlin/events/EntityRenderTintEvent.kt
new file mode 100644
index 0000000..29b888b
--- /dev/null
+++ b/src/main/kotlin/events/EntityRenderTintEvent.kt
@@ -0,0 +1,66 @@
+package moe.nea.firmament.events
+
+import net.minecraft.client.render.GameRenderer
+import net.minecraft.client.render.OverlayTexture
+import net.minecraft.client.render.entity.state.EntityRenderState
+import net.minecraft.entity.Entity
+import net.minecraft.entity.LivingEntity
+import moe.nea.firmament.util.render.TintedOverlayTexture
+
+/**
+ * Change the tint color of a [LivingEntity]
+ */
+class EntityRenderTintEvent(
+ val entity: Entity,
+ val renderState: HasTintRenderState
+) : FirmamentEvent.Cancellable() {
+ init {
+ if (entity !is LivingEntity) {
+ cancel()
+ }
+ }
+
+ companion object : FirmamentEventBus<EntityRenderTintEvent>() {
+ /**
+ * Static variable containing an override for [GameRenderer.getOverlayTexture]. Should be only set briefly.
+ *
+ * This variable only affects render layers that naturally make use of the overlay texture, have proper overlay UVs set (`overlay u != 0`), and have a shader that makes use of the overlay (does not have the `NO_OVERLAY` flag set in its json definition).
+ *
+ * Currently supported layers: [net.minecraft.client.render.entity.equipment.EquipmentRenderer], [net.minecraft.client.render.entity.model.PlayerEntityModel], as well as some others naturally.
+ *
+ * @see moe.nea.firmament.mixins.render.entitytints.ReplaceOverlayTexture
+ * @see TintedOverlayTexture
+ */
+ @JvmField
+ var overlayOverride: OverlayTexture? = null
+ }
+
+ @Suppress("PropertyName", "FunctionName")
+ interface HasTintRenderState {
+ /**
+ * Multiplicative tint applied before the overlay.
+ */
+ var tint_firmament: Int
+
+ /**
+ * Must be set for [tint_firmament] to have any effect.
+ */
+ var hasTintOverride_firmament: Boolean
+
+ // TODO: allow for more specific selection of which layers get tinted
+ /**
+ * Specify a [TintedOverlayTexture] to be used. This does not apply to render layers not using the overlay texture.
+ * @see overlayOverride
+ */
+ var overlayTexture_firmament: TintedOverlayTexture?
+ fun reset_firmament()
+
+ companion object {
+ @JvmStatic
+ fun cast(state: EntityRenderState): HasTintRenderState {
+ return state as HasTintRenderState
+ }
+ }
+ }
+
+}