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

Compare commits

...

11 Commits
1.3.1 ... 1.6.1

Author SHA1 Message Date
Auxilor
ff84afdc7d libreforge-updater 2022-09-20 10:39:39 +01:00
Auxilor
0239447b61 libreforge-updater 2022-09-17 15:45:43 +01:00
Auxilor
8b0b2f861f libreforge-updater 2022-09-15 12:16:24 +01:00
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
16 changed files with 210 additions and 10 deletions

View File

@@ -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.99.1' implementation 'com.willfp:libreforge:3.102.1'
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

@@ -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
) )
} }

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.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)

View File

@@ -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)

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 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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -1,4 +1,4 @@
#libreforge-updater #libreforge-updater
#Wed Sep 14 12:59:56 BST 2022 #Tue Sep 20 10:39:39 BST 2022
version=1.3.1 version=1.6.1
plugin-name=EcoJobs plugin-name=EcoJobs

0
gradlew vendored Normal file → Executable file
View File