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 {
relocate('com.willfp.libreforge', 'com.willfp.ecopets.libreforge')
relocate('com.willfp.ecomponent', 'com.willfp.ecopets.ecomponent')
relocate('org.joml', 'com.willfp.ecopets.libreforge.joml')
}
dependencies {
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'
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 setActivePet(player: OfflinePlayer, pet: Pet?) {
player.activePet = pet
}
override fun getPetLevel(player: OfflinePlayer, pet: Pet) = player.getPetLevel(pet)
override fun givePetExperience(player: Player, pet: Pet, amount: Double) =

View File

@@ -10,7 +10,7 @@ interface EcoPetsAPI {
* Get if a player has a pet.
*
* @param player The player.
* @param pet The pet.
* @param pet The pet.
* @return If the player has the pet unlocked
*/
fun hasPet(
@@ -28,11 +28,22 @@ interface EcoPetsAPI {
player: OfflinePlayer
): 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.
*
* @param player The player.
* @param pet The pet.
* @param pet The pet.
* @return The level.
*/
fun getPetLevel(
@@ -44,7 +55,7 @@ interface EcoPetsAPI {
* Give pet experience to a player.
*
* @param player The player.
* @param pet The pet.
* @param pet The pet.
* @param amount The amount of experience to give.
*/
fun givePetExperience(
@@ -56,9 +67,9 @@ interface EcoPetsAPI {
/**
* Give pet experience to a player.
*
* @param player The player.
* @param pet The pet.
* @param amount The amount of experience to give.
* @param player The player.
* @param pet The pet.
* @param amount The amount of experience to give.
* @param applyMultipliers If multipliers should be applied.
*/
fun givePetExperience(
@@ -69,10 +80,11 @@ 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 pet The pet.
* @param pet The pet.
* @return The progress.
*/
fun getPetProgress(
@@ -84,7 +96,7 @@ interface EcoPetsAPI {
* Get the experience required to advance to the next level.
*
* @param player The player.
* @param pet The pet.
* @param pet The pet.
* @return The experience required.
*/
fun getPetXPRequired(
@@ -96,7 +108,7 @@ interface EcoPetsAPI {
* Get experience to the next level.
*
* @param player The player.
* @param pet The pet.
* @param pet The pet.
* @return The experience.
*/
fun getPetXP(

View File

@@ -3,6 +3,9 @@ package com.willfp.ecopets.pets
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.gui.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.ConfigSlot
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.builder.ItemStackBuilder
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.inventory.ItemStack
import kotlin.math.ceil
import kotlin.math.max
import kotlin.math.min
import kotlin.properties.Delegates
class PetLevelGUI(
plugin: EcoPlugin,
private val pet: Pet
) {
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 {
val maskPattern = plugin.configYml.getStrings("level-gui.mask.pattern").toTypedArray()
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 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
for (row in progressionPattern) {
x++
var y = 0
for (char in row) {
y++
if (char == '0') {
continue
return ItemStackBuilder(Items.lookup(plugin.configYml.getString("level-gui.progression-slots.$key.item")))
.setDisplayName(
plugin.configYml.getFormattedString("level-gui.progression-slots.$key.name")
.replace("%pet%", pet.name)
.replace("%level%", level.toString())
.replace("%level_numeral%", NumberUtils.toNumeral(level))
)
.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()
}
override fun getLevelState(player: Player, level: Int): LevelState {
return when {
level <= player.getPetLevel(pet) -> LevelState.UNLOCKED
level == player.getPetLevel(pet) + 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(pet.maxLevel.toDouble() / levelsPerPage).toInt()
menu = menu(plugin.configYml.getInt("level-gui.rows")) {
setTitle(pet.name)
title = pet.name
maxPages(component.pages)
setMask(
FillerMask(
maskItems,
@@ -74,58 +76,11 @@ class PetLevelGUI(
)
)
for ((level, value) in progressionSlots) {
setSlot(
value.first,
value.second,
slot(ItemStack(Material.BLACK_STAINED_GLASS_PANE)) {
setUpdater { player, menu, _ ->
val page = getPage(menu, player)
addComponent(1, 1, component)
val slotLevel = ((page - 1) * levelsPerPage) + level
fun getItem(section: String) =
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(
// Instead of the page changer, this will show up when on the first page
addComponent(
MenuLayer.LOWER,
plugin.configYml.getInt("level-gui.progression-slots.prev-page.location.row"),
plugin.configYml.getInt("level-gui.progression-slots.prev-page.location.column"),
slot(
@@ -133,39 +88,32 @@ class PetLevelGUI(
.setDisplayName(plugin.configYml.getString("level-gui.progression-slots.prev-page.name"))
.build()
) {
onLeftClick { event, _, menu ->
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)
}
}
onLeftClick { player, _, _, _ -> PetsGUI.open(player) }
}
)
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.column"),
slot(
PageChanger(
ItemStackBuilder(Items.lookup(plugin.configYml.getString("level-gui.progression-slots.next-page.material")))
.setDisplayName(plugin.configYml.getString("level-gui.progression-slots.next-page.name"))
.build()
) {
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)
}
}
.build(),
PageChanger.Direction.FORWARDS
)
)
setSlot(
plugin.configYml.getInt("level-gui.progression-slots.close.location.row"),
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
#Fri Oct 28 11:36:22 BST 2022
version=1.55.0
#Thu Nov 24 14:31:26 GMT 2022
version=1.62.0
plugin-name=EcoPets