Skip to content

Commit

Permalink
Stop recording entity cinematic without arctifact
Browse files Browse the repository at this point in the history
  • Loading branch information
gabber235 committed Nov 5, 2024
1 parent 9a3a9de commit 8d0d872
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package com.typewritermc.engine.paper.content

import com.typewritermc.core.utils.failure
import com.typewritermc.core.utils.ok
import com.typewritermc.engine.paper.content.components.IntractableItem
import com.typewritermc.engine.paper.content.components.ItemInteraction
import com.typewritermc.engine.paper.content.components.ItemInteractionType
import com.typewritermc.engine.paper.entry.entries.SystemTrigger
import com.typewritermc.engine.paper.entry.forceTriggerFor
import com.typewritermc.engine.paper.entry.triggerFor
import com.typewritermc.engine.paper.events.ContentEditorEndEvent
import com.typewritermc.engine.paper.events.ContentEditorStartEvent
import com.typewritermc.engine.paper.interaction.InteractionHandler
Expand Down Expand Up @@ -39,7 +42,7 @@ class ContentEditor(
private val mode: ContentMode?
get() = stack.peek()

suspend fun initialize() {
suspend fun initialize(): Result<Unit> {
player.playSound("block.beacon.activate")
SYNC.switchContext {
ContentEditorStartEvent(player).callEvent()
Expand All @@ -48,16 +51,16 @@ class ContentEditor(
val mode = mode
if (mode == null) {
SystemTrigger.CONTENT_END forceTriggerFor player
return
return failure("No content mode found")
}
val result = mode.setup()
if (result.isFailure) {
logger.severe("Failed to setup content mode for player ${player.name}: ${result.exceptionOrNull()?.message}")
player.msg("<red><b>Failed to setup content mode. Please report this to the server administrator.")
SystemTrigger.CONTENT_END forceTriggerFor player
return
player.msg("<red><b>Failed to setup content mode. Please see the console for more details.")
return result
}
mode.initialize()
return ok(Unit)
}

suspend fun tick() {
Expand Down Expand Up @@ -86,22 +89,34 @@ class ContentEditor(
}
}

suspend fun pushMode(newMode: ContentMode) {
suspend fun pushMode(newMode: ContentMode): Result<Unit> {
player.playSound("ui.loom.take_result")
val previous = mode
newMode.setup()
val result = newMode.setup()
stack.push(newMode)
previous?.dispose()
if (result.isFailure) {
logger.severe("Failed to setup content mode: ${result.exceptionOrNull()?.message}")
player.msg("<red><bold>Failed to setup content mode. Please see the console for more details.")
return result
}
newMode.initialize()
return ok(Unit)
}

suspend fun swapMode(newMode: ContentMode) {
suspend fun swapMode(newMode: ContentMode): Result<Unit> {
player.playSound("ui.loom.take_result")
val previous = stack.pop()
newMode.setup()
val result = newMode.setup()
stack.push(newMode)
previous.dispose()
if (result.isFailure) {
logger.severe("Failed to setup content mode: ${result.exceptionOrNull()?.message}")
player.msg("<red><bold>Failed to setup content mode. Please see the console for more details.")
return result
}
newMode.initialize()
return ok(Unit)
}

suspend fun popMode(): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import com.typewritermc.engine.paper.entry.triggerFor
import com.typewritermc.engine.paper.logger
import com.typewritermc.engine.paper.plugin
import com.typewritermc.engine.paper.utils.ThreadType.DISPATCHERS_ASYNC
import com.typewritermc.engine.paper.utils.msg
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.sync.Mutex
Expand Down Expand Up @@ -258,6 +259,7 @@ class Interaction(val player: Player) : KoinComponent {
val content = content ?: return
this.content = null
content.dispose()
return
}

if (CONTENT_POP in event) {
Expand All @@ -273,15 +275,22 @@ class Interaction(val player: Player) : KoinComponent {

val content = content
if (content != null) {
if (trigger is ContentModeSwapTrigger) {
val result = if (trigger is ContentModeSwapTrigger) {
content.swapMode(trigger.mode)
} else {
content.pushMode(trigger.mode)
}
if (result.isFailure) {
handleContent(Event(player, listOf(CONTENT_END)))
}
return
}
this.content = ContentEditor(trigger.context, player, trigger.mode).also {
it.initialize()
val editor = ContentEditor(trigger.context, player, trigger.mode)
val result = editor.initialize()
if (result.isFailure) {
editor.dispose()
} else {
this.content = editor
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ import com.typewritermc.core.books.pages.Colors
import com.typewritermc.core.entries.Ref
import com.typewritermc.core.entries.emptyRef
import com.typewritermc.core.extension.annotations.*
import com.typewritermc.core.utils.failure
import com.typewritermc.core.utils.ok
import com.typewritermc.engine.paper.content.ContentContext
import com.typewritermc.engine.paper.content.ContentMode
import com.typewritermc.engine.paper.content.components.cinematic
import com.typewritermc.engine.paper.content.components.exit
import com.typewritermc.engine.paper.content.fieldValue
import com.typewritermc.engine.paper.content.modes.*
import com.typewritermc.engine.paper.entry.AssetManager
import com.typewritermc.engine.paper.entry.Criteria
Expand Down Expand Up @@ -207,6 +209,16 @@ class EntityCinematicAction(

class EntityCinematicViewing(context: ContentContext, player: Player) : ContentMode(context, player) {
override suspend fun setup(): Result<Unit> {
val result = getAssetFromFieldValue(context.fieldValue)
if (result.isFailure) {
return failure(
"""
|You forgot to specify the EntityCinematicArtifact.
|It is required for recording the cinematic.
""".trimMargin()
)
}

exit()
val cinematic = cinematic(context)
recordingCinematic(context, 4, cinematic::frame, ::EntityCinematicRecording)
Expand Down

0 comments on commit 8d0d872

Please sign in to comment.