mirror of
https://github.com/Auxilor/EcoJobs.git
synced 2025-12-20 07:29:20 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0239447b61 | ||
|
|
8b0b2f861f | ||
|
|
d2fd661ba3 | ||
|
|
238962bb4f | ||
|
|
6b7df691de | ||
|
|
28b7279a88 | ||
|
|
36f6765942 | ||
|
|
b96d6c3388 | ||
|
|
7c06eb5c18 | ||
|
|
e33d3264d8 | ||
|
|
3780370caf | ||
|
|
e82eacf5b6 | ||
|
|
5a519aa263 | ||
|
|
4b9283c6de |
@@ -47,7 +47,7 @@ allprojects {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly 'com.willfp:eco:6.37.1'
|
compileOnly 'com.willfp:eco:6.37.1'
|
||||||
implementation 'com.willfp:libreforge:3.97.0'
|
implementation 'com.willfp:libreforge:3.102.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'
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import com.willfp.ecojobs.commands.CommandEcojobs
|
|||||||
import com.willfp.ecojobs.commands.CommandJobs
|
import com.willfp.ecojobs.commands.CommandJobs
|
||||||
import com.willfp.ecojobs.jobs.JobLevelListener
|
import com.willfp.ecojobs.jobs.JobLevelListener
|
||||||
import com.willfp.ecojobs.jobs.JobTriggerXPGainListener
|
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.activeJob
|
||||||
import com.willfp.ecojobs.jobs.activeJobLevel
|
import com.willfp.ecojobs.jobs.activeJobLevel
|
||||||
import com.willfp.libreforge.LibReforgePlugin
|
import com.willfp.libreforge.LibReforgePlugin
|
||||||
@@ -42,7 +44,9 @@ class EcoJobsPlugin : LibReforgePlugin() {
|
|||||||
override fun loadListeners(): List<Listener> {
|
override fun loadListeners(): List<Listener> {
|
||||||
return listOf(
|
return listOf(
|
||||||
JobLevelListener(this),
|
JobLevelListener(this),
|
||||||
JobTriggerXPGainListener
|
JobTriggerXPGainListener,
|
||||||
|
ResetOnQuitListener,
|
||||||
|
PriceHandler
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ import com.willfp.eco.util.savedDisplayName
|
|||||||
import com.willfp.ecojobs.jobs.Jobs
|
import com.willfp.ecojobs.jobs.Jobs
|
||||||
import com.willfp.ecojobs.jobs.activeJob
|
import com.willfp.ecojobs.jobs.activeJob
|
||||||
import com.willfp.ecojobs.jobs.hasJob
|
import com.willfp.ecojobs.jobs.hasJob
|
||||||
|
import com.willfp.ecojobs.jobs.resetJob
|
||||||
import com.willfp.ecojobs.jobs.setJobLevel
|
import com.willfp.ecojobs.jobs.setJobLevel
|
||||||
import com.willfp.ecojobs.jobs.setJobXP
|
import com.willfp.ecojobs.jobs.setJobXP
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
@@ -48,8 +49,7 @@ class CommandReset(plugin: EcoPlugin) : Subcommand(plugin, "reset", "ecojobs.com
|
|||||||
if (player.activeJob == job) {
|
if (player.activeJob == job) {
|
||||||
player.activeJob = null
|
player.activeJob = null
|
||||||
}
|
}
|
||||||
player.setJobXP(job, 0.0)
|
player.resetJob(job)
|
||||||
player.setJobLevel(job, 1)
|
|
||||||
|
|
||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
plugin.langYml.getMessage("reset-xp", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
|
plugin.langYml.getMessage("reset-xp", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ import com.willfp.eco.util.formatEco
|
|||||||
import com.willfp.eco.util.toNiceString
|
import com.willfp.eco.util.toNiceString
|
||||||
import com.willfp.ecojobs.EcoJobsPlugin
|
import com.willfp.ecojobs.EcoJobsPlugin
|
||||||
import com.willfp.ecojobs.api.event.PlayerJobExpGainEvent
|
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.ecojobs.api.event.PlayerJobLevelUpEvent
|
||||||
import com.willfp.libreforge.conditions.Conditions
|
import com.willfp.libreforge.conditions.Conditions
|
||||||
import com.willfp.libreforge.conditions.ConfiguredCondition
|
import com.willfp.libreforge.conditions.ConfiguredCondition
|
||||||
@@ -38,6 +40,9 @@ class Job(
|
|||||||
val name = config.getFormattedString("name")
|
val name = config.getFormattedString("name")
|
||||||
val description = config.getFormattedString("description")
|
val description = config.getFormattedString("description")
|
||||||
val isUnlockedByDefault = config.getBool("unlocked-by-default")
|
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(
|
val levelKey: PersistentDataKey<Int> = PersistentDataKey(
|
||||||
EcoJobsPlugin.instance.namespacedKeyFactory.create("${id}_level"),
|
EcoJobsPlugin.instance.namespacedKeyFactory.create("${id}_level"),
|
||||||
@@ -251,6 +256,8 @@ class Job(
|
|||||||
.replace("%description%", this.description)
|
.replace("%description%", this.description)
|
||||||
.replace("%job%", this.name)
|
.replace("%job%", this.name)
|
||||||
.replace("%level%", (forceLevel ?: player.getJobLevel(this)).toString())
|
.replace("%level%", (forceLevel ?: player.getJobLevel(this)).toString())
|
||||||
|
.replace("%join_price%", NumberUtils.format(this.joinPrice))
|
||||||
|
.replace("%leave_price%", NumberUtils.format(this.leavePrice))
|
||||||
}
|
}
|
||||||
.toMutableList()
|
.toMutableList()
|
||||||
|
|
||||||
@@ -365,7 +372,33 @@ private val activeJobKey: PersistentDataKey<String> = PersistentDataKey(
|
|||||||
|
|
||||||
var OfflinePlayer.activeJob: Job?
|
var OfflinePlayer.activeJob: Job?
|
||||||
get() = Jobs.getByID(this.profile.read(activeJobKey))
|
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?
|
val OfflinePlayer.activeJobLevel: JobLevel?
|
||||||
get() {
|
get() {
|
||||||
@@ -379,6 +412,11 @@ fun OfflinePlayer.getJobLevel(job: Job): Int =
|
|||||||
fun OfflinePlayer.setJobLevel(job: Job, level: Int) =
|
fun OfflinePlayer.setJobLevel(job: Job, level: Int) =
|
||||||
this.profile.write(job.levelKey, level)
|
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 {
|
fun OfflinePlayer.getJobProgress(job: Job): Double {
|
||||||
val currentXP = this.getJobXP(job)
|
val currentXP = this.getJobXP(job)
|
||||||
val requiredXP = job.getExpForLevel(this.getJobLevel(job) + 1)
|
val requiredXP = job.getExpForLevel(this.getJobLevel(job) + 1)
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -48,12 +48,14 @@ gui:
|
|||||||
- ""
|
- ""
|
||||||
item: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmFkYzA0OGE3Y2U3OGY3ZGFkNzJhMDdkYTI3ZDg1YzA5MTY4ODFlNTUyMmVlZWQxZTNkYWYyMTdhMzhjMWEifX19
|
item: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmFkYzA0OGE3Y2U3OGY3ZGFkNzJhMDdkYTI3ZDg1YzA5MTY4ODFlNTUyMmVlZWQxZTNkYWYyMTdhMzhjMWEifX19
|
||||||
|
|
||||||
|
# %join_price% and %leave_price% are also available as placeholders
|
||||||
|
|
||||||
active:
|
active:
|
||||||
name: "%job% &fLvl. &a%level%"
|
name: "%job% &fLvl. &a%level%"
|
||||||
lore:
|
lore:
|
||||||
- "%description%"
|
- "%description%"
|
||||||
- "&f"
|
- "&f"
|
||||||
- "&fEffects:"
|
- "&fJob Rewards:"
|
||||||
- "%effects%"
|
- "%effects%"
|
||||||
- ""
|
- ""
|
||||||
- "&fProgress:"
|
- "&fProgress:"
|
||||||
@@ -67,7 +69,7 @@ gui:
|
|||||||
lore:
|
lore:
|
||||||
- "%description%"
|
- "%description%"
|
||||||
- "&f"
|
- "&f"
|
||||||
- "&fEffects:"
|
- "&fJob Rewards:"
|
||||||
- "%effects%"
|
- "%effects%"
|
||||||
- ""
|
- ""
|
||||||
- "&fProgress:"
|
- "&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
|
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
|
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:
|
potions:
|
||||||
icon:
|
icon:
|
||||||
@@ -264,3 +265,5 @@ potions:
|
|||||||
particles:
|
particles:
|
||||||
permanent: false
|
permanent: false
|
||||||
triggered: true
|
triggered: true
|
||||||
|
|
||||||
|
share-configs: true # If your configs are allowed to be used to gather data and improve the plugin. Nothing identifying (IP, Name, etc) is shared.
|
||||||
@@ -13,6 +13,13 @@ description: "&8&oLevel up by mining blocks"
|
|||||||
# If the job should be unlocked by default
|
# If the job should be unlocked by default
|
||||||
unlocked-by-default: true
|
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
|
# The xp requirements for each job level - add new levels by adding more to this list
|
||||||
level-xp-requirements:
|
level-xp-requirements:
|
||||||
- 100
|
- 100
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ description: "&8&oLevel up by placing blocks"
|
|||||||
|
|
||||||
unlocked-by-default: true
|
unlocked-by-default: true
|
||||||
|
|
||||||
|
reset-on-quit: false
|
||||||
|
|
||||||
|
join-price: 0
|
||||||
|
leave-price: 0
|
||||||
|
|
||||||
level-xp-requirements:
|
level-xp-requirements:
|
||||||
- 100
|
- 100
|
||||||
- 120
|
- 120
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ description: "&8&oLevel up by farming crops"
|
|||||||
|
|
||||||
unlocked-by-default: true
|
unlocked-by-default: true
|
||||||
|
|
||||||
|
reset-on-quit: false
|
||||||
|
|
||||||
|
join-price: 0
|
||||||
|
leave-price: 0
|
||||||
|
|
||||||
level-xp-requirements:
|
level-xp-requirements:
|
||||||
- 100
|
- 100
|
||||||
- 120
|
- 120
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ description: "&8&oLevel up by mining blocks"
|
|||||||
|
|
||||||
unlocked-by-default: true
|
unlocked-by-default: true
|
||||||
|
|
||||||
|
reset-on-quit: false
|
||||||
|
|
||||||
|
join-price: 0
|
||||||
|
leave-price: 0
|
||||||
|
|
||||||
level-xp-requirements:
|
level-xp-requirements:
|
||||||
- 100
|
- 100
|
||||||
- 120
|
- 120
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ description: "&8&oLevel up by killing mobs"
|
|||||||
|
|
||||||
unlocked-by-default: true
|
unlocked-by-default: true
|
||||||
|
|
||||||
|
reset-on-quit: false
|
||||||
|
|
||||||
|
join-price: 0
|
||||||
|
leave-price: 0
|
||||||
|
|
||||||
level-xp-requirements:
|
level-xp-requirements:
|
||||||
- 100
|
- 100
|
||||||
- 120
|
- 120
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#libreforge-updater
|
#libreforge-updater
|
||||||
#Sun Sep 11 19:27:54 BST 2022
|
#Sat Sep 17 15:45:43 BST 2022
|
||||||
version=1.1.0
|
version=1.6.0
|
||||||
plugin-name=EcoJobs
|
plugin-name=EcoJobs
|
||||||
|
|||||||
Reference in New Issue
Block a user