From 4c338a8d2dd1e6de090c65681ab7a46be9e4a160 Mon Sep 17 00:00:00 2001 From: IridescentVoid <265486018+IridescentVoid@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:10:10 -0700 Subject: [PATCH] feat: Media Reflection from hexpose --- CHANGELOG.md | 1 + .../casting/actions/environment/OpGetMedia.kt | 17 +++++++++++++++++ .../hexcasting/common/lib/hex/HexActions.java | 3 +++ .../assets/hexcasting/lang/en_us.flatten.json5 | 2 ++ .../en_us/entries/patterns/basics.json | 8 ++++++++ 5 files changed, 31 insertions(+) create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/casting/actions/environment/OpGetMedia.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index ab8aff74a1..8c48be786b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - Added connected textures for Akashic Ligatures when using Continuity or Optifine ([#885](https://github.com/FallingColors/HexMod/pull/885)) @kineticneticat - Added Similarity Distillation and Dissimilarity Distillation for comparing iota types ([#1114](https://github.com/FallingColors/HexMod/pull/1114)) @IridescentVoid - Added Contemplation for escaping without the exponential growth of Consideration ([#1102](https://github.com/FallingColors/HexMod/pull/1102)) @IridescentVoid +- Added Media Reflection for checking media available to the cast ([#1235](https://github.com/FallingColors/HexMod/pull/1235)) @IridescentVoid ### Changed diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/environment/OpGetMedia.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/environment/OpGetMedia.kt new file mode 100644 index 0000000000..d918592ba7 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/environment/OpGetMedia.kt @@ -0,0 +1,17 @@ +package at.petrak.hexcasting.common.casting.actions.environment + +import at.petrak.hexcasting.api.casting.asActionResult +import at.petrak.hexcasting.api.casting.castables.ConstMediaAction +import at.petrak.hexcasting.api.casting.eval.CastingEnvironment +import at.petrak.hexcasting.api.casting.iota.Iota +import at.petrak.hexcasting.api.misc.MediaConstants + +object OpGetMedia : ConstMediaAction { + override val argc = 0 + + override fun execute(args: List, env: CastingEnvironment): List { + val mediaRaw = Long.MAX_VALUE - env.extractMedia(Long.MAX_VALUE, true) + + return (mediaRaw.toDouble() / MediaConstants.DUST_UNIT.toDouble()).asActionResult + } +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java index 23103fac87..7e5716bed9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java @@ -16,6 +16,7 @@ import at.petrak.hexcasting.common.casting.actions.circles.OpCircleBounds; import at.petrak.hexcasting.common.casting.actions.circles.OpImpetusDir; import at.petrak.hexcasting.common.casting.actions.circles.OpImpetusPos; +import at.petrak.hexcasting.common.casting.actions.environment.OpGetMedia; import at.petrak.hexcasting.common.casting.actions.escaping.*; import at.petrak.hexcasting.common.casting.actions.eval.*; import at.petrak.hexcasting.common.casting.actions.lists.OpEmptyList; @@ -96,6 +97,8 @@ public class HexActions { new ActionRegistryEntry(HexPattern.fromAngles("weddwaa", HexDir.EAST), OpBlockAxisRaycast.INSTANCE)); public static final ActionRegistryEntry RAYCAST_ENTITY = make("raycast/entity", new ActionRegistryEntry(HexPattern.fromAngles("weaqa", HexDir.EAST), OpEntityRaycast.INSTANCE)); + public static final ActionRegistryEntry GET_MEDIA = make("get_media", + new ActionRegistryEntry(HexPattern.fromAngles("dde", HexDir.WEST), OpGetMedia.INSTANCE)); // == spell circle getters == diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 3c896ac0f4..fd4f3d2c66 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -752,6 +752,7 @@ raycast: "Archer's Distillation", "raycast/axis": "Architect's Distillation", "raycast/entity": "Scout's Distillation", + get_media: "Media Reflection", "circle/": { impetus_pos: "Waystone Reflection", @@ -1781,6 +1782,7 @@ "raycast/entity": "Like $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$, but instead returns the $(italic)entity/$ I am looking at. Costs a negligible amount of _media.", get_entity_height: "Transforms an entity on the stack into its height.", get_entity_velocity: "Transforms an entity on the stack into the direction in which it's moving, with the speed of that movement as that direction's magnitude.", + get_media: "Pushes the amount of _media available to the current cast, in units of $(l:items/amethyst)$(item)Amethyst Dust/$.", }, numbers: { diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/basics.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/basics.json index bca8f6ea40..60075a9dca 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/basics.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/basics.json @@ -93,6 +93,14 @@ "input": "entity", "output": "vector", "text": "hexcasting.page.basics_pattern.get_entity_velocity" + }, + { + "type": "hexcasting:pattern", + "op_id": "hexcasting:get_media", + "anchor": "hexcasting:get_media", + "input": "", + "output": "num", + "text": "hexcasting.page.basics_pattern.get_media" } ] }