feat: Add /firm search command
This commit is contained in:
@@ -96,25 +96,27 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
|
||||
val mappedSetter = setter.xmap(fromT, toT)
|
||||
|
||||
private val delegateI by lazy {
|
||||
wrapComponent(RowComponent(
|
||||
AlignComponent(
|
||||
TextComponent(
|
||||
IMinecraft.instance.defaultFontRenderer,
|
||||
{ formatter(setter.get()) },
|
||||
25,
|
||||
TextComponent.TextAlignment.CENTER, false, false
|
||||
wrapComponent(
|
||||
RowComponent(
|
||||
AlignComponent(
|
||||
TextComponent(
|
||||
IMinecraft.instance.defaultFontRenderer,
|
||||
{ formatter(setter.get()) },
|
||||
25,
|
||||
TextComponent.TextAlignment.CENTER, false, false
|
||||
),
|
||||
GetSetter.constant(HorizontalAlign.CENTER),
|
||||
GetSetter.constant(VerticalAlign.CENTER)
|
||||
),
|
||||
GetSetter.constant(HorizontalAlign.CENTER),
|
||||
GetSetter.constant(VerticalAlign.CENTER)
|
||||
),
|
||||
SliderComponent(
|
||||
mappedSetter,
|
||||
fromT(minValue),
|
||||
fromT(maxValue),
|
||||
minStep,
|
||||
40
|
||||
SliderComponent(
|
||||
mappedSetter,
|
||||
fromT(minValue),
|
||||
fromT(maxValue),
|
||||
minStep,
|
||||
40
|
||||
)
|
||||
)
|
||||
))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,100 +304,109 @@ class MCConfigEditorIntegration : FirmamentConfigScreenProvider {
|
||||
}
|
||||
}
|
||||
|
||||
override fun open(parent: Screen?): Screen {
|
||||
val configObject = object : Config() {
|
||||
override fun saveNow() {
|
||||
ManagedConfig.allManagedConfigs.getAll().forEach { it.save() }
|
||||
val configObject = object : Config() {
|
||||
override fun saveNow() {
|
||||
ManagedConfig.allManagedConfigs.getAll().forEach { it.save() }
|
||||
}
|
||||
|
||||
override fun shouldAutoFocusSearchbar(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getTitle(): String {
|
||||
return "Firmament ${Firmament.version.friendlyString}"
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in java")
|
||||
override fun executeRunnable(runnableId: Int) {
|
||||
if (runnableId >= 0)
|
||||
ErrorUtil.softError("Executed runnable $runnableId")
|
||||
}
|
||||
|
||||
override fun getDescriptionBehaviour(option: ProcessedOption?): DescriptionRendereringBehaviour {
|
||||
return DescriptionRendereringBehaviour.EXPAND_PANEL
|
||||
}
|
||||
|
||||
fun mkSocial(name: String, identifier: Identifier, link: String) = object : Social() {
|
||||
override fun onClick() {
|
||||
Util.getOperatingSystem().open(URI(link))
|
||||
}
|
||||
|
||||
override fun shouldAutoFocusSearchbar(): Boolean {
|
||||
return true
|
||||
override fun getTooltip(): List<String> {
|
||||
return listOf(name)
|
||||
}
|
||||
|
||||
override fun getTitle(): String {
|
||||
return "Firmament ${Firmament.version.friendlyString}"
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in java")
|
||||
override fun executeRunnable(runnableId: Int) {
|
||||
if (runnableId >= 0)
|
||||
ErrorUtil.softError("Executed runnable $runnableId")
|
||||
}
|
||||
|
||||
override fun getDescriptionBehaviour(option: ProcessedOption?): DescriptionRendereringBehaviour {
|
||||
return DescriptionRendereringBehaviour.EXPAND_PANEL
|
||||
}
|
||||
|
||||
fun mkSocial(name: String, identifier: Identifier, link: String) = object : Social() {
|
||||
override fun onClick() {
|
||||
Util.getOperatingSystem().open(URI(link))
|
||||
}
|
||||
|
||||
override fun getTooltip(): List<String> {
|
||||
return listOf(name)
|
||||
}
|
||||
|
||||
override fun getIcon(): MyResourceLocation {
|
||||
return identifier.toMoulConfig()
|
||||
}
|
||||
}
|
||||
|
||||
private val socials = listOf<Social>(
|
||||
mkSocial("Discord", Firmament.identifier("textures/socials/discord.png"),
|
||||
Firmament.modContainer.metadata.contact.get("discord").get()),
|
||||
mkSocial("Source Code", Firmament.identifier("textures/socials/git.png"),
|
||||
Firmament.modContainer.metadata.contact.get("sources").get()),
|
||||
mkSocial("Modrinth", Firmament.identifier("textures/socials/modrinth.png"),
|
||||
Firmament.modContainer.metadata.contact.get("modrinth").get()),
|
||||
)
|
||||
|
||||
override fun getSocials(): List<Social> {
|
||||
return socials
|
||||
override fun getIcon(): MyResourceLocation {
|
||||
return identifier.toMoulConfig()
|
||||
}
|
||||
}
|
||||
val categories = ManagedConfig.Category.entries.map {
|
||||
val options = mutableListOf<ProcessedOptionFirm>()
|
||||
var nextAccordionId = 720
|
||||
it.configs.forEach { config ->
|
||||
val categoryAccordionId = nextAccordionId++
|
||||
options.add(object : ProcessedOptionFirm(-1, configObject) {
|
||||
override fun getDebugDeclarationLocation(): String {
|
||||
return "FirmamentConfig:${config.name}"
|
||||
}
|
||||
|
||||
override fun getName(): String {
|
||||
return config.labelText.string
|
||||
}
|
||||
private val socials = listOf<Social>(
|
||||
mkSocial(
|
||||
"Discord", Firmament.identifier("textures/socials/discord.png"),
|
||||
Firmament.modContainer.metadata.contact.get("discord").get()
|
||||
),
|
||||
mkSocial(
|
||||
"Source Code", Firmament.identifier("textures/socials/git.png"),
|
||||
Firmament.modContainer.metadata.contact.get("sources").get()
|
||||
),
|
||||
mkSocial(
|
||||
"Modrinth", Firmament.identifier("textures/socials/modrinth.png"),
|
||||
Firmament.modContainer.metadata.contact.get("modrinth").get()
|
||||
),
|
||||
)
|
||||
|
||||
override fun getDescription(): String {
|
||||
return "Missing description"
|
||||
}
|
||||
|
||||
override fun get(): Any {
|
||||
return Unit
|
||||
}
|
||||
|
||||
override fun getType(): Type {
|
||||
return Unit.javaClass
|
||||
}
|
||||
|
||||
override fun set(value: Any?): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createEditor(): GuiOptionEditor {
|
||||
return GuiOptionEditorAccordion(this, categoryAccordionId)
|
||||
}
|
||||
})
|
||||
config.allOptions.forEach { (key, option) ->
|
||||
val processedOption = getHandler(option, categoryAccordionId, configObject)
|
||||
options.add(processedOption)
|
||||
}
|
||||
}
|
||||
|
||||
return@map ProcessedCategoryFirm(it, options)
|
||||
override fun getSocials(): List<Social> {
|
||||
return socials
|
||||
}
|
||||
}
|
||||
val categories = ManagedConfig.Category.entries.map {
|
||||
val options = mutableListOf<ProcessedOptionFirm>()
|
||||
var nextAccordionId = 720
|
||||
it.configs.forEach { config ->
|
||||
val categoryAccordionId = nextAccordionId++
|
||||
options.add(object : ProcessedOptionFirm(-1, configObject) {
|
||||
override fun getDebugDeclarationLocation(): String {
|
||||
return "FirmamentConfig:${config.name}"
|
||||
}
|
||||
|
||||
override fun getName(): String {
|
||||
return config.labelText.string
|
||||
}
|
||||
|
||||
override fun getDescription(): String {
|
||||
return "Missing description"
|
||||
}
|
||||
|
||||
override fun get(): Any {
|
||||
return Unit
|
||||
}
|
||||
|
||||
override fun getType(): Type {
|
||||
return Unit.javaClass
|
||||
}
|
||||
|
||||
override fun set(value: Any?): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun createEditor(): GuiOptionEditor {
|
||||
return GuiOptionEditorAccordion(this, categoryAccordionId)
|
||||
}
|
||||
})
|
||||
config.allOptions.forEach { (key, option) ->
|
||||
val processedOption = getHandler(option, categoryAccordionId, configObject)
|
||||
options.add(processedOption)
|
||||
}
|
||||
}
|
||||
|
||||
return@map ProcessedCategoryFirm(it, options)
|
||||
}
|
||||
|
||||
override fun open(search: String?, parent: Screen?): Screen {
|
||||
val editor = MoulConfigEditor(ProcessedCategory.collect(categories), configObject)
|
||||
if (search != null)
|
||||
editor.search(search)
|
||||
return GuiElementWrapper(editor) // TODO : add parent support
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user