Compare commits

...

10 Commits

Author SHA1 Message Date
Auxilor
120db25a11 libreforge-updater 2022-11-24 14:31:26 +00:00
Auxilor
c4ea85ff7f libreforge-updater 2022-11-23 17:26:26 +00:00
Auxilor
1c98a7257e libreforge-updater 2022-11-21 16:04:13 +00:00
Auxilor
5a810e4dfb libreforge-updater 2022-11-17 08:39:45 +00:00
Auxilor
ddaa9d36b6 libreforge-updater 2022-11-12 17:35:52 +00:00
Auxilor
1f274b57d1 libreforge-updater 2022-11-06 19:53:24 +00:00
Auxilor
1a7a92e6de Reworked level GUI to use ecomponent 2022-11-06 15:34:52 +00:00
Auxilor
e369e99510 Updated to 1.57.0 2022-11-04 13:11:09 +00:00
Auxilor
6fb565f6db Added setActivePet to API 2022-11-04 13:11:02 +00:00
Auxilor
c51b29ed35 libreforge-updater 2022-11-01 16:24:09 +00:00
5 changed files with 95 additions and 127 deletions

View File

@@ -43,12 +43,14 @@ allprojects {
shadowJar { shadowJar {
relocate('com.willfp.libreforge', 'com.willfp.ecopets.libreforge') relocate('com.willfp.libreforge', 'com.willfp.ecopets.libreforge')
relocate('com.willfp.ecomponent', 'com.willfp.ecopets.ecomponent')
relocate('org.joml', 'com.willfp.ecopets.libreforge.joml') relocate('org.joml', 'com.willfp.ecopets.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.122.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

@@ -17,6 +17,10 @@ internal object EcoPetsAPIImpl : EcoPetsAPI {
override fun getActivePet(player: OfflinePlayer): Pet? = player.activePet override fun getActivePet(player: OfflinePlayer): Pet? = player.activePet
override fun setActivePet(player: OfflinePlayer, pet: Pet?) {
player.activePet = pet
}
override fun getPetLevel(player: OfflinePlayer, pet: Pet) = player.getPetLevel(pet) override fun getPetLevel(player: OfflinePlayer, pet: Pet) = player.getPetLevel(pet)
override fun givePetExperience(player: Player, pet: Pet, amount: Double) = override fun givePetExperience(player: Player, pet: Pet, amount: Double) =

View File

@@ -28,6 +28,17 @@ interface EcoPetsAPI {
player: OfflinePlayer player: OfflinePlayer
): Pet? ): Pet?
/**
* Set a player's active pet.
*
* @param player The player.
* @param pet The pet.
*/
fun setActivePet(
player: OfflinePlayer,
pet: Pet?
)
/** /**
* Get a player's level of a certain pet. * Get a player's level of a certain pet.
* *
@@ -69,7 +80,8 @@ interface EcoPetsAPI {
) )
/** /**
* Get progress to next level between 0 and 1, where 0 is none and 1 is complete. * Get progress to next level between 0 and 1, where 0 is none and 1 is
* complete.
* *
* @param player The player. * @param player The player.
* @param pet The pet. * @param pet The pet.

View File

@@ -3,6 +3,9 @@ package com.willfp.ecopets.pets
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,62 @@ 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 PetLevelGUI( class PetLevelGUI(
plugin: EcoPlugin, plugin: EcoPlugin,
private val pet: Pet private val pet: Pet
) { ) {
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, pet.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("%pet%", pet.name)
for (char in row) { .replace("%level%", level.toString())
y++ .replace("%level_numeral%", NumberUtils.toNumeral(level))
if (char == '0') { )
continue .addLoreLines(
pet.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()
} }
val pos = progressionOrder.indexOf(char) override fun getLevelState(player: Player, level: Int): LevelState {
return when {
if (pos == -1) { level <= player.getPetLevel(pet) -> LevelState.UNLOCKED
continue level == player.getPetLevel(pet) + 1 -> LevelState.IN_PROGRESS
} else -> LevelState.LOCKED
}
progressionSlots[pos + 1] = Pair(x, y)
} }
} }
levelsPerPage = progressionSlots.size
pages = ceil(pet.maxLevel.toDouble() / levelsPerPage).toInt()
menu = menu(plugin.configYml.getInt("level-gui.rows")) { menu = menu(plugin.configYml.getInt("level-gui.rows")) {
setTitle(pet.name) title = pet.name
maxPages(component.pages)
setMask( setMask(
FillerMask( FillerMask(
maskItems, maskItems,
@@ -74,58 +76,11 @@ class PetLevelGUI(
) )
) )
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("%pet%", pet.name)
.replace("%level%", slotLevel.toString())
.replace("%level_numeral%", NumberUtils.toNumeral(slotLevel))
)
.addLoreLines(
pet.injectPlaceholdersInto(
plugin.configYml.getFormattedStrings("level-gui.progression-slots.$section.lore"),
player,
forceLevel = slotLevel
)
)
.build()
if (slotLevel > pet.maxLevel) {
maskItems.items[0].item
} else {
val item = when {
slotLevel <= player.getPetLevel(pet) -> {
getItem("unlocked")
}
slotLevel == player.getPetLevel(pet) + 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,39 +88,32 @@ class PetLevelGUI(
.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, _, _, _ -> PetsGUI.open(player) }
val player = event.whoClicked as Player
val page = getPage(menu, player)
val newPage = max(0, page - 1)
if (newPage == 0) {
PetsGUI.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(
plugin.configYml.getInt("level-gui.progression-slots.close.location.row"), plugin.configYml.getInt("level-gui.progression-slots.close.location.row"),
plugin.configYml.getInt("level-gui.progression-slots.close.location.column"), plugin.configYml.getInt("level-gui.progression-slots.close.location.column"),
@@ -190,5 +138,7 @@ class PetLevelGUI(
} }
} }
fun open(player: Player) = menu.open(player) fun open(player: Player) {
menu.open(player)
}
} }

View File

@@ -1,4 +1,4 @@
#libreforge-updater #libreforge-updater
#Fri Oct 28 11:36:22 BST 2022 #Thu Nov 24 14:31:26 GMT 2022
version=1.55.0 version=1.62.0
plugin-name=EcoPets plugin-name=EcoPets