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

Compare commits

...

11 Commits
1.2.0 ... 1.5.0

Author SHA1 Message Date
Auxilor
d2fd661ba3 libreforge-updater 2022-09-15 12:10:05 +01:00
Auxilor
238962bb4f libreforge-updater 2022-09-14 18:53:41 +01:00
Auxilor
6b7df691de libreforge-updater 2022-09-14 15:12:49 +01:00
Auxilor
28b7279a88 libreforge-updater 2022-09-14 15:09:55 +01:00
Auxilor
36f6765942 Fixed bug 2022-09-14 13:32:05 +01:00
Auxilor
b96d6c3388 Added leave price 2022-09-14 13:26:59 +01:00
Auxilor
7c06eb5c18 Added Join Price and Reset on Quit 2022-09-14 13:23:22 +01:00
Auxilor
e33d3264d8 Added PlayerJobJoinEvent and PlayerJobLeaveEvent 2022-09-14 13:12:47 +01:00
Auxilor
3780370caf libreforge-updater 2022-09-14 12:59:57 +01:00
Auxilor
e82eacf5b6 libreforge-updater 2022-09-13 19:15:37 +01:00
Auxilor
5a519aa263 libreforge-updater 2022-09-12 21:21:37 +01:00
15 changed files with 210 additions and 10 deletions

View File

@@ -47,7 +47,7 @@ allprojects {
dependencies {
compileOnly 'com.willfp:eco:6.37.1'
implementation 'com.willfp:libreforge:3.98.0'
implementation 'com.willfp:libreforge:3.101.0'
implementation 'org.joml:joml:1.10.4'
compileOnly 'org.jetbrains:annotations:23.0.0'

View File

@@ -7,6 +7,8 @@ import com.willfp.ecojobs.commands.CommandEcojobs
import com.willfp.ecojobs.commands.CommandJobs
import com.willfp.ecojobs.jobs.JobLevelListener
import com.willfp.ecojobs.jobs.JobTriggerXPGainListener
import com.willfp.ecojobs.jobs.PriceHandler
import com.willfp.ecojobs.jobs.ResetOnQuitListener
import com.willfp.ecojobs.jobs.activeJob
import com.willfp.ecojobs.jobs.activeJobLevel
import com.willfp.libreforge.LibReforgePlugin
@@ -42,7 +44,9 @@ class EcoJobsPlugin : LibReforgePlugin() {
override fun loadListeners(): List<Listener> {
return listOf(
JobLevelListener(this),
JobTriggerXPGainListener
JobTriggerXPGainListener,
ResetOnQuitListener,
PriceHandler
)
}

View File

@@ -0,0 +1,32 @@
package com.willfp.ecojobs.api.event
import com.willfp.ecojobs.jobs.Job
import org.bukkit.OfflinePlayer
import org.bukkit.entity.Player
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import org.bukkit.event.HandlerList
import org.bukkit.event.player.PlayerEvent
class PlayerJobJoinEvent(
val player: OfflinePlayer,
val job: Job,
val oldJob: Job?
) : Event(), Cancellable {
private var cancelled = false
override fun isCancelled() = this.cancelled
override fun setCancelled(cancelled: Boolean) {
this.cancelled = cancelled
}
override fun getHandlers(): HandlerList {
return handlerList
}
companion object {
@JvmStatic
val handlerList = HandlerList()
}
}

View File

@@ -0,0 +1,29 @@
package com.willfp.ecojobs.api.event
import com.willfp.ecojobs.jobs.Job
import org.bukkit.OfflinePlayer
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import org.bukkit.event.HandlerList
class PlayerJobLeaveEvent(
val player: OfflinePlayer,
val job: Job
) : Event(), Cancellable {
private var cancelled = false
override fun isCancelled() = this.cancelled
override fun setCancelled(cancelled: Boolean) {
this.cancelled = cancelled
}
override fun getHandlers(): HandlerList {
return handlerList
}
companion object {
@JvmStatic
val handlerList = HandlerList()
}
}

View File

@@ -7,6 +7,7 @@ import com.willfp.eco.util.savedDisplayName
import com.willfp.ecojobs.jobs.Jobs
import com.willfp.ecojobs.jobs.activeJob
import com.willfp.ecojobs.jobs.hasJob
import com.willfp.ecojobs.jobs.resetJob
import com.willfp.ecojobs.jobs.setJobLevel
import com.willfp.ecojobs.jobs.setJobXP
import org.bukkit.Bukkit
@@ -48,8 +49,7 @@ class CommandReset(plugin: EcoPlugin) : Subcommand(plugin, "reset", "ecojobs.com
if (player.activeJob == job) {
player.activeJob = null
}
player.setJobXP(job, 0.0)
player.setJobLevel(job, 1)
player.resetJob(job)
sender.sendMessage(
plugin.langYml.getMessage("reset-xp", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)

View File

@@ -15,6 +15,8 @@ import com.willfp.eco.util.formatEco
import com.willfp.eco.util.toNiceString
import com.willfp.ecojobs.EcoJobsPlugin
import com.willfp.ecojobs.api.event.PlayerJobExpGainEvent
import com.willfp.ecojobs.api.event.PlayerJobJoinEvent
import com.willfp.ecojobs.api.event.PlayerJobLeaveEvent
import com.willfp.ecojobs.api.event.PlayerJobLevelUpEvent
import com.willfp.libreforge.conditions.Conditions
import com.willfp.libreforge.conditions.ConfiguredCondition
@@ -38,6 +40,9 @@ class Job(
val name = config.getFormattedString("name")
val description = config.getFormattedString("description")
val isUnlockedByDefault = config.getBool("unlocked-by-default")
val resetsOnQuit = config.getBool("reset-on-quit")
val joinPrice = config.getDouble("join-price")
val leavePrice = config.getDouble("leave-price")
val levelKey: PersistentDataKey<Int> = PersistentDataKey(
EcoJobsPlugin.instance.namespacedKeyFactory.create("${id}_level"),
@@ -251,6 +256,8 @@ class Job(
.replace("%description%", this.description)
.replace("%job%", this.name)
.replace("%level%", (forceLevel ?: player.getJobLevel(this)).toString())
.replace("%join_price%", NumberUtils.format(this.joinPrice))
.replace("%leave_price%", NumberUtils.format(this.leavePrice))
}
.toMutableList()
@@ -365,7 +372,33 @@ private val activeJobKey: PersistentDataKey<String> = PersistentDataKey(
var OfflinePlayer.activeJob: Job?
get() = Jobs.getByID(this.profile.read(activeJobKey))
set(value) = this.profile.write(activeJobKey, value?.id ?: "")
set(job) {
val oldJob = this.activeJob
if (oldJob != job) {
// Have to check for oldJob too to have null safety
if (job == null && oldJob != null) {
val event = PlayerJobLeaveEvent(this, oldJob)
Bukkit.getPluginManager().callEvent(event)
if (event.isCancelled) {
return
}
}
// Not using else because null safety as well
if (job != null) {
val event = PlayerJobJoinEvent(this, job, oldJob)
Bukkit.getPluginManager().callEvent(event)
if (event.isCancelled) {
return
}
}
}
this.profile.write(activeJobKey, job?.id ?: "")
}
val OfflinePlayer.activeJobLevel: JobLevel?
get() {
@@ -379,6 +412,11 @@ fun OfflinePlayer.getJobLevel(job: Job): Int =
fun OfflinePlayer.setJobLevel(job: Job, level: Int) =
this.profile.write(job.levelKey, level)
fun OfflinePlayer.resetJob(job: Job) {
this.setJobLevel(job, 1)
this.setJobXP(job, 0.0)
}
fun OfflinePlayer.getJobProgress(job: Job): Double {
val currentXP = this.getJobXP(job)
val requiredXP = job.getExpForLevel(this.getJobLevel(job) + 1)

View File

@@ -0,0 +1,50 @@
package com.willfp.ecojobs.jobs
import com.willfp.eco.core.integrations.economy.balance
import com.willfp.ecojobs.api.event.PlayerJobJoinEvent
import com.willfp.ecojobs.api.event.PlayerJobLeaveEvent
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.Listener
object PriceHandler : Listener {
@EventHandler(
priority = EventPriority.LOW,
ignoreCancelled = true
)
fun onJoin(event: PlayerJobJoinEvent) {
val player = event.player
val job = event.job
val price = job.joinPrice
if (price > 0) {
val hasMoney = player.balance >= price
if (!hasMoney) {
event.isCancelled = true
}
player.balance -= price
}
}
@EventHandler(
priority = EventPriority.LOW,
ignoreCancelled = true
)
fun onLeave(event: PlayerJobLeaveEvent) {
val player = event.player
val job = event.job
val price = job.leavePrice
if (price > 0) {
val hasMoney = player.balance >= price
if (!hasMoney) {
event.isCancelled = true
}
player.balance -= price
}
}
}

View File

@@ -0,0 +1,19 @@
package com.willfp.ecojobs.jobs
import com.willfp.ecojobs.api.event.PlayerJobLeaveEvent
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
object ResetOnQuitListener : Listener {
@EventHandler(
ignoreCancelled = true
)
fun onQuit(event: PlayerJobLeaveEvent) {
val player = event.player
val job = event.job
if (job.resetsOnQuit) {
player.resetJob(job)
}
}
}

View File

@@ -48,12 +48,14 @@ gui:
- ""
item: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmFkYzA0OGE3Y2U3OGY3ZGFkNzJhMDdkYTI3ZDg1YzA5MTY4ODFlNTUyMmVlZWQxZTNkYWYyMTdhMzhjMWEifX19
# %join_price% and %leave_price% are also available as placeholders
active:
name: "%job% &fLvl. &a%level%"
lore:
- "%description%"
- "&f"
- "&fEffects:"
- "&fJob Rewards:"
- "%effects%"
- ""
- "&fProgress:"
@@ -67,7 +69,7 @@ gui:
lore:
- "%description%"
- "&f"
- "&fEffects:"
- "&fJob Rewards:"
- "%effects%"
- ""
- "&fProgress:"
@@ -252,7 +254,6 @@ point-names: # If you have point names that look ugly (eg g_souls) then you can
use-faster-move-trigger: true # Disable if you want move trigger to detect sub-1-block movements
raytrace-distance: 80 # The distance that alt_click should check for a location
block-item-drop-place-check: true # If the block_item_drop trigger should only fire on naturally placed blocks (prevents dupes)
potions:
icon:

View File

@@ -13,6 +13,13 @@ description: "&8&oLevel up by mining blocks"
# If the job should be unlocked by default
unlocked-by-default: true
# If job progress should be reset when quitting
reset-on-quit: false
# The price to join or leave this job (set to 0 to disable)
join-price: 0
leave-price: 0
# The xp requirements for each job level - add new levels by adding more to this list
level-xp-requirements:
- 100

View File

@@ -3,6 +3,11 @@ description: "&8&oLevel up by placing blocks"
unlocked-by-default: true
reset-on-quit: false
join-price: 0
leave-price: 0
level-xp-requirements:
- 100
- 120

View File

@@ -3,6 +3,11 @@ description: "&8&oLevel up by farming crops"
unlocked-by-default: true
reset-on-quit: false
join-price: 0
leave-price: 0
level-xp-requirements:
- 100
- 120

View File

@@ -3,6 +3,11 @@ description: "&8&oLevel up by mining blocks"
unlocked-by-default: true
reset-on-quit: false
join-price: 0
leave-price: 0
level-xp-requirements:
- 100
- 120

View File

@@ -3,6 +3,11 @@ description: "&8&oLevel up by killing mobs"
unlocked-by-default: true
reset-on-quit: false
join-price: 0
leave-price: 0
level-xp-requirements:
- 100
- 120

View File

@@ -1,4 +1,4 @@
#libreforge-updater
#Mon Sep 12 17:15:34 BST 2022
version=1.2.0
#Thu Sep 15 12:10:05 BST 2022
version=1.5.0
plugin-name=EcoJobs