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

Compare commits

..

54 Commits

Author SHA1 Message Date
Auxilor
a8f11ffb44 libreforge-updater 2022-10-21 19:25:32 +01:00
Auxilor
3829e326ba libreforge-updater 2022-10-19 20:43:19 +01:00
Auxilor
26d44fb2d9 libreforge-updater 2022-10-18 14:12:39 +01:00
Auxilor
5cba64d19f libreforge-updater 2022-10-16 23:26:32 +01:00
Auxilor
52f3230307 libreforge-updater 2022-10-13 20:11:59 +01:00
Auxilor
e0b2ae4f40 libreforge-updater 2022-10-10 21:03:58 +01:00
Auxilor
b9f7d6db42 libreforge-updater 2022-10-09 15:02:04 +01:00
Will FP
f62476c1d4 Merge pull request #7 from badomensurvival/master
Job level placeholder
2022-10-09 14:50:32 +01:00
Will FP
ca25f78c60 Merge pull request #6 from 0ft3n/master
Fixed default builder.yml
2022-10-09 14:50:17 +01:00
devbaraus
765d7ee7e2 Job level placeholder 2022-10-09 10:26:34 -03:00
0ft3n
850e1ec888 Fixed default builder.yml 2022-10-09 01:26:47 +03:00
Auxilor
fe29bb611f libreforge-updater 2022-10-07 19:50:42 +01:00
Auxilor
87c8c6755a Updated to 1.14.1 2022-10-06 14:09:00 +01:00
Auxilor
964d668713 Added more default jobs 2022-10-06 14:08:52 +01:00
Auxilor
d8113c3819 libreforge-updater 2022-10-06 12:02:41 +01:00
Auxilor
2e655ffbb8 libreforge-updater 2022-10-04 15:52:50 +01:00
Auxilor
88a44777e1 libreforge-updater 2022-10-03 18:28:56 +01:00
Auxilor
bd7305fae1 libreforge-updater 2022-10-02 14:57:36 +01:00
Auxilor
25b78106ee libreforge-updater 2022-09-28 17:52:31 +01:00
Auxilor
1b75ba0098 Updated to 1.10.0 2022-09-28 12:41:01 +01:00
Auxilor
b4b235f1b5 Added custom GUI slots 2022-09-28 12:40:05 +01:00
Auxilor
c7ec273747 Updated to 1.9.0 2022-09-28 09:09:05 +01:00
Auxilor
9991f9b683 Added /jobs join and /jobs leave 2022-09-28 09:08:51 +01:00
Auxilor
921f086f49 libreforge-updater 2022-09-26 18:27:06 +01:00
Auxilor
b0c882dc21 libreforge-updater 2022-09-26 14:41:23 +01:00
Auxilor
59a528689d libreforge-updater 2022-09-26 10:51:36 +01:00
Auxilor
16be3a8b69 libreforge-updater 2022-09-22 17:30:04 +01:00
Auxilor
8e1200f293 Fixed version 2022-09-21 15:41:13 +01:00
Auxilor
301b4d35f3 libreforge-updater 2022-09-21 15:28:18 +01:00
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
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
Auxilor
4b9283c6de libreforge-updater 2022-09-12 17:15:34 +01:00
Auxilor
6316dddc0b libreforge-updater 2022-09-11 19:27:54 +01:00
Auxilor
4bab3ed8c2 Fixed /ecojobs givexp 2022-09-11 11:52:06 +01:00
Auxilor
3f6db2ba14 Merge remote-tracking branch 'origin/master' 2022-09-10 22:03:05 +01:00
Auxilor
ba3e0bb852 Updated to 1.0.1 2022-09-10 22:02:59 +01:00
Auxilor
7a45332837 Added update checker 2022-09-10 22:02:51 +01:00
Will FP
ddf1ef35e2 Update README.md 2022-09-10 17:07:25 +01:00
Will FP
273b8fe80a Update README.md 2022-09-10 16:33:51 +01:00
Auxilor
802681e3a5 Fixed slayer 2022-09-10 14:02:10 +01:00
Auxilor
f24e9d9ed9 Added farmer 2022-09-10 14:00:11 +01:00
Auxilor
682dc31b0c Added slayer 2022-09-10 13:55:45 +01:00
31 changed files with 1014 additions and 29 deletions

View File

@@ -1,27 +1,27 @@
<h1 align="center"> <h1 align="center">
<br> <br>
<img src="https://i.imgur.com/FHqL960.png" alt="EcoJobs logo" width="256"> <img src="https://i.imgur.com/Qd617BL.png" alt="EcoJobs logo" width="256">
<br> <br>
</h1> </h1>
<h4 align="center">Source code for EcoJobs, a premium spigot plugin.</h4> <h4 align="center">Source code for EcoJobs, a premium spigot plugin.</h4>
<p align="center"> <p align="center">
<a href="https://polymart.org/resource/ecojobs.1351"> <a href="https://polymart.org/resource/ecojobs.2857">
<img alt="spigot" src="https://img.shields.io/badge/polymart-EcoJobs-964B00?style=for-the-badge"/> <img alt="spigot" src="https://img.shields.io/badge/polymart-EcoJobs-964B00?style=for-the-badge"/>
</a> </a>
<a href="https://bstats.org/plugin/bukkit/EcoJobs" alt="bstats servers"> <a href="https://bstats.org/plugin/bukkit/EcoJobs" alt="bstats servers">
<img src="https://img.shields.io/bstats/servers/15502?color=964B00&style=for-the-badge"/> <img src="https://img.shields.io/bstats/servers/16394?color=964B00&style=for-the-badge"/>
</a> </a>
<a href="https://bstats.org/plugin/bukkit/EcoJobs" alt="bstats players"> <a href="https://bstats.org/plugin/bukkit/EcoJobs" alt="bstats players">
<img src="https://img.shields.io/bstats/players/15502?color=964B00&style=for-the-badge"/> <img src="https://img.shields.io/bstats/players/16394?color=964B00&style=for-the-badge"/>
</a> </a>
<a href="https://discord.gg/ZcwpSsE/" alt="Discord"> <a href="https://discord.gg/ZcwpSsE/" alt="Discord">
<img src="https://img.shields.io/discord/452518336627081236?label=discord&style=for-the-badge&color=964B00"/> <img src="https://img.shields.io/discord/452518336627081236?label=discord&style=for-the-badge&color=964B00"/>
</a> </a>
</p> </p>
[![Docs](https://i.imgur.com/4JciYrQ.png)](https://discord.gg/ZcwpSsE/) [![Docs](https://i.imgur.com/7Ac2KTg.png)](https://discord.gg/ZcwpSsE/)
## License ## License
*Click here to read [the entire license](https://github.com/Auxilor/EcoJobs/blob/master/LICENSE.md).* *Click here to read [the entire license](https://github.com/Auxilor/EcoJobs/blob/master/LICENSE.md).*

View File

@@ -46,8 +46,8 @@ allprojects {
} }
dependencies { dependencies {
compileOnly 'com.willfp:eco:6.37.1' compileOnly 'com.willfp:eco:6.43.6'
implementation 'com.willfp:libreforge:3.96.0' implementation 'com.willfp:libreforge:3.114.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
@@ -26,6 +28,11 @@ class EcoJobsPlugin : LibReforgePlugin() {
"job" "job"
) { it.activeJob?.name ?: "" }.register() ) { it.activeJob?.name ?: "" }.register()
PlayerPlaceholder(
this,
"job_level"
) { it.activeJobLevel?.level.toString() ?: "" }.register()
PlayerPlaceholder( PlayerPlaceholder(
this, this,
"job_id" "job_id"
@@ -42,7 +49,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

@@ -2,14 +2,28 @@ package com.willfp.ecojobs.commands
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.PluginCommand import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.ecojobs.jobs.Jobs
import com.willfp.libreforge.LibReforgePlugin
import com.willfp.libreforge.lrcdb.CommandExport
import com.willfp.libreforge.lrcdb.CommandImport
import com.willfp.libreforge.lrcdb.ExportableConfig
import org.bukkit.command.CommandSender import org.bukkit.command.CommandSender
class CommandEcojobs(plugin: EcoPlugin) : PluginCommand(plugin, "ecojobs", "ecojobs.command.ecojobs", false) { class CommandEcojobs(plugin: LibReforgePlugin) : PluginCommand(plugin, "ecojobs", "ecojobs.command.ecojobs", false) {
init { init {
this.addSubcommand(CommandReload(plugin)) this.addSubcommand(CommandReload(plugin))
.addSubcommand(CommandUnlock(plugin)) .addSubcommand(CommandUnlock(plugin))
.addSubcommand(CommandGiveXP(plugin)) .addSubcommand(CommandGiveXP(plugin))
.addSubcommand(CommandReset(plugin)) .addSubcommand(CommandReset(plugin))
.addSubcommand(CommandImport("jobs", plugin))
.addSubcommand(CommandExport(plugin) {
Jobs.values().map {
ExportableConfig(
it.id,
it.config
)
}
})
} }
override fun onExecute(sender: CommandSender, args: List<String>) { override fun onExecute(sender: CommandSender, args: List<String>) {

View File

@@ -6,6 +6,7 @@ import com.willfp.eco.util.StringUtils
import com.willfp.eco.util.savedDisplayName import com.willfp.eco.util.savedDisplayName
import com.willfp.eco.util.toNiceString import com.willfp.eco.util.toNiceString
import com.willfp.ecojobs.jobs.Jobs import com.willfp.ecojobs.jobs.Jobs
import com.willfp.ecojobs.jobs.giveExactJobExperience
import com.willfp.ecojobs.jobs.giveJobExperience import com.willfp.ecojobs.jobs.giveJobExperience
import com.willfp.ecojobs.jobs.hasJob import com.willfp.ecojobs.jobs.hasJob
import org.bukkit.Bukkit import org.bukkit.Bukkit
@@ -56,7 +57,7 @@ class CommandGiveXP(plugin: EcoPlugin) : Subcommand(plugin, "givexp", "ecojobs.c
return return
} }
player.giveJobExperience( player.giveExactJobExperience(
job, job,
amount amount
) )

View File

@@ -7,6 +7,11 @@ import org.bukkit.command.CommandSender
import org.bukkit.entity.Player import org.bukkit.entity.Player
class CommandJobs(plugin: EcoPlugin) : PluginCommand(plugin, "jobs", "ecojobs.command.jobs", true) { class CommandJobs(plugin: EcoPlugin) : PluginCommand(plugin, "jobs", "ecojobs.command.jobs", true) {
init {
this.addSubcommand(CommandJoin(plugin))
.addSubcommand(CommandLeave(plugin))
}
override fun onExecute(player: CommandSender, args: List<String>) { override fun onExecute(player: CommandSender, args: List<String>) {
player as Player player as Player
JobsGUI.open(player) JobsGUI.open(player)

View File

@@ -0,0 +1,65 @@
package com.willfp.ecojobs.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.eco.util.StringUtils
import com.willfp.ecojobs.jobs.Jobs
import com.willfp.ecojobs.jobs.activeJob
import com.willfp.ecojobs.jobs.hasJob
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import org.bukkit.util.StringUtil
class CommandJoin(plugin: EcoPlugin) : Subcommand(plugin, "join", "ecojobs.command.join", true) {
override fun onExecute(player: CommandSender, args: List<String>) {
player as Player
if (args.isEmpty()) {
player.sendMessage(plugin.langYml.getMessage("needs-job"))
return
}
val id = args[0]
val job = Jobs.getByID(id)
if (job == null || !player.hasJob(job)) {
player.sendMessage(plugin.langYml.getMessage("invalid-job"))
return
}
if (player.activeJob == job) {
player.sendMessage(plugin.langYml.getMessage("job-already-joined"))
return
}
player.sendMessage(
plugin.langYml.getMessage("joined-job", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
.replace("%job%", job.name)
)
player.activeJob = job
}
override fun tabComplete(sender: CommandSender, args: List<String>): List<String> {
if (sender !is Player) {
return emptyList()
}
val completions = mutableListOf<String>()
if (args.isEmpty()) {
// Currently, this case is not ever reached
return Jobs.values().filter { sender.hasJob(it) }.map { it.id }
}
if (args.size == 1) {
StringUtil.copyPartialMatches(
args[1],
Jobs.values().filter { sender.hasJob(it) }.map { it.id },
completions
)
return completions
}
return emptyList()
}
}

View File

@@ -0,0 +1,26 @@
package com.willfp.ecojobs.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.eco.util.StringUtils
import com.willfp.ecojobs.jobs.activeJob
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
class CommandLeave(plugin: EcoPlugin) : Subcommand(plugin, "leave", "ecojobs.command.leave", true) {
override fun onExecute(player: CommandSender, args: List<String>) {
player as Player
if (player.activeJob == null) {
player.sendMessage(plugin.langYml.getMessage("no-job"))
return
}
player.sendMessage(
plugin.langYml.getMessage("left-job", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
.replace("%job%", player.activeJob?.name ?: "")
)
player.activeJob = null
}
}

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

@@ -4,6 +4,7 @@ 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.slot import com.willfp.eco.core.gui.slot
import com.willfp.eco.core.gui.slot.ConfigSlot
import com.willfp.eco.core.gui.slot.FillerMask import com.willfp.eco.core.gui.slot.FillerMask
import com.willfp.eco.core.gui.slot.MaskItems import com.willfp.eco.core.gui.slot.MaskItems
import com.willfp.eco.core.items.Items import com.willfp.eco.core.items.Items
@@ -165,6 +166,7 @@ class JobLevelGUI(
} }
} }
) )
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"),
@@ -178,6 +180,14 @@ class JobLevelGUI(
} }
} }
) )
for (config in plugin.configYml.getSubsections("level-gui.custom-slots")) {
setSlot(
config.getInt("row"),
config.getInt("column"),
ConfigSlot(config)
)
}
} }
} }

View File

@@ -4,6 +4,7 @@ import com.willfp.eco.core.config.updating.ConfigUpdater
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.slot import com.willfp.eco.core.gui.slot
import com.willfp.eco.core.gui.slot.ConfigSlot
import com.willfp.eco.core.gui.slot.FillerMask import com.willfp.eco.core.gui.slot.FillerMask
import com.willfp.eco.core.gui.slot.MaskItems import com.willfp.eco.core.gui.slot.MaskItems
import com.willfp.eco.core.items.Items import com.willfp.eco.core.items.Items
@@ -197,6 +198,14 @@ object JobsGUI {
} }
} }
) )
for (config in plugin.configYml.getSubsections("gui.custom-slots")) {
setSlot(
config.getInt("row"),
config.getInt("column"),
ConfigSlot(config)
)
}
} }
} }

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:"
@@ -114,6 +116,9 @@ gui:
row: 4 row: 4
column: 2 column: 2
# Custom GUI slots; see here for a how-to: https://plugins.auxilor.io/all-plugins/custom-gui-slots
custom-slots: []
level-gui: level-gui:
rows: 6 rows: 6
@@ -208,6 +213,9 @@ level-gui:
row: 6 row: 6
column: 5 column: 5
# Custom GUI slots; see here for a how-to: https://plugins.auxilor.io/all-plugins/custom-gui-slots
custom-slots: []
level-up: level-up:
message: message:
enabled: true enabled: true
@@ -252,7 +260,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

@@ -1,3 +1,3 @@
resource-id: 0 resource-id: 2857
bstats-id: 16394 bstats-id: 16394
color: "&#964B00" color: "&#964B00"

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

@@ -0,0 +1,111 @@
name: "&#FD9113Beekeeper"
description: "&8&oLevelling up by breeding bees, but don't drink any honey!"
unlocked-by-default: true
reset-on-quit: false
join-price: 0
leave-price: 0
level-xp-requirements:
- 100
- 120
- 150
- 180
- 210
- 250
- 300
- 360
- 430
- 520
- 620
- 740
- 890
- 1000
- 1300
- 1500
- 1900
- 2200
- 2700
- 3200
- 3800
- 4600
- 5500
- 6600
- 7900
- 9500
- 11500
- 14000
- 17000
- 19000
- 24000
- 29000
- 34000
- 41000
- 50000
- 60000
- 70000
- 85000
- 100000
- 120000
- 150000
- 180000
- 210000
- 250000
- 300000
- 360000
- 440000
- 580000
- 750000
xp-gain-methods:
- trigger: breed
multiplier: 20.0
filters:
entities:
- bee
conditions: [ ]
level-placeholders:
- id: "money"
value: "%level% * 5"
effects-description:
1:
- "&8» &8Earn &a$%money%&8 for each bee you breed"
rewards-description:
1:
- "&8» &8Earn &a$%money%&8 for each bee you breed"
level-up-messages:
1:
- "&8» &8Earn &a$%money%&8 for each bee you breed"
level-commands: [ ]
effects:
- id: give_money
args:
amount: "%v% * %level% * 2.0"
triggers:
- breed
filters:
entites:
- bee
- id: take_money
args:
amount: "%v% * %level% * 5.0"
triggers:
- consume
filters:
imems:
- honey_bottle
conditions: [ ]
icon: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjY0MjgyZWQxOTc4NzQ4YjM5OTUwOTkxNDAwZjBiN2U0YTM5ZjJlN2Q5ZWNlNjA3NmFmNWQxMzUxYzExNzc3ZiJ9fX0=

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
@@ -84,17 +89,9 @@ effects:
args: args:
every: "ceil(12 - %level% / 8)" every: "ceil(12 - %level% / 8)"
amount: "1.2 * %level%" amount: "1.2 * %level%"
filters:
items:
- "*wooden_pickaxe"
- "*stone_pickaxe"
- "*iron_pickaxe"
- "*golden_pickaxe"
- "*diamond_pickaxe"
- "*netherite_pickaxe"
triggers: triggers:
- place_block - place_block
conditions: [ ] conditions: [ ]
icon: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmM4ZWJhZDcyYjc3ZGYzOTkwZTA3YmM4NjlhOTlhOGY4OTYyZDNjMTljNzZlMzlkOTk1NTNjYWU0MTMxY2M4In19fQ== icon: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTBiYmVmMGE0YmNmMDNlMDQ5ZDU1NmRhMGJlZDZiNDFkZDkyOGI4OTdhNDJhZTAxZWZlYTY4NGI1NjFjNDMyZiJ9fX0=

View File

@@ -0,0 +1,124 @@
name: "&eFarmer"
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
- 150
- 180
- 210
- 250
- 300
- 360
- 430
- 520
- 620
- 740
- 890
- 1000
- 1300
- 1500
- 1900
- 2200
- 2700
- 3200
- 3800
- 4600
- 5500
- 6600
- 7900
- 9500
- 11500
- 14000
- 17000
- 19000
- 24000
- 29000
- 34000
- 41000
- 50000
- 60000
- 70000
- 85000
- 100000
- 120000
- 150000
- 180000
- 210000
- 250000
- 300000
- 360000
- 440000
- 580000
- 750000
xp-gain-methods:
- trigger: mine_block
multiplier: 0.5
conditions: [ ]
filters:
blocks:
- "wheat"
- "potatoes"
- "beetroots"
- "carrots"
- "melon"
- "pumpkin"
- "cactus"
- "sugar_cane"
- "cocoa"
- "nether_wart"
- "bamboo"
- "sweet_berries"
- "glow_berries"
level-placeholders:
- id: "money"
value: "%level% * 0.25"
effects-description:
1:
- "&8» &8Earn &a$%money%&8 for each crop farmed"
rewards-description:
1:
- "&8» &8Earn &a$%money%&8 for each crop farmed"
level-up-messages:
1:
- "&8» &8Earn &a$%money%&8 for each crop farmed"
level-commands: [ ]
effects:
- id: give_money
args:
amount: "%level% * 0.25"
filters:
blocks:
- "wheat"
- "potatoes"
- "beetroots"
- "carrots"
- "melon"
- "pumpkin"
- "cactus"
- "sugar_cane"
- "cocoa"
- "nether_wart"
- "bamboo"
- "sweet_berries"
- "glow_berries"
triggers:
- mine_block
conditions: [ ]
icon: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODMzNmUzMTVlMWFlOTk1NzJkYzljNzJhNjJhMTRiODU3Nzc0MWRjMzQ3MmM3NDEzZDdlYWE2NjdhMzA3YTNkNyJ9fX0=

View File

@@ -0,0 +1,94 @@
name: "&#adf3fdFisherman"
description: "&8&oLevel up by fishing"
unlocked-by-default: true
reset-on-quit: false
join-price: 0
leave-price: 0
level-xp-requirements:
- 100
- 120
- 150
- 180
- 210
- 250
- 300
- 360
- 430
- 520
- 620
- 740
- 890
- 1000
- 1300
- 1500
- 1900
- 2200
- 2700
- 3200
- 3800
- 4600
- 5500
- 6600
- 7900
- 9500
- 11500
- 14000
- 17000
- 19000
- 24000
- 29000
- 34000
- 41000
- 50000
- 60000
- 70000
- 85000
- 100000
- 120000
- 150000
- 180000
- 210000
- 250000
- 300000
- 360000
- 440000
- 580000
- 750000
xp-gain-methods:
- trigger: catch_fish
multiplier: 20.0
conditions: [ ]
level-placeholders:
- id: "money"
value: "%level% * 5"
effects-description:
1:
- "&8» &8Earn &a$%money%&8 for each fish caught"
rewards-description:
1:
- "&8» &8Earn &a$%money%&8 for each fish caught"
level-up-messages:
1:
- "&8» &8Earn &a$%money%&8 for each fish caught"
level-commands: [ ]
effects:
- id: give_money
args:
amount: "%v% * %level% * 2.0"
triggers:
- catch_fish
conditions: [ ]
icon: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDgwNGU0MmVjOWIwN2ZjZTFjZTAwNThiNzhkZjU3NjNmNmU0MTBkOWNlODJlZjFlYmI5NTk3YTE1MmI2ZDRjOCJ9fX0=

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

@@ -0,0 +1,97 @@
name: "&#8a0303Slayer"
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
- 150
- 180
- 210
- 250
- 300
- 360
- 430
- 520
- 620
- 740
- 890
- 1000
- 1300
- 1500
- 1900
- 2200
- 2700
- 3200
- 3800
- 4600
- 5500
- 6600
- 7900
- 9500
- 11500
- 14000
- 17000
- 19000
- 24000
- 29000
- 34000
- 41000
- 50000
- 60000
- 70000
- 85000
- 100000
- 120000
- 150000
- 180000
- 210000
- 250000
- 300000
- 360000
- 440000
- 580000
- 750000
xp-gain-methods:
- trigger: kill
multiplier: 0.05
conditions: [ ]
level-placeholders:
- id: "money"
value: "%level% / 10"
effects-description:
1:
- "&8» &8Earn &a$%money%&8 per heart of health that"
- " &8mobs you kill have"
rewards-description:
1:
- "&8» &8Earn &a$%money%&8 per heart of health that"
- " &8mobs you kill have"
level-up-messages:
1:
- "&8» &8Earn &a$%money%&8 per heart of health that"
- " &8mobs you kill have"
level-commands: [ ]
effects:
- id: give_money
args:
amount: "%v% * %level% * 0.1"
triggers:
- kill
conditions: [ ]
icon: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDY5MTllMGFjYzFiMjkzYThkNWY5NzI4NjkzMzZhN2VmZWRiMGJhNmY0YzdlMTkzODhkOGZiODEyNjBmMzIzYyJ9fX0=

View File

@@ -0,0 +1,190 @@
# The ID of the job is the name of the .yml file,
# for example miner.yml has the ID of miner
# You can place jobs anywhere in this folder,
# including in subfolders if you want to organize your job configs
# _example.yml is not loaded.
# The display name of the job
name: "&#0047b3Toolsmith"
# The description of the job
description: "&8&oLevel up by crafting tools"
# 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
- 120
- 150
- 180
- 210
- 250
- 300
- 360
- 430
- 520
- 620
- 740
- 890
- 1000
- 1300
- 1500
- 1900
- 2200
- 2700
- 3200
- 3800
- 4600
- 5500
- 6600
- 7900
- 9500
- 11500
- 14000
- 17000
- 19000
- 24000
- 29000
- 34000
- 41000
- 50000
- 60000
- 70000
- 85000
- 100000
- 120000
- 150000
- 180000
- 210000
- 250000
- 300000
- 360000
- 440000
- 580000
- 750000
# An XP Gain method takes a trigger, a multiplier, conditions, and filters.
# The multiplier takes the value produced by the trigger and multiplies it
# by some value to calculate the experience that should be given
xp-gain-methods:
- trigger: craft
multiplier: 2
conditions: [ ]
filters:
items:
- "*wooden_pickaxe"
- "*stone_pickaxe"
- "*iron_pickaxe"
- "*golden_pickaxe"
- "*diamond_pickaxe"
- "*netherite_pickaxe"
- "*wooden_axe"
- "*stone_axe"
- "*iron_axe"
- "*golden_axe"
- "*diamond_axe"
- "*netherite_axe"
- "*wooden_shovel"
- "*stone_shovel"
- "*iron_shovel"
- "*golden_shovel"
- "*diamond_shovel"
- "*netherite_shovel"
- "*wooden_hoe"
- "*stone_hoe"
- "*iron_hoe"
- "*golden_hoe"
- "*diamond_hoe"
- "*netherite_hoe"
- "*fishing_rod"
- "*flint_and_steel"
- "*clock"
- "*compass"
- "*lead"
- "*shears"
- "*spyglass"
# Custom placeholders to be used in descriptions,
# Don't add % to the IDs, this is done automatically
# The value takes a %level% placeholder and is a mathematical expression
level-placeholders:
- id: "money"
value: "%level% * 2"
# The text shown with the %effects% placeholder
# The number dictates the minimum level for this text to show for
# Adding new levels will override this text on those levels or above
effects-description:
1:
- "&8» &8Earn &a$%money%&8 for each tool crafted"
# Same as above, but for %rewards%
rewards-description:
1:
- "&8» &8Earn &a$%money%&8 for each tool crafted"
# Same as above, but for %level_up_messages%
level-up-messages:
1:
- "&8» &8Earn &a$%money%&8 for each tool crafted"
# Commands to be sent on levelup, can be formatted two ways:
# level:command (e.g. 10:eco give %player% 1000), which would execute that command for level 10
# command (e.g. eco give %player% 5000), which would execute that command for all levels
level-commands: [ ]
# The effects for the job, has %level% as a placeholder
effects:
- id: give_money
args:
amount: "2 * %level%"
filters:
items:
- "*wooden_pickaxe"
- "*stone_pickaxe"
- "*iron_pickaxe"
- "*golden_pickaxe"
- "*diamond_pickaxe"
- "*netherite_pickaxe"
- "*wooden_axe"
- "*stone_axe"
- "*iron_axe"
- "*golden_axe"
- "*diamond_axe"
- "*netherite_axe"
- "*wooden_shovel"
- "*stone_shovel"
- "*iron_shovel"
- "*golden_shovel"
- "*diamond_shovel"
- "*netherite_shovel"
- "*wooden_hoe"
- "*stone_hoe"
- "*iron_hoe"
- "*golden_hoe"
- "*diamond_hoe"
- "*netherite_hoe"
- "*fishing_rod"
- "*flint_and_steel"
- "*clock"
- "*compass"
- "*lead"
- "*shears"
- "*spyglass"
triggers:
- craft
# The conditions for the job, also has %level% as a placeholder
conditions: [ ]
# The icon in GUIs
icon: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODk2ZDRjODM4YTE2MDZhYzc1Nzc1NDIzMjA4NjE0OTcwOGI3OWFiYTAxYmU5NTNjNjUzOTkxMDFlODk0M2RhZiJ9fX0=

View File

@@ -20,6 +20,17 @@ messages:
unlocked-job: "&fSuccessfully unlocked the %job%&f job for %player%!" unlocked-job: "&fSuccessfully unlocked the %job%&f job for %player%!"
cannot-spawn-job: "&cYou already have this job unlocked!" cannot-spawn-job: "&cYou already have this job unlocked!"
invalid-amount: "&cInvalid amount!" invalid-amount: "&cInvalid amount!"
no-job: "&cYou don't have a job!"
joined-job: "&fYou have joined the %job%&f job!"
left-job: "&fYou have left the %job%&f job!"
job-already-joined: "&cYou already have this job!"
must-specify-lrcdb-id: "&cYou must specify the ID of the config to download! Not sure what this means? Go to &alrcdb.auxilor.io"
lrcdb-import-error: "&cError importing config: &f%message%"
lrcdb-import-success: "&fImported &a%name%&f! Reload the plugin to install it"
must-specify-config-name: "&cYou must specify the config name!"
invalid-config-name: "&cInvalid config name!"
lrcdb-export-error: "&cError exporting config: &f%message%"
lrcdb-export-success: "&fExported &a%name%&f! View it on &alrcdb.auxilor.io&f, or share your config ID: &f%id%"
menu: menu:
title: "Jobs" title: "Jobs"

View File

@@ -0,0 +1,19 @@
# Options for lrcdb (https://lrcdb.auxilor.io), a website to share configs
# with other server owners, so you can get more configs without making them
# yourself!
author: "Unknown Author" # The name attached to configs you export
# Options about automatically sharing configs you create
share-configs:
# If you want all your configs to automatically be publicly available,
# set this to true. This really helps out other users!
publicly: false
# If you don't want your configs to be usable to gather information about
# plugin usage or to improve the plugins in the future, disable this.
# Nothing identifying is shared.
enabled: true
# If you disable share-configs, you can still share select configs publicly
# with /ecojobs export <config>.

View File

@@ -49,7 +49,11 @@ permissions:
ecojobs.command.jobs: true ecojobs.command.jobs: true
ecojobs.command.unlock: true ecojobs.command.unlock: true
ecojobs.command.givexp: true ecojobs.command.givexp: true
ecojobs.command.join: true
ecojobs.command.leave: true
ecojobs.command.reset: true ecojobs.command.reset: true
ecojobs.command.import: true
ecojobs.command.export: true
ecojobs.command.reload: ecojobs.command.reload:
description: Allows reloading the config description: Allows reloading the config
@@ -69,6 +73,18 @@ permissions:
ecojobs.command.reset: ecojobs.command.reset:
description: Allows the use of /ecojobs reset. description: Allows the use of /ecojobs reset.
default: op default: op
ecojobs.command.import:
description: Allows the use of /ecojobs import.
default: op
ecojobs.command.export:
description: Allows the use of /ecojobs export.
default: op
ecojobs.command.join:
description: Allows the use of /jobs join.
default: true
ecojobs.command.leave:
description: Allows the use of /jobs leave.
default: true
ecojobs.xpmultiplier.50percent: ecojobs.xpmultiplier.50percent:
description: Gives the player 50% more job experience description: Gives the player 50% more job experience

View File

@@ -1,4 +1,4 @@
#libreforge-updater #libreforge-updater
#Sat Sep 10 12:58:46 BST 2022 #Fri Oct 21 19:25:32 BST 2022
version=1.0.0 version=1.19.1
plugin-name=EcoJobs plugin-name=EcoJobs

0
gradlew vendored Normal file → Executable file
View File