Skip to content
This repository has been archived by the owner on Oct 3, 2022. It is now read-only.

Commit

Permalink
Merge pull request #212 from TheFruxz/feature/unfold
Browse files Browse the repository at this point in the history
Add JET-Unfold - Structured component build way
  • Loading branch information
TheFruxz authored Apr 3, 2022
2 parents 1c429fc + 08d9565 commit 3362ee8
Show file tree
Hide file tree
Showing 16 changed files with 194 additions and 23 deletions.
2 changes: 1 addition & 1 deletion .run/BUILD.run.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="" />
<option name="scriptParameters" value="--stacktrace" />
<option name="taskDescriptions">
<list />
</option>
Expand Down
12 changes: 11 additions & 1 deletion JET-Paper/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ var host = "github.com/TheFruxz/JET"

repositories {

maven("https://jitpack.io")
maven("https://papermc.io/repo/repository/maven-public/") // PaperMC
maven("https://mvn.intellectualsites.com/content/repositories/thirdparty/")

}

Expand All @@ -25,10 +25,14 @@ dependencies {
// Internal

implementation(project(":JET-JVM"))
implementation(project(":JET-Unfold"))

shadow(project(":JET-JVM")) {
isTransitive = false
}
shadow(project(":JET-Unfold")) {
isTransitive = false
}

// Kotlin

Expand All @@ -55,6 +59,12 @@ dependencies {
shadow("org.jetbrains.exposed:exposed-dao:0.37.3")
shadow("org.jetbrains.exposed:exposed-jdbc:0.37.3")

shadow("com.github.CoasterFreakDE:minecraft-spigot-rgb-chat-support:1.0.5")

shadow("net.kyori:adventure-api:4.10.1")
shadow("net.kyori:adventure-text-serializer-legacy:4.10.1")
shadow("net.kyori:adventure-text-minimessage:4.10.1")

}

java {
Expand Down
5 changes: 5 additions & 0 deletions JET-Paper/src/main/kotlin/de/jet/paper/app/JetApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ import de.jet.paper.tool.input.Keyboard
import de.jet.paper.tool.input.Keyboard.RenderEngine.Key
import de.jet.paper.tool.input.Keyboard.RenderEngine.KeyConfiguration
import de.jet.paper.tool.permission.Approval
import de.jet.unfold.text
import kotlinx.coroutines.cancel
import kotlinx.coroutines.cancelChildren
import kotlinx.coroutines.runBlocking
Expand Down Expand Up @@ -187,6 +188,10 @@ class JetApp : App() {
}
}

buildAndRegisterSandBox(this, "colorDemo") {
executor.sendMessage(text("<yellow>Woo: <gradient:#5e4fa2:#f79459:red>||||||||||||||||||||||||</gradient>!"))
}

}

override fun bye() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package de.jet.paper.app.component.chat
import de.jet.paper.extension.display.buildTextComponent
import de.jet.paper.extension.paper.consoleSender
import de.jet.paper.extension.paper.getPlayer
import de.jet.paper.extension.paper.legacyString
import de.jet.paper.extension.paper.onlinePlayers
import de.jet.paper.structure.app.event.EventListener
import de.jet.unfold.extension.legacyString
import io.papermc.paper.event.player.AsyncChatEvent
import net.kyori.adventure.sound.Sound
import net.kyori.adventure.sound.Sound.Source.MASTER
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package de.jet.paper.extension.display

import de.jet.paper.extension.interchange.InterchangeExecutor
import de.jet.paper.extension.paper.adventureComponent
import de.jet.paper.tool.display.message.Transmission
import de.jet.paper.tool.display.message.Transmission.Level
import de.jet.unfold.extension.adventureComponent

fun String.message(vararg participants: InterchangeExecutor) =
Transmission(content = this.adventureComponent.toBuilder())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import com.destroystokyo.paper.entity.ai.MobGoals
import de.jet.jvm.extension.classType.UUID
import de.jet.jvm.tool.smart.identification.Identifiable
import de.jet.paper.extension.interchange.InterchangeExecutor
import de.jet.unfold.extension.adventureComponent
import de.jet.unfold.extension.legacyString
import io.papermc.paper.datapack.DatapackManager
import net.kyori.adventure.text.Component
import org.bukkit.*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import de.jet.paper.extension.display.WHITE
import de.jet.paper.extension.display.ui.changeColor
import de.jet.paper.extension.paper.createBlockData
import de.jet.paper.extension.paper.itemFactory
import de.jet.paper.extension.paper.legacyString
import de.jet.paper.extension.system
import de.jet.paper.runtime.event.interact.PlayerInteractAtItemEvent
import de.jet.paper.structure.app.App
Expand All @@ -24,6 +23,7 @@ import de.jet.paper.tool.display.item.action.ItemClickAction
import de.jet.paper.tool.display.item.action.ItemDropAction
import de.jet.paper.tool.display.item.action.ItemInteractAction
import de.jet.paper.tool.display.item.quirk.Quirk
import de.jet.unfold.extension.legacyString
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.event.HoverEvent.ShowItem
import net.kyori.adventure.text.event.HoverEventSource
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import de.jet.jvm.tool.smart.positioning.Address.Companion.address
import de.jet.paper.app.JetData
import de.jet.paper.extension.interchange.InterchangeExecutor
import de.jet.paper.extension.lang
import de.jet.paper.extension.paper.adventureComponent
import de.jet.paper.extension.paper.consoleSender
import de.jet.paper.extension.paper.onlinePlayers
import de.jet.paper.tool.display.message.DisplayType.*
import de.jet.paper.tool.effect.sound.SoundLibrary
import de.jet.paper.tool.effect.sound.SoundMelody
import de.jet.unfold.extension.adventureComponent
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.TextComponent
import net.kyori.adventure.text.event.ClickEvent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import de.jet.paper.extension.display.ui.item
import de.jet.paper.extension.display.ui.panelIdentificationKey
import de.jet.paper.extension.paper.createInventory
import de.jet.paper.extension.paper.createKey
import de.jet.paper.extension.paper.legacyString
import de.jet.paper.extension.system
import de.jet.paper.extension.tasky.sync
import de.jet.paper.runtime.event.PanelClickEvent
Expand All @@ -25,6 +24,7 @@ import de.jet.paper.tool.display.ui.inventory.Container
import de.jet.paper.tool.effect.sound.SoundMelody
import de.jet.paper.tool.smart.Logging
import de.jet.paper.tool.smart.VendorsIdentifiable
import de.jet.unfold.extension.legacyString
import net.kyori.adventure.text.Component
import org.bukkit.Material
import org.bukkit.entity.HumanEntity
Expand Down
44 changes: 44 additions & 0 deletions JET-Unfold/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
kotlin("jvm")
kotlin("plugin.serialization")
}

repositories {

mavenCentral()

}

dependencies {

implementation(project(":JET-JVM"))
testImplementation(kotlin("test"))
implementation(kotlin("reflect"))

implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0")

implementation("io.ktor:ktor-client-serialization:1.6.8")
implementation("io.ktor:ktor-client-core:1.6.8")
implementation("io.ktor:ktor-client-cio:1.6.8")

implementation("net.kyori:adventure-api:4.10.1")
implementation("net.kyori:adventure-text-serializer-legacy:4.10.1")
implementation("net.kyori:adventure-text-minimessage:4.10.1")

}

java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

tasks {

withType<KotlinCompile> {
kotlinOptions.jvmTarget = "17"
}

}
17 changes: 17 additions & 0 deletions JET-Unfold/src/main/kotlin/de/jet/unfold/MoltenComponent.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package de.jet.unfold

import net.kyori.adventure.text.Component
import net.kyori.adventure.text.TextComponent
import java.util.function.Consumer

object MoltenComponent {

@JvmStatic
fun construct(process: Consumer<TextComponent.Builder>): Component = text(process::accept)

@JvmStatic
fun fromString(text: String) = text {
text(text)
}

}
11 changes: 11 additions & 0 deletions JET-Unfold/src/main/kotlin/de/jet/unfold/MoltenContext.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package de.jet.unfold

interface MoltenContext<T> {

companion object {

fun <X> contextOf() = object : MoltenContext<X> { }

}

}
78 changes: 78 additions & 0 deletions JET-Unfold/src/main/kotlin/de/jet/unfold/Unfold.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
@file:Suppress("unused") // TODO use kotlin context API to avoid 'useless' seeming object extensions

package de.jet.unfold

import io.ktor.http.*
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.TextComponent
import net.kyori.adventure.text.event.ClickEvent
import net.kyori.adventure.text.event.HoverEventSource
import net.kyori.adventure.text.minimessage.MiniMessage
import java.io.File
import java.net.URL
import java.nio.file.Path

private fun String.transform() = Component.text().append(MiniMessage.miniMessage().deserialize(this)).build()

fun text(build: TextComponent.Builder.() -> Unit) =
Component.text().apply(build).build()

fun text(componentContent: String) =
Component.text().append(componentContent.transform())

fun space() = Component.space()

fun empty() = Component.empty()

fun newline() = Component.newline()

fun MoltenContext<HoverEventSource<*>>.text(componentContent: String) =
text { text(componentContent) }

fun MoltenContext<HoverEventSource<*>>.space() =
text { text(" ") }

fun MoltenContext<HoverEventSource<*>>.empty() =
text { text("") }

fun MoltenContext<HoverEventSource<*>>.newline() =
text { text("\n") }

operator fun TextComponent.Builder.plus(component: Component) =
append(component)

fun TextComponent.Builder.text(componentContent: String) =
this + componentContent.transform()

fun TextComponent.Builder.text(componentContent: String, modify: TextComponent.Builder.() -> Unit) =
this.append(componentContent.transform().toBuilder().apply(modify).build())

fun TextComponent.Builder.hover(eventSource: MoltenContext<HoverEventSource<*>>.() -> HoverEventSource<*>) =
hoverEvent(eventSource(MoltenContext.contextOf()))

fun TextComponent.Builder.click(click: MoltenContext<ClickEvent>.() -> ClickEvent) =
clickEvent(click(MoltenContext.contextOf()))

fun MoltenContext<ClickEvent>.url(url: String) = ClickEvent.openUrl(url)

fun MoltenContext<ClickEvent>.url(url: URL) = ClickEvent.openUrl(url)

fun MoltenContext<ClickEvent>.url(url: Url) = ClickEvent.openUrl(url.toString())

fun MoltenContext<ClickEvent>.file(file: String) = ClickEvent.openFile(file)

fun MoltenContext<ClickEvent>.file(path: Path) = file("$path")

fun MoltenContext<ClickEvent>.file(file: File) = file(file.toPath())

fun MoltenContext<ClickEvent>.run(command: String) = ClickEvent.runCommand(command)

fun MoltenContext<ClickEvent>.suggest(command: String) = ClickEvent.suggestCommand(command)

fun MoltenContext<ClickEvent>.toPage(page: Int) = ClickEvent.changePage(page)

fun MoltenContext<ClickEvent>.toPage(page: String) = ClickEvent.changePage(page)

fun MoltenContext<ClickEvent>.copy(text: String) = ClickEvent.copyToClipboard(text)

fun MoltenContext<ClickEvent>.click(action: ClickEvent.Action, string: String) = ClickEvent.clickEvent(action, string)
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package de.jet.paper.extension.paper

import net.kyori.adventure.text.Component
import net.kyori.adventure.text.TextComponent
import net.kyori.adventure.text.format.NamedTextColor
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer

val Component.legacyString: String
get() = LegacyComponentSerializer.legacySection().serialize(this)

val TextComponent.legacyString: String
get() = LegacyComponentSerializer.legacySection().serialize(this)

val Any?.adventureComponent: TextComponent
get() = LegacyComponentSerializer.builder().hexColors().extractUrls().build().deserializeOr("$this", Component.text("FAILED", NamedTextColor.RED))!!
package de.jet.unfold.extension

import net.kyori.adventure.text.Component
import net.kyori.adventure.text.TextComponent
import net.kyori.adventure.text.format.NamedTextColor
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer

val adventureSerializer = LegacyComponentSerializer
.builder().extractUrls().hexColors().build()

val Component.legacyString: String
get() = adventureSerializer.serialize(this)

val TextComponent.legacyString: String
get() = adventureSerializer.serialize(this)

val Any?.adventureComponent: TextComponent
get() = adventureSerializer.deserializeOr("$this", Component.text("FAILED", NamedTextColor.RED))!!
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ plugins {

allprojects {

version = "1.0-PRE-5.1"
version = "1.0-PRE-6"
group = "de.jet"

repositories {
Expand Down
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ rootProject.name = "JET"
include("JET-JVM")
include("JET-JavaCord")
include("JET-Paper")
include("JET-Unfold")

0 comments on commit 3362ee8

Please sign in to comment.