Compare commits

...

124 Commits

Author SHA1 Message Date
Will FP
36195e16ce libreforge-updater 2025-03-29 14:22:31 +00:00
Will FP
bae0ab6150 libreforge-updater 2025-01-31 11:55:07 +00:00
Will FP
4445c7f681 libreforge-updater 2025-01-25 13:50:11 +00:00
Will FP
8285613d15 Fix 2025-01-25 13:48:01 +00:00
Will FP
855aa29e4b libreforge-updater 2025-01-25 13:46:06 +00:00
Will FP
92f47d1c87 libreforge-updater 2024-11-06 18:33:33 +00:00
Will FP
5b817fed20 libreforge-updater 2024-10-22 12:14:43 +01:00
Will FP
b6b523b1f8 libreforge-updater 2024-09-22 17:01:04 +01:00
Auxilor
8c016b94ef libreforge-updater 2024-09-02 11:30:08 +01:00
Auxilor
9c87498045 libreforge-updater 2024-08-30 17:25:07 +01:00
Auxilor
cbb48fa888 libreforge-updater 2024-08-29 12:09:17 +01:00
Auxilor
58ecfbe112 libreforge-updater 2024-08-23 15:35:23 +01:00
Auxilor
93e24a6f25 libreforge-updater 2024-08-21 18:58:20 +01:00
Auxilor
d8dfe6fd7c libreforge-updater 2024-08-15 15:07:35 +01:00
Auxilor
4551ddad08 libreforge-updater 2024-08-03 13:41:26 +01:00
Auxilor
e47533f03c libreforge-updater 2024-07-25 10:04:33 +01:00
Auxilor
5c9f792780 libreforge-updater 2024-07-21 12:19:17 +01:00
Auxilor
bde074bd7c libreforge-updater 2024-07-19 20:28:38 +01:00
Auxilor
5d143f6dec libreforge-updater 2024-07-18 13:24:13 +01:00
Auxilor
8abdcd6d33 libreforge-updater 2024-07-16 17:13:42 +01:00
Auxilor
210f618dc9 libreforge-updater 2024-07-13 20:45:18 +01:00
Auxilor
0514220390 libreforge-updater 2024-07-08 15:58:28 +01:00
Auxilor
2135293799 libreforge-updater 2024-07-05 13:02:45 +01:00
Auxilor
14e3d8fdf5 libreforge-updater 2024-07-03 17:43:57 +01:00
Auxilor
db4fb84160 libreforge-updater 2024-06-29 16:44:01 +01:00
Auxilor
6b0541646f libreforge-updater 2024-06-28 15:56:24 +01:00
Auxilor
72f826a57c libreforge-updater 2024-06-27 18:54:28 +01:00
Auxilor
04b0816e72 libreforge-updater 2024-06-26 16:52:20 +01:00
Auxilor
09980fc895 libreforge-updater 2024-06-25 15:13:59 +01:00
Auxilor
c737256349 libreforge-updater 2024-06-24 15:06:34 +01:00
Auxilor
ff4900da4d Updated to Java 21 2024-06-24 13:59:14 +01:00
Auxilor
570f1b1213 libreforge-updater 2024-06-23 17:26:31 +01:00
Auxilor
1f8714bb57 libreforge-updater 2024-06-23 13:19:01 +01:00
Will FP
08e964986b libreforge-updater 2024-05-31 20:37:57 +01:00
Will FP
2dcf954101 libreforge-updater 2024-05-11 18:21:22 +01:00
Will FP
d3d25290fd libreforge-updater 2024-04-17 20:35:06 +01:00
Auxilor
b9939057a0 libreforge-updater 2024-04-15 18:19:43 +01:00
Auxilor
26624faf98 libreforge-updater 2024-04-11 13:17:39 +01:00
Auxilor
23997922ed libreforge-updater 2024-03-29 16:08:46 +00:00
Will FP
b2120c59e3 libreforge-updater 2024-03-11 17:38:12 +00:00
Will FP
c04d6eca01 libreforge-updater 2024-03-10 20:09:43 +00:00
Will FP
5d18b5953a libreforge-updater 2024-03-02 15:20:58 +00:00
Will FP
5345394d14 libreforge-updater 2024-02-22 13:18:28 +00:00
Will FP
0c765272df libreforge-updater 2024-02-15 13:02:42 +00:00
Will FP
f17d4af664 libreforge-updater 2024-02-08 19:50:03 +00:00
Will FP
f57db1cd74 libreforge-updater 2024-01-30 11:27:47 +00:00
Will FP
188cac252f libreforge-updater 2024-01-18 17:03:28 +00:00
Will FP
8fd8f6237e libreforge-updater 2024-01-16 13:29:25 +00:00
Will FP
6abf50b009 libreforge-updater 2024-01-13 14:24:11 +00:00
Will FP
8a750b5824 libreforge-updater 2024-01-07 13:52:05 +00:00
Will FP
1fd45ccd75 libreforge-updater 2024-01-06 09:20:23 +00:00
Auxilor
1fdb3f65df libreforge-updater 2024-01-04 17:25:31 +00:00
Auxilor
a6fe3b095c libreforge-updater 2024-01-01 20:02:32 +00:00
Will FP
86c0c4d391 libreforge-updater 2023-12-27 14:17:52 +01:00
Will FP
b42dfe9be2 libreforge-updater 2023-12-24 14:55:01 +01:00
Auxilor
ea66d98df8 libreforge-updater 2023-12-20 15:57:14 +00:00
Will FP
2cc0d6b3c2 libreforge-updater 2023-12-14 16:13:55 +00:00
Will FP
8e2006fa2c libreforge-updater 2023-12-11 12:13:10 +00:00
Will FP
e8c387e85c libreforge-updater 2023-12-07 17:26:10 +00:00
Will FP
7a82b73b96 Updated to use ModelEngineBridge 2023-12-03 16:07:31 +00:00
Will FP
4049a429d6 libreforge-updater 2023-12-03 15:59:57 +00:00
Will FP
5895c12c6b libreforge-updater 2023-11-30 14:27:51 +00:00
Will FP
0b6112408f libreforge-updater 2023-11-26 23:24:54 +00:00
Will FP
8ee3852ad8 libreforge-updater 2023-11-23 13:21:50 +00:00
Auxilor
5aab3af9ea libreforge-updater 2023-11-21 22:41:48 +00:00
Auxilor
e83d8d4b14 libreforge-updater 2023-11-19 14:14:31 +00:00
Auxilor
0241b2fb2a libreforge-updater 2023-11-17 19:02:39 +00:00
Auxilor
ac9147463a libreforge-updater 2023-11-11 17:59:04 +00:00
Auxilor
d2928ee59f libreforge-updater 2023-11-10 13:59:34 +00:00
Auxilor
315d8f0954 libreforge-updater 2023-11-05 13:42:13 +00:00
Auxilor
7f616da0ce libreforge-updater 2023-10-30 13:31:12 +00:00
Auxilor
eeada10ef8 libreforge-updater 2023-10-28 14:15:39 +01:00
Auxilor
230eb9b87f libreforge-updater 2023-10-24 15:39:40 +01:00
Auxilor
803324c5c9 libreforge-updater 2023-10-19 12:52:41 +01:00
Auxilor
6aaf494b73 libreforge-updater 2023-10-14 14:20:38 +01:00
Auxilor
d34ad33c7d libreforge-updater 2023-10-14 14:19:18 +01:00
Auxilor
e0c1c27ea5 Updated to 2.36.2 2023-10-07 17:57:10 +01:00
Auxilor
a31b6a2a4c Fixed pets gui again 2023-10-07 17:57:00 +01:00
Auxilor
82decbb2cb Updated to 2.36.1 2023-10-07 14:09:39 +01:00
Auxilor
f143a90dd7 Fixed pet icon max level lore 2023-10-07 14:09:28 +01:00
Auxilor
58a16a33ec libreforge-updater 2023-10-02 11:54:46 +01:00
Auxilor
8626869a0f Updated to 2.35.0 2023-10-02 11:37:47 +01:00
Auxilor
88eea3c768 Added max level lore everywhere 2023-10-02 11:35:12 +01:00
Auxilor
0271c16357 Added /ecopets givecurrentxp <player> <amount> 2023-10-02 11:26:41 +01:00
Auxilor
2dc88624dd Updated to 2.34.1 2023-09-28 16:19:32 +01:00
Auxilor
20d7e3abf7 Added max level lore 2023-09-28 16:19:14 +01:00
Auxilor
2d1d423f83 libreforge-updater 2023-09-26 14:46:10 +01:00
Auxilor
2064bcc9f2 libreforge-updater 2023-09-20 15:34:00 +01:00
Auxilor
95b7bdc3db libreforge-updater 2023-09-17 11:20:29 +01:00
Auxilor
619d5fdde5 libreforge-updater 2023-09-13 15:09:07 +01:00
Auxilor
4226d544e9 libreforge-updater 2023-09-07 16:01:52 +01:00
Auxilor
cf8de5a182 libreforge-updater 2023-09-02 17:34:39 +01:00
Auxilor
26ef893d2c libreforge-updater 2023-08-31 16:59:40 +01:00
Auxilor
1e5836203a libreforge-updater 2023-08-30 11:31:35 +01:00
Auxilor
dcb06f6e25 Added use-local-storage 2023-08-30 09:49:33 +01:00
Auxilor
493d419e2c libreforge-updater 2023-08-26 18:11:39 +01:00
Auxilor
435160f626 libreforge-updater 2023-08-23 15:31:54 +01:00
Auxilor
dfe7af1e1b libreforge-updater 2023-08-19 15:32:47 +01:00
Auxilor
25fe58d2ab libreforge-updater 2023-08-15 18:54:18 +01:00
Auxilor
a538947fb8 libreforge-updater 2023-08-13 14:42:46 +01:00
Auxilor
345c8e9049 libreforge-updater 2023-08-10 19:59:39 +01:00
Auxilor
87e3a15d01 libreforge-updater 2023-08-10 19:57:45 +01:00
Auxilor
1ea152058c libreforge-updater 2023-08-09 15:58:48 +01:00
Auxilor
a1a08f750a libreforge-updater 2023-08-09 14:40:44 +01:00
Auxilor
0ec4e566b3 libreforge-updater 2023-08-09 14:37:35 +01:00
Auxilor
98c71e938c libreforge-updater 2023-08-08 17:59:36 +01:00
Auxilor
2e3db38e67 libreforge-updater 2023-08-05 21:07:17 +01:00
Auxilor
d3438a0db1 libreforge-updater 2023-07-27 15:21:49 +01:00
Auxilor
69b8179672 libreforge-updater 2023-07-27 15:18:57 +01:00
Auxilor
ffe6f47e22 libreforge-updater 2023-07-25 14:38:31 +01:00
Auxilor
759f921287 libreforge-updater 2023-07-23 11:40:38 +01:00
Auxilor
2a0e27d7e1 libreforge-updater 2023-07-22 14:59:48 +01:00
Will FP
ad1e639d00 Merge pull request #44 from SenPr/master
Add total_pets placeholder, `has_pet` condition and fix `has_active_pet`
2023-07-22 13:37:26 +01:00
Auxilor
9f1f6b206c libreforge-updater 2023-07-21 12:33:13 +01:00
Auxilor
2a465013d4 libreforge-updater 2023-07-20 13:07:00 +01:00
Sen2000
6b2ea93e3b imports... 2023-07-20 15:58:44 +07:00
Sen2000
9f55826f5e Add has_pet condition and fix has_active_pet 2023-07-20 15:44:22 +07:00
Auxilor
ff9e2cbcba libreforge-updater 2023-07-19 14:14:53 +01:00
Sen2000
8e90f57364 imports oopsie part 2 2023-07-19 01:14:40 +07:00
Sen2000
682cfe6c8e imports oopsie AGAIN 2023-07-19 01:13:24 +07:00
Sen2000
a4983ffea0 Add total_pets placeholder 2023-07-19 01:10:40 +07:00
Auxilor
ebda2dd3c9 libreforge-updater 2023-07-17 18:32:30 +01:00
Auxilor
75794f4af7 libreforge-updater 2023-07-16 13:33:22 +01:00
Auxilor
53d7688436 libreforge-updater 2023-07-12 13:08:08 +01:00
25 changed files with 245 additions and 140 deletions

View File

@@ -15,11 +15,11 @@ jobs:
- name: Checkout latest code - name: Checkout latest code
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Set up JDK 17 - name: Set up JDK 21
uses: actions/setup-java@v2 uses: actions/setup-java@v2
with: with:
distribution: 'temurin' distribution: 'temurin'
java-version: 17 java-version: 21
- name: Change wrapper permissions - name: Change wrapper permissions
run: chmod +x ./gradlew run: chmod +x ./gradlew

View File

@@ -1,9 +1,11 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins { plugins {
java java
`java-library` `java-library`
`maven-publish` `maven-publish`
kotlin("jvm") version "1.7.10" kotlin("jvm") version "2.1.0"
id("com.github.johnrengelman.shadow") version "8.0.0" id("com.gradleup.shadow") version "8.3.0"
id("com.willfp.libreforge-gradle-plugin") version "1.0.0" id("com.willfp.libreforge-gradle-plugin") version "1.0.0"
} }
@@ -25,7 +27,7 @@ allprojects {
apply(plugin = "java") apply(plugin = "java")
apply(plugin = "kotlin") apply(plugin = "kotlin")
apply(plugin = "maven-publish") apply(plugin = "maven-publish")
apply(plugin = "com.github.johnrengelman.shadow") apply(plugin = "com.gradleup.shadow")
repositories { repositories {
mavenLocal() mavenLocal()
@@ -40,7 +42,7 @@ allprojects {
dependencies { dependencies {
compileOnly("com.willfp:eco:6.55.0") compileOnly("com.willfp:eco:6.55.0")
compileOnly("org.jetbrains:annotations:23.0.0") compileOnly("org.jetbrains:annotations:23.0.0")
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:1.7.10") compileOnly("org.jetbrains.kotlin:kotlin-stdlib:2.1.0")
} }
java { java {
@@ -52,11 +54,12 @@ allprojects {
shadowJar { shadowJar {
relocate("com.willfp.libreforge.loader", "com.willfp.ecopets.libreforge.loader") relocate("com.willfp.libreforge.loader", "com.willfp.ecopets.libreforge.loader")
relocate("com.willfp.ecomponent", "com.willfp.ecopets.ecomponent") relocate("com.willfp.ecomponent", "com.willfp.ecopets.ecomponent")
relocate("com.willfp.modelenginebridge", "com.willfp.ecopets.modelenginebridge")
} }
compileKotlin { compileKotlin {
kotlinOptions { compilerOptions {
jvmTarget = "17" jvmTarget.set(JvmTarget.JVM_17)
} }
} }

View File

@@ -3,10 +3,10 @@ version = rootProject.version
dependencies { dependencies {
compileOnly("io.papermc.paper:paper-api:1.19.3-R0.1-SNAPSHOT") compileOnly("io.papermc.paper:paper-api:1.19.3-R0.1-SNAPSHOT")
compileOnly("com.ticxo.modelengine:api:R3.1.6")
compileOnly("com.github.ben-manes.caffeine:caffeine:3.0.2") compileOnly("com.github.ben-manes.caffeine:caffeine:3.0.2")
implementation("com.willfp:ecomponent:1.3.0") implementation("com.willfp:ecomponent:1.3.0")
implementation("com.willfp:ModelEngineBridge:1.2.0")
} }
publishing { publishing {

View File

@@ -6,6 +6,7 @@ import com.willfp.eco.core.placeholder.PlayerPlaceholder
import com.willfp.ecopets.commands.CommandEcoPets import com.willfp.ecopets.commands.CommandEcoPets
import com.willfp.ecopets.commands.CommandPets import com.willfp.ecopets.commands.CommandPets
import com.willfp.ecopets.libreforge.ConditionHasActivePet import com.willfp.ecopets.libreforge.ConditionHasActivePet
import com.willfp.ecopets.libreforge.ConditionHasPet
import com.willfp.ecopets.libreforge.ConditionHasPetLevel import com.willfp.ecopets.libreforge.ConditionHasPetLevel
import com.willfp.ecopets.libreforge.EffectGivePetXp import com.willfp.ecopets.libreforge.EffectGivePetXp
import com.willfp.ecopets.libreforge.EffectPetXpMultiplier import com.willfp.ecopets.libreforge.EffectPetXpMultiplier
@@ -19,6 +20,7 @@ import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.SpawnEggHandler import com.willfp.ecopets.pets.SpawnEggHandler
import com.willfp.ecopets.pets.activePet import com.willfp.ecopets.pets.activePet
import com.willfp.ecopets.pets.activePetLevel import com.willfp.ecopets.pets.activePetLevel
import com.willfp.ecopets.pets.hasPet
import com.willfp.ecopets.pets.entity.ModelEnginePetEntity import com.willfp.ecopets.pets.entity.ModelEnginePetEntity
import com.willfp.ecopets.pets.entity.PetEntity import com.willfp.ecopets.pets.entity.PetEntity
import com.willfp.libreforge.SimpleProvidedHolder import com.willfp.libreforge.SimpleProvidedHolder
@@ -28,7 +30,9 @@ import com.willfp.libreforge.filters.Filters
import com.willfp.libreforge.loader.LibreforgePlugin import com.willfp.libreforge.loader.LibreforgePlugin
import com.willfp.libreforge.loader.configs.ConfigCategory import com.willfp.libreforge.loader.configs.ConfigCategory
import com.willfp.libreforge.registerHolderProvider import com.willfp.libreforge.registerHolderProvider
import com.willfp.libreforge.registerSpecificHolderProvider
import com.willfp.libreforge.triggers.Triggers import com.willfp.libreforge.triggers.Triggers
import org.bukkit.entity.Player
import org.bukkit.event.Listener import org.bukkit.event.Listener
class EcoPetsPlugin : LibreforgePlugin() { class EcoPetsPlugin : LibreforgePlugin() {
@@ -47,15 +51,16 @@ class EcoPetsPlugin : LibreforgePlugin() {
override fun handleEnable() { override fun handleEnable() {
Conditions.register(ConditionHasPetLevel) Conditions.register(ConditionHasPetLevel)
Conditions.register(ConditionHasActivePet) Conditions.register(ConditionHasActivePet)
Conditions.register(ConditionHasPet)
Effects.register(EffectPetXpMultiplier) Effects.register(EffectPetXpMultiplier)
Effects.register(EffectGivePetXp) Effects.register(EffectGivePetXp)
Triggers.register(TriggerGainPetXp) Triggers.register(TriggerGainPetXp)
Triggers.register(TriggerLevelUpPet) Triggers.register(TriggerLevelUpPet)
Filters.register(FilterPet) Filters.register(FilterPet)
registerHolderProvider { registerSpecificHolderProvider<Player> {
it.activePetLevel?.let { l -> it.activePetLevel?.let { p ->
listOf(SimpleProvidedHolder(l)) listOf(SimpleProvidedHolder(p))
} ?: emptyList() } ?: emptyList()
} }
@@ -68,6 +73,18 @@ class EcoPetsPlugin : LibreforgePlugin() {
this, this,
"pet_id" "pet_id"
) { it.activePet?.id ?: "" }.register() ) { it.activePet?.id ?: "" }.register()
PlayerPlaceholder(
this,
"total_pets"
) {
var pets = 0
for (pet in Pets.values()) {
if (it.hasPet(pet))
pets++
}
pets.toString()
}.register()
} }
override fun handleReload() { override fun handleReload() {

View File

@@ -11,6 +11,7 @@ class CommandEcoPets(plugin: EcoPlugin) : PluginCommand(plugin, "ecopets", "ecop
.addSubcommand(CommandGiveEgg(plugin)) .addSubcommand(CommandGiveEgg(plugin))
.addSubcommand(CommandGiveXP(plugin)) .addSubcommand(CommandGiveXP(plugin))
.addSubcommand(CommandReset(plugin)) .addSubcommand(CommandReset(plugin))
.addSubcommand(CommandGiveCurrentXP(plugin))
} }
override fun onExecute(sender: CommandSender, args: List<String>) { override fun onExecute(sender: CommandSender, args: List<String>) {

View File

@@ -0,0 +1,80 @@
package com.willfp.ecopets.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.eco.util.StringUtils
import com.willfp.eco.util.savedDisplayName
import com.willfp.eco.util.toNiceString
import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.activePet
import com.willfp.ecopets.pets.givePetExperience
import com.willfp.ecopets.pets.hasPet
import org.bukkit.Bukkit
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import org.bukkit.util.StringUtil
class CommandGiveCurrentXP(plugin: EcoPlugin) : Subcommand(plugin, "givecurrentxp", "ecopets.command.givecurrentxp", false) {
override fun onExecute(sender: CommandSender, args: List<String>) {
if (args.isEmpty()) {
sender.sendMessage(plugin.langYml.getMessage("needs-player"))
return
}
if (args.size == 1) {
sender.sendMessage(plugin.langYml.getMessage("needs-amount"))
return
}
val playerName = args[0]
val player = Bukkit.getPlayer(playerName)
if (player == null) {
sender.sendMessage(plugin.langYml.getMessage("invalid-player"))
return
}
val pet = player.activePet
if (pet == null) {
sender.sendMessage(plugin.langYml.getMessage("no-pet"))
return
}
if (!player.hasPet(pet)) {
sender.sendMessage(plugin.langYml.getMessage("doesnt-have-pet"))
return
}
val amount = args[1].toDoubleOrNull()
if (amount == null) {
sender.sendMessage(plugin.langYml.getMessage("invalid-amount"))
return
}
player.givePetExperience(
pet,
amount
)
sender.sendMessage(
plugin.langYml.getMessage("gave-current-xp", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
.replace("%player%", player.savedDisplayName)
.replace("%xp%", amount.toNiceString())
)
}
override fun tabComplete(sender: CommandSender, args: List<String>): List<String> {
if (args.size == 1) {
return Bukkit.getOnlinePlayers().map { it.name }
}
if (args.size == 2) {
return listOf("10", "100", "1000", "10000")
}
return emptyList()
}
}

View File

@@ -3,9 +3,12 @@ package com.willfp.ecopets.libreforge
import com.willfp.eco.core.config.interfaces.Config import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.pets.Pets import com.willfp.ecopets.pets.Pets
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.arguments import com.willfp.libreforge.arguments
import com.willfp.libreforge.conditions.Condition import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get
import org.bukkit.entity.Player import org.bukkit.entity.Player
object ConditionHasActivePet : Condition<NoCompileData>("has_active_pet") { object ConditionHasActivePet : Condition<NoCompileData>("has_active_pet") {
@@ -13,10 +16,14 @@ object ConditionHasActivePet : Condition<NoCompileData>("has_active_pet") {
require("pet", "You must specify the pet!") require("pet", "You must specify the pet!")
} }
override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean { override fun isMet(
return EcoPetsAPI.instance.hasPet( dispatcher: Dispatcher<*>,
player, config: Config,
Pets.getByID(config.getString("pet").lowercase()) ?: return false holder: ProvidedHolder,
) compileData: NoCompileData
): Boolean {
val player = dispatcher.get<Player>() ?: return false
return EcoPetsAPI.instance.getActivePet(player) == Pets.getByID(config.getString("pet").lowercase())
} }
} }

View File

@@ -0,0 +1,27 @@
package com.willfp.ecopets.libreforge
import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.pets.Pets
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get
import org.bukkit.entity.Player
object ConditionHasPet : Condition<NoCompileData>("has_pet") {
override fun isMet(
dispatcher: Dispatcher<*>,
config: Config,
holder: ProvidedHolder,
compileData: NoCompileData
): Boolean {
val player = dispatcher.get<Player>() ?: return false
return EcoPetsAPI.instance.hasPet(
player,
Pets.getByID(config.getString("pet").lowercase()) ?: return false
)
}
}

View File

@@ -4,9 +4,13 @@ import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.api.event.PlayerPetLevelUpEvent import com.willfp.ecopets.api.event.PlayerPetLevelUpEvent
import com.willfp.ecopets.pets.Pets import com.willfp.ecopets.pets.Pets
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.arguments import com.willfp.libreforge.arguments
import com.willfp.libreforge.conditions.Condition import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get
import com.willfp.libreforge.toDispatcher
import com.willfp.libreforge.updateEffects import com.willfp.libreforge.updateEffects
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
@@ -20,10 +24,17 @@ object ConditionHasPetLevel : Condition<NoCompileData>("has_pet_level") {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
fun handle(event: PlayerPetLevelUpEvent) { fun handle(event: PlayerPetLevelUpEvent) {
event.player.updateEffects() event.player.toDispatcher().updateEffects()
} }
override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean { override fun isMet(
dispatcher: Dispatcher<*>,
config: Config,
holder: ProvidedHolder,
compileData: NoCompileData
): Boolean {
val player = dispatcher.get<Player>() ?: return false
return EcoPetsAPI.instance.getPetLevel( return EcoPetsAPI.instance.getPetLevel(
player, player,
Pets.getByID(config.getString("pet").lowercase()) ?: return false Pets.getByID(config.getString("pet").lowercase()) ?: return false

View File

@@ -4,6 +4,7 @@ import com.willfp.ecopets.api.event.PlayerPetExpGainEvent
import com.willfp.ecopets.pets.Pet import com.willfp.ecopets.pets.Pet
import com.willfp.ecopets.pets.Pets import com.willfp.ecopets.pets.Pets
import com.willfp.libreforge.effects.templates.MultiMultiplierEffect import com.willfp.libreforge.effects.templates.MultiMultiplierEffect
import com.willfp.libreforge.toDispatcher
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
object EffectPetXpMultiplier : MultiMultiplierEffect<Pet>("pet_xp_multiplier") { object EffectPetXpMultiplier : MultiMultiplierEffect<Pet>("pet_xp_multiplier") {
@@ -21,6 +22,6 @@ object EffectPetXpMultiplier : MultiMultiplierEffect<Pet>("pet_xp_multiplier") {
fun handle(event: PlayerPetExpGainEvent) { fun handle(event: PlayerPetExpGainEvent) {
val player = event.player val player = event.player
event.amount *= getMultiplier(player, event.pet) event.amount *= getMultiplier(player.toDispatcher(), event.pet)
} }
} }

View File

@@ -1,6 +1,7 @@
package com.willfp.ecopets.libreforge package com.willfp.ecopets.libreforge
import com.willfp.ecopets.api.event.PlayerPetExpGainEvent import com.willfp.ecopets.api.event.PlayerPetExpGainEvent
import com.willfp.libreforge.toDispatcher
import com.willfp.libreforge.triggers.Trigger import com.willfp.libreforge.triggers.Trigger
import com.willfp.libreforge.triggers.TriggerData import com.willfp.libreforge.triggers.TriggerData
import com.willfp.libreforge.triggers.TriggerParameter import com.willfp.libreforge.triggers.TriggerParameter
@@ -18,7 +19,7 @@ object TriggerGainPetXp : Trigger("gain_pet_xp") {
val player = event.player val player = event.player
this.dispatch( this.dispatch(
player, player.toDispatcher(),
TriggerData( TriggerData(
player = player, player = player,
location = player.location, location = player.location,

View File

@@ -1,6 +1,7 @@
package com.willfp.ecopets.libreforge package com.willfp.ecopets.libreforge
import com.willfp.ecopets.api.event.PlayerPetLevelUpEvent import com.willfp.ecopets.api.event.PlayerPetLevelUpEvent
import com.willfp.libreforge.toDispatcher
import com.willfp.libreforge.triggers.Trigger import com.willfp.libreforge.triggers.Trigger
import com.willfp.libreforge.triggers.TriggerData import com.willfp.libreforge.triggers.TriggerData
import com.willfp.libreforge.triggers.TriggerParameter import com.willfp.libreforge.triggers.TriggerParameter
@@ -18,7 +19,7 @@ object TriggerLevelUpPet : Trigger("level_up_pet") {
val player = event.player val player = event.player
this.dispatch( this.dispatch(
player, player.toDispatcher(),
TriggerData( TriggerData(
player = player, player = player,
location = player.location, location = player.location,

View File

@@ -114,7 +114,6 @@ class Pet(
} }
val entityTexture = config.getString("entity-texture") val entityTexture = config.getString("entity-texture")
val modelEngineAnimation = config.getStringOrNull("modelengine-animation")
private val levelXpRequirements = listOf(0) + config.getInts("level-xp-requirements") private val levelXpRequirements = listOf(0) + config.getInts("level-xp-requirements")
@@ -363,6 +362,8 @@ class Pet(
val level = player.getPetLevel(this) val level = player.getPetLevel(this)
val isActive = player.activePet == this val isActive = player.activePet == this
val baseLoreLocation = if (level == this.maxLevel) "max-level-lore" else "lore"
return ItemStackBuilder(base) return ItemStackBuilder(base)
.setDisplayName( .setDisplayName(
plugin.configYml.getFormattedString("gui.pet-icon.name") plugin.configYml.getFormattedString("gui.pet-icon.name")
@@ -370,7 +371,7 @@ class Pet(
.replace("%pet%", this.name) .replace("%pet%", this.name)
) )
.addLoreLines { .addLoreLines {
injectPlaceholdersInto(plugin.configYml.getStrings("gui.pet-icon.lore"), player) + injectPlaceholdersInto(plugin.configYml.getStrings("gui.pet-icon.$baseLoreLocation"), player) +
if (isActive) plugin.configYml.getStrings("gui.pet-icon.active-lore") else if (isActive) plugin.configYml.getStrings("gui.pet-icon.active-lore") else
plugin.configYml.getStrings("gui.pet-icon.not-active-lore") plugin.configYml.getStrings("gui.pet-icon.not-active-lore")
} }
@@ -379,6 +380,9 @@ class Pet(
fun getPetInfoIcon(player: Player): ItemStack { fun getPetInfoIcon(player: Player): ItemStack {
val base = baseItem.clone() val base = baseItem.clone()
val prefix = if (player.getPetLevel(this) == this.maxLevel) "max-level-" else ""
return ItemStackBuilder(base) return ItemStackBuilder(base)
.setDisplayName( .setDisplayName(
plugin.configYml.getFormattedString("gui.pet-info.active.name") plugin.configYml.getFormattedString("gui.pet-info.active.name")
@@ -386,7 +390,7 @@ class Pet(
.replace("%pet%", this.name) .replace("%pet%", this.name)
) )
.addLoreLines { .addLoreLines {
injectPlaceholdersInto(plugin.configYml.getStrings("gui.pet-info.active.lore"), player) injectPlaceholdersInto(plugin.configYml.getStrings("gui.pet-info.active.${prefix}lore"), player)
} }
.build() .build()
} }

View File

@@ -35,6 +35,8 @@ class PetLevelGUI(
override fun getLevelItem(player: Player, menu: Menu, level: Int, levelState: LevelState): ItemStack { override fun getLevelItem(player: Player, menu: Menu, level: Int, levelState: LevelState): ItemStack {
val key = levelState.name.lowercase().replace("_", "-") val key = levelState.name.lowercase().replace("_", "-")
val prefix = if (player.getPetLevel(pet) == pet.maxLevel) "max-level-" else ""
return ItemStackBuilder(Items.lookup(plugin.configYml.getString("level-gui.progression-slots.$key.item"))) return ItemStackBuilder(Items.lookup(plugin.configYml.getString("level-gui.progression-slots.$key.item")))
.setDisplayName( .setDisplayName(
plugin.configYml.getFormattedString("level-gui.progression-slots.$key.name") plugin.configYml.getFormattedString("level-gui.progression-slots.$key.name")
@@ -44,7 +46,7 @@ class PetLevelGUI(
) )
.addLoreLines( .addLoreLines(
pet.injectPlaceholdersInto( pet.injectPlaceholdersInto(
plugin.configYml.getFormattedStrings("level-gui.progression-slots.$key.lore"), plugin.configYml.getFormattedStrings("level-gui.progression-slots.$key.${prefix}lore"),
player, player,
forceLevel = level forceLevel = level
) )

View File

@@ -1,8 +1,8 @@
package com.willfp.ecopets.pets.entity package com.willfp.ecopets.pets.entity
import com.ticxo.modelengine.api.ModelEngineAPI
import com.willfp.ecopets.EcoPetsPlugin import com.willfp.ecopets.EcoPetsPlugin
import com.willfp.ecopets.pets.Pet import com.willfp.ecopets.pets.Pet
import com.willfp.modelenginebridge.ModelEngineBridge
import org.bukkit.Location import org.bukkit.Location
import org.bukkit.entity.ArmorStand import org.bukkit.entity.ArmorStand
@@ -13,29 +13,11 @@ class ModelEnginePetEntity(
) : PetEntity(pet) { ) : PetEntity(pet) {
override fun spawn(location: Location): ArmorStand { override fun spawn(location: Location): ArmorStand {
val stand = emptyArmorStandAt(location, pet) val stand = emptyArmorStandAt(location, pet)
val meAnimation = pet.modelEngineAnimation
val model = ModelEngineAPI.createActiveModel(modelID) val model = ModelEngineBridge.instance.createActiveModel(modelID) ?: return stand
if (meAnimation != null) { val modelled = ModelEngineBridge.instance.createModeledEntity(stand)
val animationHandler = model.animationHandler modelled.addModel(model)
val animationProperty = animationHandler.getAnimation(meAnimation)
if (animationProperty != null) {
animationHandler.playAnimation(animationProperty, true)
} else {
plugin.logger.warning("Animation $meAnimation not found in model $modelID, defaulting to walk!")
val animationPropertyWalk = animationHandler.getAnimation("walk")
if (animationPropertyWalk != null) {
animationHandler.playAnimation(animationPropertyWalk, true)
} else {
plugin.logger.warning("Walk animation not found in $modelID!")
}
}
}
val modelled = ModelEngineAPI.createModeledEntity(stand)
modelled.addModel(model, true)
return stand return stand
} }

View File

@@ -3,6 +3,11 @@
# by Auxilor # by Auxilor
# #
# Even if eco is set up to use a database, you can
# force EcoPets to save to local storage to disable
# cross-server sync.
use-local-storage: false
discover-recipes: true discover-recipes: true
gui: gui:
@@ -64,6 +69,20 @@ gui:
- "" - ""
- "&eClick to view Level Progression!" - "&eClick to view Level Progression!"
# By default, the lore for the max level is the same,
# but you can change this if you want.
max-level-lore:
- "%description%"
- "&f"
- "&fEffects:"
- "%effects%"
- ""
- "&fProgress:"
- "&8» &e%percentage_progress%%"
- "&8» &e%current_xp%&8/&7%required_xp% &fXP"
- ""
- "&eClick to view Level Progression!"
pet-icon: pet-icon:
name: "%pet% &fLvl. &a%level%" name: "%pet% &fLvl. &a%level%"
lore: lore:
@@ -76,6 +95,18 @@ gui:
- "&8» &e%percentage_progress%%" - "&8» &e%percentage_progress%%"
- "&8» &e%current_xp%&8/&7%required_xp% &fXP" - "&8» &e%current_xp%&8/&7%required_xp% &fXP"
# By default, the lore for the max level is the same,
# but you can change this if you want.
max-level-lore:
- "%description%"
- "&f"
- "&fEffects:"
- "%effects%"
- ""
- "&fProgress:"
- "&8» &e%percentage_progress%%"
- "&8» &e%current_xp%&8/&7%required_xp% &fXP"
active-lore: active-lore:
- "" - ""
- "&cThis pet is already active!" - "&cThis pet is already active!"
@@ -198,6 +229,17 @@ level-gui:
- "&fProgress:" - "&fProgress:"
- "&8» &e%percentage_progress%%" - "&8» &e%percentage_progress%%"
- "&8» &e%current_xp%&8/&7%required_xp% &fXP" - "&8» &e%current_xp%&8/&7%required_xp% &fXP"
# By default, the lore for the max level is the same,
# but you can change this if you want.
max-level-lore:
- "&f"
- "&fRewards:"
- "%rewards%"
- "&f"
- "&fProgress:"
- "&8» &e%percentage_progress%%"
- "&8» &e%current_xp%&8/&7%required_xp% &fXP"
locked: locked:
item: red_stained_glass_pane item: red_stained_glass_pane
name: "%pet% &fLvl. &a%level%" name: "%pet% &fLvl. &a%level%"

View File

@@ -7,6 +7,8 @@ messages:
needs-player: "&cYou must specify a player!" needs-player: "&cYou must specify a player!"
gave-xp: "&fYou have given &a%xp% &fXP to %player%&f's %pet%&f!" gave-xp: "&fYou have given &a%xp% &fXP to %player%&f's %pet%&f!"
gave-current-xp: "&fYou have given &a%xp% &fXP to %player%&f's currently active pet!"
no-pet: "&cThe player doesn't have a pet active!"
reset-xp: "&fYou have reset %player%&f's %pet%&f XP!" reset-xp: "&fYou have reset %player%&f's %pet%&f XP!"
needs-pet: "&cYou must specify a pet!" needs-pet: "&cYou must specify a pet!"
need-amount: "&cYou must specify a amount!" need-amount: "&cYou must specify a amount!"

View File

@@ -1,79 +0,0 @@
name: ${pluginName}
version: ${version}
main: com.willfp.ecopets.EcoPetsPlugin
api-version: 1.19
dependencies:
- name: eco
required: true
bootstrap: false
- name: libreforge
required: false
bootstrap: false
load-after:
- name: eco
bootstrap: false
permissions:
ecopets.*:
description: All ecopets permissions
default: op
children:
ecopets.command.*: true
ecopets.command.*:
description: All commands
default: op
children:
ecopets.command.ecopets: true
ecopets.command.reload: true
ecopets.command.pets: true
ecopets.command.give: true
ecopets.command.giveegg: true
ecopets.command.givexp: true
ecopets.command.reset: true
ecopets.command.activate: true
ecopets.command.deactivate: true
ecopets.command.reload:
description: Allows reloading the config
default: op
ecopets.command.ecopets:
description: Allows the use of /ecopets.
default: true
ecopets.command.pets:
description: Allows the use of /pets.
default: true
ecopets.command.give:
description: Allows the use of /ecopets give.
default: op
ecopets.command.giveegg:
description: Allows the use of /ecopets giveegg.
default: op
ecopets.command.givexp:
description: Allows the use of /ecopets givexp.
default: op
ecopets.command.reset:
description: Allows the use of /ecopets reset.
default: op
ecopets.command.activate:
description: Allows the use of /pets activate.
default: true
ecopets.command.deactivate:
description: Allows the use of /pets deactivate.
default: true
ecopets.xpmultiplier.50percent:
description: Gives the player 50% more skill experience
default: false
ecopets.xpmultiplier.double:
description: Gives the player 2x skill experience
default: false
ecopets.xpmultiplier.triple:
description: Gives the player 3x skill experience
default: false
ecopets.xpmultiplier.quadruple:
description: Gives the player 4x skill experience
default: false

View File

@@ -116,7 +116,6 @@ conditions: [ ]
# The texture of the pet entity in game # The texture of the pet entity in game
# If you're using modelengine, use modelengine:id as the texture # If you're using modelengine, use modelengine:id as the texture
entity-texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTA5NWZjYzFlM2Q3Y2JkMzUwZjE5YjM4OTQ5OGFiOGJiOTZjNjVhZDE4NWQzNDU5MjA2N2E3ZDAzM2FjNDhkZSJ9fX0=" entity-texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTA5NWZjYzFlM2Q3Y2JkMzUwZjE5YjM4OTQ5OGFiOGJiOTZjNjVhZDE4NWQzNDU5MjA2N2E3ZDAzM2FjNDhkZSJ9fX0="
modelengine-animation: "fly" # If you're using ModelEngine, you can specify an animation here
# The icon in GUIs # The icon in GUIs
icon: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTA5NWZjYzFlM2Q3Y2JkMzUwZjE5YjM4OTQ5OGFiOGJiOTZjNjVhZDE4NWQzNDU5MjA2N2E3ZDAzM2FjNDhkZSJ9fX0= icon: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTA5NWZjYzFlM2Q3Y2JkMzUwZjE5YjM4OTQ5OGFiOGJiOTZjNjVhZDE4NWQzNDU5MjA2N2E3ZDAzM2FjNDhkZSJ9fX0=

View File

@@ -35,6 +35,7 @@ permissions:
ecopets.command.give: true ecopets.command.give: true
ecopets.command.giveegg: true ecopets.command.giveegg: true
ecopets.command.givexp: true ecopets.command.givexp: true
ecopets.command.givecurrentxp: true
ecopets.command.reset: true ecopets.command.reset: true
ecopets.command.activate: true ecopets.command.activate: true
ecopets.command.deactivate: true ecopets.command.deactivate: true
@@ -57,6 +58,9 @@ permissions:
ecopets.command.givexp: ecopets.command.givexp:
description: Allows the use of /ecopets givexp. description: Allows the use of /ecopets givexp.
default: op default: op
ecopets.command.givecurrentxp:
description: Allows the use of /ecopets givecurrentxp.
default: op
ecopets.command.reset: ecopets.command.reset:
description: Allows the use of /ecopets reset. description: Allows the use of /ecopets reset.
default: op default: op

View File

@@ -1,5 +1,5 @@
#libreforge-updater #libreforge-updater
#Sun Jul 09 17:24:56 BST 2023 #Sat Mar 29 14:22:31 GMT 2025
kotlin.code.style=official kotlin.code.style=official
libreforge-version=4.22.0 libreforge-version=4.75.0
version=2.21.0 version=2.74.0

Binary file not shown.

View File

@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@@ -1,6 +0,0 @@
jdk: openjdk17
before_install:
- source "$HOME/.sdkman/bin/sdkman-init.sh"
- sdk update
- sdk install java 17.0.1-tem
- sdk use java 17.0.1-tem

View File

@@ -2,11 +2,15 @@ pluginManagement {
repositories { repositories {
gradlePluginPortal() gradlePluginPortal()
mavenLocal() mavenLocal()
maven("https://repo.jpenilla.xyz/snapshots/")
maven("https://repo.auxilor.io/repository/maven-public/") maven("https://repo.auxilor.io/repository/maven-public/")
maven("https://repo.papermc.io/repository/maven-public/")
} }
} }
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}
rootProject.name = "EcoPets" rootProject.name = "EcoPets"
// Core // Core