9
0
mirror of https://github.com/Auxilor/EcoJobs.git synced 2025-12-20 15:39:26 +00:00

Compare commits

..

5 Commits

Author SHA1 Message Date
Auxilor
e4af959945 libreforge-updater 2022-11-06 19:51:41 +00:00
Auxilor
d1af2e25e7 Reworked Level GUI to use ecomponent 2022-11-06 15:29:38 +00:00
Auxilor
1eb0bdb639 libreforge-updater 2022-11-01 16:22:52 +00:00
Will FP
85e117ba78 Merge pull request #12 from 0ft3n/master
/jobs join tabcompletion fix (hardest fix in my life)
2022-11-01 16:18:08 +00:00
_OfTeN_
e27077dd71 Hardest fix in my life 2022-10-29 15:49:50 +03:00
4 changed files with 64 additions and 116 deletions

View File

@@ -42,12 +42,14 @@ allprojects {
shadowJar { shadowJar {
relocate('com.willfp.libreforge', 'com.willfp.ecojobs.libreforge') relocate('com.willfp.libreforge', 'com.willfp.ecojobs.libreforge')
relocate('com.willfp.ecomponent', 'com.willfp.ecojobs.ecomponent')
relocate('org.joml', 'com.willfp.ecojobs.libreforge.joml') relocate('org.joml', 'com.willfp.ecojobs.libreforge.joml')
} }
dependencies { dependencies {
compileOnly 'com.willfp:eco:6.44.0' compileOnly 'com.willfp:eco:6.44.0'
implementation 'com.willfp:libreforge:3.116.0' implementation 'com.willfp:libreforge:3.118.0'
implementation 'com.willfp:ecomponent:1.0.0'
implementation 'org.joml:joml:1.10.4' implementation 'org.joml:joml:1.10.4'
compileOnly 'org.jetbrains:annotations:23.0.0' compileOnly 'org.jetbrains:annotations:23.0.0'

View File

@@ -53,7 +53,7 @@ class CommandJoin(plugin: EcoPlugin) : Subcommand(plugin, "join", "ecojobs.comma
if (args.size == 1) { if (args.size == 1) {
StringUtil.copyPartialMatches( StringUtil.copyPartialMatches(
args[1], args[0],
Jobs.values().filter { sender.hasJob(it) }.map { it.id }, Jobs.values().filter { sender.hasJob(it) }.map { it.id },
completions completions
) )

View File

@@ -3,6 +3,9 @@ package com.willfp.ecojobs.jobs
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.gui.menu import com.willfp.eco.core.gui.menu
import com.willfp.eco.core.gui.menu.Menu import com.willfp.eco.core.gui.menu.Menu
import com.willfp.eco.core.gui.menu.MenuLayer
import com.willfp.eco.core.gui.onLeftClick
import com.willfp.eco.core.gui.page.PageChanger
import com.willfp.eco.core.gui.slot import com.willfp.eco.core.gui.slot
import com.willfp.eco.core.gui.slot.ConfigSlot import com.willfp.eco.core.gui.slot.ConfigSlot
import com.willfp.eco.core.gui.slot.FillerMask import com.willfp.eco.core.gui.slot.FillerMask
@@ -10,63 +13,61 @@ import com.willfp.eco.core.gui.slot.MaskItems
import com.willfp.eco.core.items.Items import com.willfp.eco.core.items.Items
import com.willfp.eco.core.items.builder.ItemStackBuilder import com.willfp.eco.core.items.builder.ItemStackBuilder
import com.willfp.eco.util.NumberUtils import com.willfp.eco.util.NumberUtils
import org.bukkit.Material import com.willfp.ecomponent.components.LevelComponent
import com.willfp.ecomponent.components.LevelState
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import kotlin.math.ceil
import kotlin.math.max
import kotlin.math.min
import kotlin.properties.Delegates
class JobLevelGUI( class JobLevelGUI(
plugin: EcoPlugin, plugin: EcoPlugin,
private val job: Job private val job: Job
) { ) {
private val menu: Menu private val menu: Menu
private val pageKey = "page"
private var levelsPerPage by Delegates.notNull<Int>()
private var pages by Delegates.notNull<Int>()
private fun getPage(menu: Menu, player: Player): Int {
val page = menu.getState(player, pageKey) ?: 1
return min(pages, max(page, 1))
}
init { init {
val maskPattern = plugin.configYml.getStrings("level-gui.mask.pattern").toTypedArray() val maskPattern = plugin.configYml.getStrings("level-gui.mask.pattern").toTypedArray()
val maskItems = MaskItems.fromItemNames(plugin.configYml.getStrings("level-gui.mask.materials")) val maskItems = MaskItems.fromItemNames(plugin.configYml.getStrings("level-gui.mask.materials"))
val progressionOrder = "123456789abcdefghijklmnopqrstuvwxyz"
val progressionPattern = plugin.configYml.getStrings("level-gui.progression-slots.pattern") val progressionPattern = plugin.configYml.getStrings("level-gui.progression-slots.pattern")
val progressionSlots = mutableMapOf<Int, Pair<Int, Int>>() val component = object : LevelComponent(progressionPattern, job.maxLevel) {
override fun getLevelItem(player: Player, menu: Menu, level: Int, levelState: LevelState): ItemStack {
val key = levelState.name.lowercase().replace("_", "-")
var x = 0 return ItemStackBuilder(Items.lookup(plugin.configYml.getString("level-gui.progression-slots.$key.item")))
for (row in progressionPattern) { .setDisplayName(
x++ plugin.configYml.getFormattedString("level-gui.progression-slots.$key.name")
var y = 0 .replace("%job%", job.name)
for (char in row) { .replace("%level%", level.toString())
y++ .replace("%level_numeral%", NumberUtils.toNumeral(level))
if (char == '0') { )
continue .addLoreLines(
job.injectPlaceholdersInto(
plugin.configYml.getFormattedStrings("level-gui.progression-slots.$key.lore"),
player,
forceLevel = level
)
)
.setAmount(
if (plugin.configYml.getBool("level-gui.progression-slots.level-as-amount")) level else 1
)
.build()
}
override fun getLevelState(player: Player, level: Int): LevelState {
return when {
level <= player.getJobLevel(job) -> LevelState.UNLOCKED
level == player.getJobLevel(job) + 1 -> LevelState.IN_PROGRESS
else -> LevelState.LOCKED
} }
val pos = progressionOrder.indexOf(char)
if (pos == -1) {
continue
}
progressionSlots[pos + 1] = Pair(x, y)
} }
} }
levelsPerPage = progressionSlots.size
pages = ceil(job.maxLevel.toDouble() / levelsPerPage).toInt()
menu = menu(plugin.configYml.getInt("level-gui.rows")) { menu = menu(plugin.configYml.getInt("level-gui.rows")) {
title = job.name title = job.name
maxPages(component.pages)
setMask( setMask(
FillerMask( FillerMask(
maskItems, maskItems,
@@ -74,58 +75,11 @@ class JobLevelGUI(
) )
) )
for ((level, value) in progressionSlots) { addComponent(1, 1, component)
setSlot(
value.first,
value.second,
slot(ItemStack(Material.BLACK_STAINED_GLASS_PANE)) {
setUpdater { player, menu, _ ->
val page = getPage(menu, player)
val slotLevel = ((page - 1) * levelsPerPage) + level // Instead of the page changer, this will show up when on the first page
addComponent(
fun getItem(section: String) = MenuLayer.LOWER,
ItemStackBuilder(Items.lookup(plugin.configYml.getString("level-gui.progression-slots.$section.item")))
.setDisplayName(
plugin.configYml.getFormattedString("level-gui.progression-slots.$section.name")
.replace("%job%", job.name)
.replace("%level%", slotLevel.toString())
.replace("%level_numeral%", NumberUtils.toNumeral(slotLevel))
)
.addLoreLines(
job.injectPlaceholdersInto(
plugin.configYml.getFormattedStrings("level-gui.progression-slots.$section.lore"),
player,
forceLevel = slotLevel
)
)
.build()
if (slotLevel > job.maxLevel) {
maskItems.items[0].item
} else {
val item = when {
slotLevel <= player.getJobLevel(job) -> {
getItem("unlocked")
}
slotLevel == player.getJobLevel(job) + 1 -> {
getItem("in-progress")
}
else -> {
getItem("locked")
}
}
if (plugin.configYml.getBool("level-gui.progression-slots.level-as-amount")) {
item.amount = slotLevel
}
item
}
}
}
)
}
setSlot(
plugin.configYml.getInt("level-gui.progression-slots.prev-page.location.row"), plugin.configYml.getInt("level-gui.progression-slots.prev-page.location.row"),
plugin.configYml.getInt("level-gui.progression-slots.prev-page.location.column"), plugin.configYml.getInt("level-gui.progression-slots.prev-page.location.column"),
slot( slot(
@@ -133,38 +87,30 @@ class JobLevelGUI(
.setDisplayName(plugin.configYml.getString("level-gui.progression-slots.prev-page.name")) .setDisplayName(plugin.configYml.getString("level-gui.progression-slots.prev-page.name"))
.build() .build()
) { ) {
onLeftClick { event, _, menu -> onLeftClick { player, _, _, _ -> JobsGUI.open(player) }
val player = event.whoClicked as Player
val page = getPage(menu, player)
val newPage = max(0, page - 1)
if (newPage == 0) {
JobsGUI.open(player)
} else {
menu.setState(player, pageKey, newPage)
}
}
} }
) )
setSlot(
addComponent(
plugin.configYml.getInt("level-gui.progression-slots.prev-page.location.row"),
plugin.configYml.getInt("level-gui.progression-slots.prev-page.location.column"),
PageChanger(
ItemStackBuilder(Items.lookup(plugin.configYml.getString("level-gui.progression-slots.prev-page.material")))
.setDisplayName(plugin.configYml.getString("level-gui.progression-slots.prev-page.name"))
.build(),
PageChanger.Direction.BACKWARDS
)
)
addComponent(
plugin.configYml.getInt("level-gui.progression-slots.next-page.location.row"), plugin.configYml.getInt("level-gui.progression-slots.next-page.location.row"),
plugin.configYml.getInt("level-gui.progression-slots.next-page.location.column"), plugin.configYml.getInt("level-gui.progression-slots.next-page.location.column"),
slot( PageChanger(
ItemStackBuilder(Items.lookup(plugin.configYml.getString("level-gui.progression-slots.next-page.material"))) ItemStackBuilder(Items.lookup(plugin.configYml.getString("level-gui.progression-slots.next-page.material")))
.setDisplayName(plugin.configYml.getString("level-gui.progression-slots.next-page.name")) .setDisplayName(plugin.configYml.getString("level-gui.progression-slots.next-page.name"))
.build() .build(),
) { PageChanger.Direction.FORWARDS
onLeftClick { event, _, menu -> )
val player = event.whoClicked as Player
val page = getPage(menu, player)
val newPage = min(pages, page + 1)
menu.setState(player, pageKey, newPage)
}
}
) )
setSlot( setSlot(

View File

@@ -1,4 +1,4 @@
#libreforge-updater #libreforge-updater
#Fri Oct 28 11:34:14 BST 2022 #Sun Nov 06 19:51:41 GMT 2022
version=1.21.0 version=1.23.0
plugin-name=EcoJobs plugin-name=EcoJobs