aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/features/items/recipes/StandaloneRecipeRenderer.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/features/items/recipes/StandaloneRecipeRenderer.kt')
-rw-r--r--src/main/kotlin/features/items/recipes/StandaloneRecipeRenderer.kt77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/main/kotlin/features/items/recipes/StandaloneRecipeRenderer.kt b/src/main/kotlin/features/items/recipes/StandaloneRecipeRenderer.kt
new file mode 100644
index 0000000..5a834eb
--- /dev/null
+++ b/src/main/kotlin/features/items/recipes/StandaloneRecipeRenderer.kt
@@ -0,0 +1,77 @@
+package moe.nea.firmament.features.items.recipes
+
+import io.github.notenoughupdates.moulconfig.gui.GuiComponent
+import me.shedaniel.math.Dimension
+import me.shedaniel.math.Point
+import me.shedaniel.math.Rectangle
+import net.minecraft.client.gui.components.events.AbstractContainerEventHandler
+import net.minecraft.client.gui.components.events.GuiEventListener
+import net.minecraft.network.chat.Component
+import net.minecraft.world.entity.LivingEntity
+import moe.nea.firmament.repo.SBItemStack
+import moe.nea.firmament.repo.recipes.RecipeLayouter
+
+class StandaloneRecipeRenderer(val bounds: Rectangle) : AbstractContainerEventHandler(), RecipeLayouter {
+
+ fun tick() {
+ widgets.forEach { it.tick() }
+ }
+
+ fun <T : RecipeWidget> addWidget(widget: T): T {
+ this.widgets.add(widget)
+ return widget
+ }
+
+ override fun createCyclingItemSlot(
+ x: Int,
+ y: Int,
+ content: List<SBItemStack>,
+ slotKind: RecipeLayouter.SlotKind
+ ): RecipeLayouter.CyclingItemSlot {
+ return addWidget(ItemSlotWidget(Point(x, y), content, slotKind))
+ }
+
+ val Rectangle.topLeft get() = Point(x, y)
+
+ override fun createTooltip(
+ rectangle: Rectangle,
+ label: List<Component>
+ ) {
+ addWidget(TooltipWidget(rectangle.topLeft, rectangle.size, label))
+ }
+
+ override fun createLabel(
+ x: Int,
+ y: Int,
+ text: Component
+ ): RecipeLayouter.Updater<Component> {
+ return addWidget(ComponentWidget(Point(x, y), text))
+ }
+
+ override fun createArrow(x: Int, y: Int): Rectangle {
+ return addWidget(ArrowWidget(Point(x, y))).rect
+ }
+
+ override fun createMoulConfig(
+ x: Int,
+ y: Int,
+ w: Int,
+ h: Int,
+ component: GuiComponent
+ ) {
+ addWidget(MoulConfigWidget(component, Point(x, y), Dimension(w, h)))
+ }
+
+ override fun createFire(point: Point, animationTicks: Int) {
+ addWidget(FireWidget(point, animationTicks))
+ }
+
+ override fun createEntity(rectangle: Rectangle, entity: LivingEntity) {
+ addWidget(EntityWidget(rectangle.topLeft, rectangle.size, entity))
+ }
+
+ val widgets: MutableList<RecipeWidget> = mutableListOf()
+ override fun children(): List<GuiEventListener> {
+ return widgets
+ }
+}