diff --git a/build.gradle.kts b/build.gradle.kts index 9a6e260..bd2b681 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ plugins { java `java-library` `maven-publish` - kotlin("jvm") version "1.9.20" + kotlin("jvm") version "2.1.0" id("io.github.goooler.shadow") version "8.1.7" id("com.willfp.libreforge-gradle-plugin") version "1.0.0" } @@ -40,7 +40,7 @@ allprojects { dependencies { compileOnly("com.willfp:eco:6.58.0") compileOnly("org.jetbrains:annotations:23.0.0") - compileOnly("org.jetbrains.kotlin:kotlin-stdlib:1.9.20") + compileOnly("org.jetbrains.kotlin:kotlin-stdlib:2.1.0") } java { diff --git a/eco-core/core-nms/v1_21_3/build.gradle.kts b/eco-core/core-nms/v1_21_3/build.gradle.kts index c2cd9d0..b94628a 100644 --- a/eco-core/core-nms/v1_21_3/build.gradle.kts +++ b/eco-core/core-nms/v1_21_3/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + group = "com.willfp" version = rootProject.version @@ -19,8 +21,8 @@ tasks { } compileKotlin { - kotlinOptions { - jvmTarget = "21" + compilerOptions { + jvmTarget.set(JvmTarget.JVM_21) } } } diff --git a/eco-core/core-nms/v1_21_4/build.gradle.kts b/eco-core/core-nms/v1_21_4/build.gradle.kts new file mode 100644 index 0000000..88a41cf --- /dev/null +++ b/eco-core/core-nms/v1_21_4/build.gradle.kts @@ -0,0 +1,28 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +group = "com.willfp" +version = rootProject.version + +val spigotVersion = "1.21.4-R0.1-SNAPSHOT" + +dependencies { + compileOnly("org.spigotmc:spigot:$spigotVersion") +} + +configurations.compileOnly { + resolutionStrategy { + force("org.spigotmc:spigot:$spigotVersion") + } +} + +tasks { + compileJava { + options.release = 21 + } + + compileKotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_21) + } + } +} diff --git a/eco-core/core-nms/v1_21_4/src/main/kotlin/com/willfp/ecoskills/proxy/v1_21_4/ActionBarCompatibility.kt b/eco-core/core-nms/v1_21_4/src/main/kotlin/com/willfp/ecoskills/proxy/v1_21_4/ActionBarCompatibility.kt new file mode 100644 index 0000000..349e144 --- /dev/null +++ b/eco-core/core-nms/v1_21_4/src/main/kotlin/com/willfp/ecoskills/proxy/v1_21_4/ActionBarCompatibility.kt @@ -0,0 +1,22 @@ +package com.willfp.ecoskills.proxy.v1_21_4 + +import com.willfp.eco.core.packet.PacketEvent +import com.willfp.ecoskills.actionbar.ActionBarCompatibilityProxy +import com.willfp.ecoskills.actionbar.pausePersistentActionBar +import net.minecraft.network.protocol.game.ClientboundSystemChatPacket + +class ActionBarCompatibility : ActionBarCompatibilityProxy { + private val ClientboundSystemChatPacket.isActionBar: Boolean + get() = this::class.java.declaredFields + .first { it.type == Boolean::class.java } + .apply { isAccessible = true } + .get(this) as Boolean + + override fun onSend(event: PacketEvent) { + val player = event.player + + when (val packet = event.packet.handle) { + is ClientboundSystemChatPacket -> if (packet.isActionBar) player.pausePersistentActionBar() + } + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/commands/CommandTop.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/commands/CommandTop.kt index 84f801d..c3257b0 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/commands/CommandTop.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/commands/CommandTop.kt @@ -37,7 +37,7 @@ class CommandTop(plugin: EcoPlugin) : val offset = (page - 1) * 10 - val positions = ((offset + page)..(offset + page + 9)).toList() + val positions = ((offset + 1)..(offset + 10)).toList() val top = if (skill == null) { positions.mapNotNull { Skills.getTop(it) } @@ -52,7 +52,7 @@ class CommandTop(plugin: EcoPlugin) : val (player, level) = entry val line = plugin.langYml.getString("top-line-format") - .replace("%rank%", positions[index].toString()) + .replace("%rank%", (offset + index + 1).toString()) .replace("%level%", level.toString()) .replace("%player%", player.savedDisplayName) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/gui/components/PlayerInfoIcon.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/gui/components/PlayerInfoIcon.kt index 49b49cf..f93fad5 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/gui/components/PlayerInfoIcon.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/gui/components/PlayerInfoIcon.kt @@ -23,47 +23,48 @@ class PlayerInfoIcon( config: Config, opensStatMenu: Boolean ) : PositionedComponent { - private val slot = slot({ player, _ -> - skullCache.get(player.uniqueId) { - val skullBuilder = SkullBuilder() - .setDisplayName( - config.getString("name") - .replace("%player%", player.savedDisplayName) - .formatEco(player, true) - ) - .addLoreLines( - config.getFormattedStrings( - "lore", - placeholderContext( - player = player + override val isEnabled = config.getBoolOrNull("enabled") ?: true + private val slot = if (isEnabled) { + slot({ player, _ -> + skullCache.get(player.uniqueId) { + val skullBuilder = SkullBuilder() + .setDisplayName( + config.getString("name") + .replace("%player%", player.savedDisplayName) + .formatEco(player, true) + ) + .addLoreLines( + config.getFormattedStrings( + "lore", // Ensure correct path for lore + placeholderContext(player = player) ) ) - ) - .apply { - if (opensStatMenu) { - addLoreLines( - config.getFormattedStrings( - "view-more", - placeholderContext( - player = player + .apply { + if (opensStatMenu) { + addLoreLines( + config.getFormattedStrings( + "view-more", + placeholderContext(player = player) ) ) - ) + } } - } - skullBuilder.build().apply { - val meta = itemMeta as SkullMeta - meta.owningPlayer = player - itemMeta = meta - } - } - }) { - if (opensStatMenu) { - onLeftClick { player, _, _, _ -> - StatsGUI.open(player) + skullBuilder.build().apply { + val meta = itemMeta as SkullMeta + meta.owningPlayer = player + itemMeta = meta + } + } + }) { + if (opensStatMenu) { + onLeftClick { player, _, _, _ -> + StatsGUI.open(player) + } } } + } else { + null } override val row: Int = config.getInt("row") diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/display/GainXPDisplay.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/display/GainXPDisplay.kt index dc9621a..295160f 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/display/GainXPDisplay.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/display/GainXPDisplay.kt @@ -18,13 +18,14 @@ import com.willfp.ecoskills.api.getFormattedRequiredXP import com.willfp.ecoskills.api.getSkillLevel import com.willfp.ecoskills.api.getSkillProgress import com.willfp.ecoskills.api.getSkillXP -import com.willfp.ecoskills.skills.Skill import org.bukkit.boss.BarColor import org.bukkit.boss.BarStyle import org.bukkit.entity.Player import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority import org.bukkit.event.Listener import java.time.Duration +import java.util.UUID private val xpGainSoundEnabledKey = PersistentDataKey( namespacedKeyOf("ecoskills", "gain_sound_enabled"), @@ -36,13 +37,22 @@ fun Player.toggleXPGainSound() { this.profile.write(xpGainSoundEnabledKey, !this.profile.read(xpGainSoundEnabledKey)) } +data class PlayerSkill( + val player: UUID, + val skill: String +) + +private fun playerSkill(player: Player, skill: Skill): PlayerSkill { + return PlayerSkill(player.uniqueId, skill.id) +} + val Player.isXPGainSoundEnabled: Boolean get() = this.profile.read(xpGainSoundEnabledKey) class GainXPDisplay( private val plugin: EcoPlugin ) : Listener { - private val gainCache: Cache = Caffeine.newBuilder().expireAfterWrite(Duration.ofSeconds(3)) + private val gainCache: Cache = Caffeine.newBuilder().expireAfterWrite(Duration.ofSeconds(3)) .build() private val sound = if (plugin.configYml.getBool("skills.gain-xp.sound.enabled")) { @@ -51,11 +61,11 @@ class GainXPDisplay( ) } else null - @EventHandler + @EventHandler(priority = EventPriority.MONITOR) fun handle(event: PlayerSkillXPGainEvent) { val player = event.player - val current = gainCache.get(event.skill) { 0.0 } - gainCache.put(event.skill, current + event.gainedXP) + val current = gainCache.get(playerSkill(player, event.skill)) { 0.0 } + gainCache.put(playerSkill(player, event.skill), current + event.gainedXP) // Run next tick because level up calls before xp is added plugin.scheduler.run { @@ -111,7 +121,7 @@ class GainXPDisplay( ) .replace("%current_xp%", event.player.getSkillXP(event.skill).toNiceString()) .replace("%required_xp%", event.player.getFormattedRequiredXP(event.skill)) - .replace("%gained_xp%", gainCache.get(event.skill) { 0.0 }.toNiceString()) + .replace("%gained_xp%", gainCache.get(playerSkill(event.player, event.skill)) { 0.0 }.toNiceString()) .formatEco( placeholderContext( event.player, diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 909e110..7c255a4 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -123,6 +123,7 @@ stats-gui: - "211101112" player-info: + enabled: true row: 1 column: 5 diff --git a/eco-core/core-plugin/src/main/resources/skills/farming.yml b/eco-core/core-plugin/src/main/resources/skills/farming.yml index 9177760..f3c221f 100644 --- a/eco-core/core-plugin/src/main/resources/skills/farming.yml +++ b/eco-core/core-plugin/src/main/resources/skills/farming.yml @@ -147,7 +147,6 @@ xp-gain-methods: blocks: - wheat - carrots - - melon - nether_wart - trigger: mine_block @@ -163,6 +162,7 @@ xp-gain-methods: player_placed: false blocks: - pumpkin + - melon - trigger: mine_block multiplier: 5 diff --git a/eco-core/core-plugin/src/main/resources/skills/woodcutting.yml b/eco-core/core-plugin/src/main/resources/skills/woodcutting.yml index d9661f2..449b6e4 100644 --- a/eco-core/core-plugin/src/main/resources/skills/woodcutting.yml +++ b/eco-core/core-plugin/src/main/resources/skills/woodcutting.yml @@ -114,6 +114,7 @@ xp-gain-methods: - dark_oak_log - mangrove_log - cherry_log + - pale_oak_log - oak_wood - birch_wood - spruce_wood @@ -121,7 +122,8 @@ xp-gain-methods: - acacia_wood - dark_oak_wood - mangrove_wood - - chery_wood + - cherry_wood + - pale_oak_wood - trigger: mine_block multiplier: 14 diff --git a/gradle.properties b/gradle.properties index 00f8ca7..95a5a1c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,7 @@ #libreforge-updater -#Wed Nov 06 18:32:41 GMT 2024 +#Sat Jan 25 13:49:47 GMT 2025 kotlin.code.style=official -libreforge-version=4.72.2 -version=3.60.4 +kotlin.daemon.jvmargs=-Xmx2g -XX\:+UseG1GC -XX\:MaxMetaspaceSize\=512m +libreforge-version=4.73.0 +org.gradle.parallel=true +version=3.62.0 diff --git a/settings.gradle.kts b/settings.gradle.kts index ad5ee23..461999e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -28,3 +28,4 @@ include(":eco-core:core-nms:v1_20_R2") include(":eco-core:core-nms:v1_20_R3") include(":eco-core:core-nms:v1_21") include(":eco-core:core-nms:v1_21_3") +include(":eco-core:core-nms:v1_21_4")