Fixes, add levelup sound

This commit is contained in:
TomTom 2024-03-15 09:27:23 +01:00
parent fb2a999cc7
commit 61532f1087
6 changed files with 41 additions and 11 deletions

View File

@ -48,9 +48,11 @@ class Config(file: File, stream: InputStream) {
@JvmStatic @JvmStatic
fun PLACE_PERMISSION() = AxMinionsAPI.INSTANCE.getConfig().get("place-permissions", false) fun PLACE_PERMISSION() = AxMinionsAPI.INSTANCE.getConfig().get("place-permissions", false)
@JvmStatic @JvmStatic
fun WORK_WHEN_OWNER_OFFLINE() = AxMinionsAPI.INSTANCE.getConfig().get<Boolean>("work-when-owner-offline", true) fun WORK_WHEN_OWNER_OFFLINE() = AxMinionsAPI.INSTANCE.getConfig().get("work-when-owner-offline", true)
@JvmStatic @JvmStatic
fun MAX_BREAKS_PER_TICK() = AxMinionsAPI.INSTANCE.getConfig().get<Int>("max-breaks-per-tick", 200) fun MAX_BREAKS_PER_TICK() = AxMinionsAPI.INSTANCE.getConfig().get("max-breaks-per-tick", 200)
@JvmStatic
fun UPGRADE_SOUND() = AxMinionsAPI.INSTANCE.getConfig().get("upgrade-sound", "ENTITY_PLAYER_LEVELUP")
@JvmStatic @JvmStatic
fun DEBUG(): Boolean { fun DEBUG(): Boolean {
if (debug === null) { if (debug === null) {

View File

@ -2,21 +2,32 @@ package com.artillexstudios.axminions.api.minions.miniontype
import com.artillexstudios.axapi.config.Config import com.artillexstudios.axapi.config.Config
import com.artillexstudios.axapi.libs.boostedyaml.boostedyaml.block.implementation.Section import com.artillexstudios.axapi.libs.boostedyaml.boostedyaml.block.implementation.Section
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder import com.artillexstudios.axapi.libs.boostedyaml.boostedyaml.settings.dumper.DumperSettings
import com.artillexstudios.axapi.libs.boostedyaml.boostedyaml.settings.general.GeneralSettings
import com.artillexstudios.axapi.libs.boostedyaml.boostedyaml.settings.loader.LoaderSettings
import com.artillexstudios.axapi.libs.boostedyaml.boostedyaml.settings.updater.UpdaterSettings
import com.artillexstudios.axapi.utils.ItemBuilder import com.artillexstudios.axapi.utils.ItemBuilder
import com.artillexstudios.axminions.api.AxMinionsAPI import com.artillexstudios.axminions.api.AxMinionsAPI
import com.artillexstudios.axminions.api.minions.Minion import com.artillexstudios.axminions.api.minions.Minion
import com.artillexstudios.axminions.api.utils.Keys import com.artillexstudios.axminions.api.utils.Keys
import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataType
import java.io.File import java.io.File
import java.io.InputStream import java.io.InputStream
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder
import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataType
abstract class MinionType(private val name: String, private val defaults: InputStream) { abstract class MinionType(private val name: String, private val defaults: InputStream) {
private lateinit var config: Config private lateinit var config: Config
fun load() { fun load() {
config = Config(File(AxMinionsAPI.INSTANCE.getAxMinionsDataFolder(), "/minions/$name.yml"), defaults) config = Config(
File(AxMinionsAPI.INSTANCE.getAxMinionsDataFolder(), "/minions/$name.yml"),
defaults,
GeneralSettings.builder().setUseDefaults(false).build(),
LoaderSettings.DEFAULT,
DumperSettings.DEFAULT,
UpdaterSettings.DEFAULT
)
AxMinionsAPI.INSTANCE.getDataHandler().insertType(this) AxMinionsAPI.INSTANCE.getDataHandler().insertType(this)
} }
@ -41,7 +52,11 @@ abstract class MinionType(private val name: String, private val defaults: InputS
} }
fun getItem(level: Int = 1, actions: Long = 0): ItemStack { fun getItem(level: Int = 1, actions: Long = 0): ItemStack {
val builder = ItemBuilder(config.getSection("item"), Placeholder.unparsed("level", level.toString()), Placeholder.unparsed("actions", actions.toString())) val builder = ItemBuilder(
config.getSection("item"),
Placeholder.unparsed("level", level.toString()),
Placeholder.unparsed("actions", actions.toString())
)
builder.storePersistentData(Keys.MINION_TYPE, PersistentDataType.STRING, name) builder.storePersistentData(Keys.MINION_TYPE, PersistentDataType.STRING, name)
builder.storePersistentData(Keys.LEVEL, PersistentDataType.INTEGER, level) builder.storePersistentData(Keys.LEVEL, PersistentDataType.INTEGER, level)
builder.storePersistentData(Keys.STATISTICS, PersistentDataType.LONG, actions) builder.storePersistentData(Keys.STATISTICS, PersistentDataType.LONG, actions)

View File

@ -14,6 +14,7 @@ import com.artillexstudios.axminions.api.utils.fastFor
import net.md_5.bungee.api.ChatMessageType import net.md_5.bungee.api.ChatMessageType
import net.md_5.bungee.api.chat.TextComponent import net.md_5.bungee.api.chat.TextComponent
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.Sound
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
import org.bukkit.event.Listener import org.bukkit.event.Listener
@ -144,6 +145,10 @@ class MinionInventoryListener : Listener {
it.takeBalance(player, money) it.takeBalance(player, money)
} }
if (Config.UPGRADE_SOUND().isNotBlank()) {
player.playSound(player, Config.UPGRADE_SOUND(), 1.0f, 1.0f)
}
minion.setLevel(minion.getLevel() + 1) minion.setLevel(minion.getLevel() + 1)
} }

View File

@ -25,6 +25,8 @@ import com.artillexstudios.axminions.api.utils.fastFor
import com.artillexstudios.axminions.api.warnings.Warning import com.artillexstudios.axminions.api.warnings.Warning
import com.artillexstudios.axminions.api.warnings.Warnings import com.artillexstudios.axminions.api.warnings.Warnings
import com.artillexstudios.axminions.listeners.LinkingListener import com.artillexstudios.axminions.listeners.LinkingListener
import java.text.NumberFormat
import java.util.Locale
import java.util.UUID import java.util.UUID
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder
import org.bukkit.Bukkit import org.bukkit.Bukkit
@ -55,6 +57,9 @@ class Minion(
private val locationID: Int, private val locationID: Int,
private var chestLocationId: Int private var chestLocationId: Int
) : Minion { ) : Minion {
companion object {
private val numberFormat = NumberFormat.getCompactNumberInstance(Locale.ENGLISH, NumberFormat.Style.SHORT)
}
private lateinit var entity: PacketArmorStand private lateinit var entity: PacketArmorStand
private var nextAction = 0 private var nextAction = 0
private var range = 0.0 private var range = 0.0
@ -250,7 +255,7 @@ class Minion(
this.level + 1 this.level + 1
).toString() ).toString()
) )
val stored = Placeholder.parsed("storage", storage.toString()) val stored = Placeholder.parsed("storage", numberFormat.format(storage))
val actions = Placeholder.parsed("actions", actions.toString()) val actions = Placeholder.parsed("actions", actions.toString())
val multiplier = Placeholder.parsed("multiplier", type.getDouble("multiplier", this.level).toString()) val multiplier = Placeholder.parsed("multiplier", type.getDouble("multiplier", this.level).toString())
val nextMultiplier = Placeholder.parsed( val nextMultiplier = Placeholder.parsed(

View File

@ -7,8 +7,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock
import kotlin.concurrent.read import kotlin.concurrent.read
import kotlin.concurrent.write import kotlin.concurrent.write
import org.bukkit.Chunk import org.bukkit.Chunk
import org.bukkit.Location
object Minions { object Minions {
internal val lock = ReentrantReadWriteLock() internal val lock = ReentrantReadWriteLock()

View File

@ -50,6 +50,11 @@ max-breaks-per-tick: 200
# Possible options: chat, title, subtitle, actionbar # Possible options: chat, title, subtitle, actionbar
upgrade-fail: "chat" upgrade-fail: "chat"
# The sound played when you upgrade a minion
# set to "" to disable!
# For a list of sounds visit: https://jd.papermc.io/paper/1.20/org/bukkit/Sound.html
upgrade-sound: "ENTITY_PLAYER_LEVELUP"
database: database:
# Can be H2 (SqLite support is planned) # Can be H2 (SqLite support is planned)
type: "H2" type: "H2"
@ -101,4 +106,4 @@ gui:
debug: false debug: false
# Do not change! # Do not change!
config-version: 5 config-version: 6