Skip to content

Commit

Permalink
Started adding gui designer for plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt-MX committed May 6, 2024
1 parent 99954f0 commit 7ec5291
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
27 changes: 27 additions & 0 deletions plugin/src/main/kotlin/com/mattmx/ktgui/creator/GuiDesigner.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.mattmx.ktgui.creator

import com.mattmx.ktgui.components.screen.GuiScreen
import com.mattmx.ktgui.utils.not

class GuiDesigner(
val name: String
) : GuiScreen(!"Designer ($name&r)") {

init {
click.any {
event.isCancelled = false

// todo save instance
}
}

fun export(): String {
val start = "gui(\"$name\") {"
val middle = items.values.filterIsInstance<GuiDesignerButton>()
.joinToString("\n") { it.full + " childOf this" }
val end = "}"

return "$start$middle$end"
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.mattmx.ktgui.creator

import com.mattmx.ktgui.components.button.GuiButton
import com.mattmx.ktgui.utils.legacy
import org.bukkit.inventory.ItemStack

class GuiDesignerButton(item: ItemStack) : GuiButton<GuiDesignerButton>(item) {

val enchantPart: String
get() {
val start = "enchant { "
val enchantments = getItemStack()!!.enchantments.entries
if (enchantments.isEmpty()) return ""

val middle = enchantments.joinToString("\n") { (e, l) ->
" this += Enchantment.${e.name} lvl $l"
}
return "$start$middle\n}"
}

val lorePart: String
get() {
val start = "lore {"
val lore = getItemStack()!!.lore()
?: return ""
if (lore.isEmpty()) return ""

val middle = lore.joinToString("\n") {
" add(\"${it.legacy()}\")"
}
return "$start$middle\n}"
}

val namedPart: String
get() {
val name = getItemStack()!!.displayName().legacy()
return "named(\"$name\")"
}

val slotsPart: String
get() {
return "slots listOf(${slots().joinToString(", ")})"
}

val full: String
get() {
val start = "button(Material.${getItemStack()!!.type}) {"

val tab = " "
var middle = tab
middle += namedPart + "\n"
middle += lorePart.split("\n").joinToString("\n$tab") + "\n"
middle += enchantPart.split("\n").joinToString("\n$tab") + "\n"

val end = "} $slotsPart"

return start + middle + end
}

}

0 comments on commit 7ec5291

Please sign in to comment.